{"id":4940,"date":"2019-08-28T14:57:23","date_gmt":"2019-08-28T13:57:23","guid":{"rendered":"https:\/\/www.blopig.com\/blog\/?p=4940"},"modified":"2019-08-28T14:57:23","modified_gmt":"2019-08-28T13:57:23","slug":"combining-inset-plots-with-facets-using-ggplot2","status":"publish","type":"post","link":"https:\/\/www.blopig.com\/blog\/2019\/08\/combining-inset-plots-with-facets-using-ggplot2\/","title":{"rendered":"Combining Inset Plots with Facets using ggplot2"},"content":{"rendered":"\n<p>I recently spent some time working out how to include mini inset plots within ggplot2 facets, and I thought I would <a href=\"https:\/\/clarewest.github.io\/blog-posts\/ggplotInset.html\">share my code<\/a> in case anyone else wants to achieve a similar thing. The resulting plot looks something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4955\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets-1.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>First let\u2019s load some packages that are required for this example (and for an easy life, in general):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## some essentials from the tidyverse\nlibrary(ggplot2)   ## for plotting\nlibrary(dplyr)     ## for data manipulation \nlibrary(lubridate) ## for handling dates <\/pre>\n\n\n\n<p>For this example, I\u2019ll be playing with some Nobel Prize data. This&nbsp;<a href=\"https:\/\/github.com\/rfordatascience\/tidytuesday\/tree\/master\/data\/2019\/2019-05-14\">dataset<\/a>&nbsp;was featured in the weekly&nbsp;<a href=\"https:\/\/twitter.com\/search?src=typd&amp;q=%23tidytuesday\">#TidyTuesday<\/a>&nbsp;R community event, which is led by&nbsp;<a href=\"https:\/\/twitter.com\/thomas_mock\">@thomas_mock<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/twitter.com\/R4DSCommunity\">@R4DSCommunity<\/a>, and&nbsp;<a href=\"https:\/\/nsgrantham.shinyapps.io\/tidytuesdayrocks\/\">catalogued<\/a>&nbsp;by&nbsp;<a href=\"https:\/\/twitter.com\/nsgrantham\">@nsgrantham<\/a><\/p>\n\n\n\n<p>Start by reading in the data and adding the age of each laureate at the time of the award, based on their birth date and the prize year.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nobel &lt;- \n read.csv(\"https:\/\/raw.githubusercontent.com\/rfordatascience\/tidytuesday\/master\/data\/2019\/2019-05-14\/nobel_winners.csv\")\nplot_data &lt;- \n  nobel %&gt;% \n  mutate(prize_date = paste0(prize_year, \"-12-10\"),  \n         age = time_length(interval(ymd(birth_date), ymd(prize_date)), \"year\")) %&gt;%\n  group_by(prize_year, laureate_id) %&gt;%\n  slice(1) %&gt;%  ## make sure we have just one row per prizewinner per year\n  ungroup()<\/pre>\n\n\n\n<p>The main plot will show how the age of winners has changed over time for the six categories. Also presented &#8211; without comment &#8211; is the gender of each laureate.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">main_plot &lt;- \n  ggplot(plot_data, aes(group=category)) + \n  geom_point(aes(x=prize_year, y=age, colour=gender), alpha=0.6) + \n  facet_wrap(~category) +  ## plot each prize category separately \n  theme_bw() +\n  labs(y=\"Age of prize winner\", x=\"Year of award\") + \n  geom_smooth(aes(x=prize_year, y=age), method = \"loess\") + ## add a smoothed line\n  scale_y_continuous(limits=c(0,100)) + \n  scale_colour_discrete(breaks=c(\"Female\",\"Male\")) +\n  theme(panel.grid.major = element_blank(), \n        panel.grid.minor = element_blank(), \n        legend.position = \"bottom\",\n        legend.title = element_blank()) \n\nmain_plot<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4954\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/main_plot.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>It looks like Nobel prize winners are getting older for all categories other than Peace, which may be reassuring for those of us who are yet to receive one\u2026<\/p>\n\n\n\n<p>As an example of the inset, let\u2019s use a bar plot counting the number of people sharing the prize each year.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## A function to plot the inset \nget_inset &lt;- function(df){\n  p &lt;- ggplot(data=df %&gt;% \n                group_by(category, prize_year) %&gt;% \n                slice(1),\n              aes(x=prize_share, fill=category)) +\n    geom_bar() + \n    scale_x_discrete( drop=FALSE) + \n    scale_fill_manual(values = c(\"#00BF7D\", \"#A3A500\", \"#F8766D\",\"#00B0F6\",\"#E76BF3\",\"#636363\")) + \n    guides(fill=FALSE) +\n    theme_bw(base_size=9) +  ## makes everything smaller\n    theme(panel.background = element_rect(fill=\"white\"),  ## white plot background \n          axis.title.y = element_blank(),\n          axis.title.x = element_blank(),\n          axis.text.x = element_text(size=rel(0.7)), ## tiny axis text\n          panel.grid.major = element_blank(),\n          panel.grid.minor = element_blank(),\n          plot.background = element_blank())\n  return(p)\n}\n\ninset_plot &lt;- get_inset(plot_data) <\/pre>\n\n\n\n<p>Adding this plot as an inset is easy using&nbsp;<a href=\"https:\/\/ggplot2.tidyverse.org\/reference\/annotation_custom.html\"><code>annotation_custom<\/code><\/a>. However, by definition, the annotation will be the same on every panel:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## Add it as an inset\nmain_plot +\n    annotation_custom(grob=ggplotGrob(inset_plot), \n                      ymin = -8, ymax=34, xmin=1955, xmax=2015)<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4953\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/identical_insets.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p><code>ymin<\/code>,&nbsp;<code>ymax<\/code>,&nbsp;<code>xmin<\/code>&nbsp;and&nbsp;<code>xmax<\/code>&nbsp;define where the inset (the grob) will be placed. This of course needs tweaking to find the right spot to avoid covering any important parts of the data (like Malala)<\/p>\n\n\n\n<p>When using facets, having the same plot on each facet is not very informative.<\/p>\n\n\n\n<p>To add different plots to each facet, I used a workaround modified from this&nbsp;<a href=\"https:\/\/stackoverflow.com\/questions\/37867758\/insetting-on-facet-grided-and-grid-arrangeed-plot\">StackOverflow answer<\/a>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">## This function allows us to specify which facet to annotate\nannotation_custom2 &lt;- function (grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, data) \n{\n  layer(data = data, stat = StatIdentity, position = PositionIdentity, \n        geom = ggplot2:::GeomCustomAnn,\n        inherit.aes = TRUE, params = list(grob = grob, \n                                          xmin = xmin, xmax = xmax, \n                                          ymin = ymin, ymax = ymax))\n}<\/pre>\n\n\n\n<p>Use the&nbsp;<code>data<\/code>&nbsp;argument to place the inset on the relevant facet, either by subsetting the actual data used to plot the inset, or just make a dataframe containing the aestetic (<code>aes<\/code>) used to divide into facets (here, it\u2019s category).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">main_plot +\n    annotation_custom2(grob=ggplotGrob(inset_plot), \n                      data = data.frame(category=\"Chemistry\"),\n                      ymin = -8, ymax=34, xmin=1955, xmax=2015)<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4952\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/facet_inset.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>To do this for all the facets, I\u2019ll use&nbsp;<code>split()<\/code>&nbsp;to divide the dataframe into categories, and&nbsp;<code>map()<\/code>&nbsp;from the&nbsp;<a href=\"https:\/\/purrr.tidyverse.org\/\"><code>purrr<\/code>&nbsp;package<\/a>&nbsp;to apply our&nbsp;<code>annotation_custom2()<\/code>&nbsp;function to each subset and return the results as a list. See the StackOverflow for a solution using&nbsp;<code>plyr<\/code>&nbsp;instead, if you prefer. This can then be added to the plot:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">library(purrr)\n\ninsets &lt;- plot_data %&gt;% \n  split(f = .$category) %&gt;%\n  purrr::map(~annotation_custom2(\n    grob = ggplotGrob(get_inset(.) +\n                        scale_y_continuous(limits=c(0,105), breaks = c(0, 50, 100))), \n    data = data.frame(category=unique(.$category)),\n    ymin = -8, ymax=34, xmin=1955, xmax=2015)\n  )\n\n\nmain_plot + insets<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4951\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/all_facet_insets.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>We can now draw the groundbreaking conclusion that when it comes to Nobel glory, Literature is a more solitary field than Medicine.<\/p>\n\n\n\n<p>And now just for fun, while we\u2019re here:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">multiple_winners &lt;- \n  plot_data %&gt;% \n  group_by(laureate_id) %&gt;% \n  filter(length(laureate_id) &gt; 1)\n\nmain_plot + \n  insets +\n  geom_point(data = multiple_winners, \n             aes(x=prize_year, y=age), shape = 1, alpha=0.7) +\n  ggrepel::geom_text_repel(data = multiple_winners, \n                           aes(label=gsub(\",.*$\",\"\",full_name), \n                               x=prize_year, y=age, group=full_name), \n                           size=2, force=10, nudge_y = 45, segment.size=0.15)<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"625\" height=\"446\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?resize=625%2C446&#038;ssl=1\" alt=\"\" class=\"wp-image-4949\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?resize=1024%2C731&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?resize=300%2C214&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?resize=768%2C548&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?resize=624%2C446&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?w=1250&amp;ssl=1 1250w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2019\/08\/multiple_winners.png?w=1875&amp;ssl=1 1875w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>Facet-nating!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently spent some time working out how to include mini inset plots within ggplot2 facets, and I thought I would share my code in case anyone else wants to achieve a similar thing. The resulting plot looks something like this:<\/p>\n","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","wikipediapreview_detectlinks":true,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[29,14],"tags":[87,241,256,18,255],"ppma_author":[527],"class_list":["post-4940","post","type-post","status-publish","format-standard","hentry","category-code","category-howto","tag-code-2","tag-ggplot2","tag-plotting","tag-r","tag-visualisation"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"authors":[{"term_id":527,"user_id":42,"is_guest":0,"slug":"clare","display_name":"Clare West","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/9a762724a4c7d60c6441502fe11052c3785c325c1c1e844dacfbe2bee8b33347?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/4940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/comments?post=4940"}],"version-history":[{"count":5,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/4940\/revisions"}],"predecessor-version":[{"id":4957,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/4940\/revisions\/4957"}],"wp:attachment":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/media?parent=4940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/categories?post=4940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/tags?post=4940"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}