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!