Janesh Devkota
2013-Jan-24 17:46 UTC
[R] Insert segment only on particular facets in ggplot
Dear R users,
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 is attached along.
My output is also attached :
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,
Janesh Devkota
-------------- next part --------------
A non-text attachment was scrubbed...
Name: output.png
Type: image/png
Size: 32197 bytes
Desc: not available
URL:
<https://stat.ethz.ch/pipermail/r-help/attachments/20130124/f3875cf5/attachment.png>
The image came through but no data. I'd suggest using ?dput to send the data. John Kane Kingston ON Canada> -----Original Message----- > From: janesh.devkota at gmail.com > Sent: Thu, 24 Jan 2013 11:46:53 -0600 > To: r-help at r-project.org > Subject: [R] Insert segment only on particular facets in ggplot > > Dear R users, > > 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 is attached along. > > My output is also attached : > > 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, > Janesh Devkota > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.____________________________________________________________ FREE ONLINE PHOTOSHARING - Share your photos online with your friends and family! Visit http://www.inbox.com/photosharing to find out more!