Possible Duplicate:
Annotating text on individual facet in ggplot2
I am working on a data-set with 3 species. They are apple, orange and banana.
I want to annotate the facets only on the bottom panel. However, by default I am getting annotations on all the plots. I was able to get text annotation only on the desired plot. However, I am confused what I need to do for the arrows / segments.
Here is my code:
library(ggplot2)
library(grid)
tempobs <- read.csv("temp data share.csv",header=T, sep=",")
p1 <- ggplot(tempobs,aes(x=time,y=data))+geom_point(data=tempobs,aes(x=time,y=data,colour=group1))+facet_wrap(~id,ncol=1)+theme_bw()
p1 <- p1 + xlab("Julian Day (2008-2009)")+ylab(expression(Temperature~(degree*C)))+ element_blank()+ theme(
legend.position="right",
legend.direction="vertical",
legend.title = element_blank()) +coord_cartesian(xlim=c(250,550))+coord_cartesian(ylim=c(0,40))+scale_x_continuous(breaks=c(250,300,350,400,450,500,550),labels=c("250","300","350","34","84","134","184"))
p1
### This is how it should look like (though shows annotations for all the plots)
p + annotate("text",x=340,y=3,label="2008",size=3)+annotate("segment",x=366,xend=366,y=0,yend=2,size=0.5)+annotate("text",x=390,y=3,label="2009",size=3)+annotate("segment",x=366,xend=310,y=1,yend=1,size=0.5,arrow=arrow(length=unit(0.2,"cm")))+annotate("segment",x=366,xend=420,y=1,yend=1,size=0.5,arrow=arrow(length=unit(0.2,"cm")))
### This is what I did to show text annotation on the bottom panel
ann_text <- data.frame(x=c(340,390),y=c(3,3),id=c("orange"),label=c("2008","2009"))
p1 <- p1 + geom_text(data=ann_text,aes(x=x,y=y,label=label,size=3),show_guide=F)
p1
Now, I want to add the arrows and segment based on the overall graph.
My data can be found on https://www.dropbox.com/s/dfcmqrslskwdh80/temp%20data%20share.csv
My output is
This is what I got with only text annotation. But for segment annotation I always got error. You can notice text labels 2008 and 2009 added on the bottom panel.
The output shows the annotation I want but it is on all the facets. I want only on the bottom one.
Thank you so much.
Regards, Jdbaba
You should make a data frame (the same as for the text labels) also for values you want to use for the segment.
ann_line<-data.frame(xmid=366,xmin=310,xmax=420,y0=0,y2=2,y=1,
id=factor("orange",levels=c("apple","banana","orange")))
Then use geom_segment()
to plot all the elements
p1 + geom_segment(data=ann_line,aes(x=xmid,xend=xmin,y=y,yend=y),arrow=arrow(length=unit(0.2,"cm")),show_guide=F)+
geom_segment(data=ann_line,aes(x=xmid,xend=xmax,y=y,yend=y),arrow=arrow(length=unit(0.2,"cm")),show_guide=F)+
geom_segment(data=ann_line,aes(x=xmid,xend=xmid,y=y0,yend=y2),show_guide=F)+
geom_text(data=ann_text,aes(x=x,y=y,label=label,size=3),show_guide=F)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With