Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Annotating each facet of a grid

I’m looking to add a text box to each facet of a ggplot facet_grid. I have a data frame similar to this:

test<- structure(list(group = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5), species = c("A", 
"A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", 
"C", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", 
"C", "C", "C"), value = c(10, 7, 4, 3, 1, 9, 3, 2, 2, 1, 6, 4, 
3, 1, 1, 4, 3, 3, 2, 1, 10, 9, 6, 3, 1, 7, 7, 4, 2, 1), season = c("spring", 
"spring", "spring", "spring", "spring", "spring", "spring", "spring", 
"spring", "spring", "spring", "spring", "spring", "spring", "spring", 
"fall", "fall", "fall", "fall", "fall", "fall", "fall", "fall", 
"fall", "fall", "fall", "fall", "fall", "fall", "fall")), row.names = c(NA, 
-30L), class = "data.frame")

It is plotted with the following:

ggplot(test, aes(x=group, y=value))+
  geom_point(size=2, show.legend=F)+
  geom_line()+
  facet_grid(season ~ species, scales= "fixed")+
  xlab("")+
  ylab("")+
  scale_x_continuous(limits = c(1,5), breaks=seq(1,5,1))+
  theme_light()+
  theme(strip.text = element_text(face = "bold", color = "black",
                                  hjust = .5, size = 10),
        strip.background = element_rect(color = "black"),
        panel.border = element_rect(color="black"), 
        panel.grid.minor.x= element_blank(),
        panel.grid.minor.y = element_blank())

And I have a data frame that contains the label for each panel:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

labels<- structure(list(label = c("n=1", "n=2", "n=3", "n=4", "n=5", "n=6"
), species = c("A", "B", "C", "A", "B", "C"), season = c("spring", 
"spring", "spring", "fall", "fall", "fall"), x = c(4, 4, 4, 4, 
4, 4), y = c(8, 8, 8, 8, 8, 8)), row.names = c(NA, -6L), class = "data.frame")
# the X and Y columns are the coordinates of where I want the label to appear in each facet

I was able to get the desired output when I only use a facet_wrap, but when doing a grid I cant get the labels to correspond to both the correct row and column.

Any help/insight would be greatly appreciated.

>Solution :

I might not be appreciating the difficulty here, but it seems to me that geom_text() would simply do the job adequately.

ggplot(test, aes(x=group, y=value))+
  geom_point(size=2, show.legend=F)+
  geom_line()+
  geom_text(aes(x = x, y = y, label = label),
            data = labels) +
  facet_grid(season ~ species, scales= "fixed")+
  xlab("")+
  ylab("")+
  scale_x_continuous(limits = c(1,5), breaks=seq(1,5,1))+
  theme_light()+
  theme(strip.text = element_text(face = "bold", color = "black",
                                  hjust = .5, size = 10),
        strip.background = element_rect(color = "black"),
        panel.border = element_rect(color="black"), 
        panel.grid.minor.x= element_blank(),
        panel.grid.minor.y = element_blank())

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading