2013-01-24 53 views
4

可能重複:
Annotating text on individual facet in ggplot2添加註釋(段/箭頭)ggplot

我對工作的一個數據集有3種。他們是蘋果,橙子和香蕉。

我只想在底部面板上註釋小平面。但是,默認情況下,我會在所有地塊上獲得註釋。我只能在所需的圖上獲得文本註釋。不過,我很困惑我需要爲箭頭/細分做些什麼。

這裏是我的代碼:

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 

現在,我想補充基於整體圖形箭頭和段。

我的數據可以在https://www.dropbox.com/s/dfcmqrslskwdh80/temp%20data%20share.csv

找到我的輸出是enter image description here

這是我僅有的文字註釋了。但是對於分段註釋,我總是有錯誤。您可以注意到在底部面板上添加了2008年和2009年的文字標籤。

enter image description here

輸出顯示我想要的註解,但它是在所有的方面。我只想在最下面的一個。

非常感謝。

問候, Jdbaba

回答

9

你應該做一個數據幀(相同的文本標籤),還爲您要使用的段值。

ann_line<-data.frame(xmid=366,xmin=310,xmax=420,y0=0,y2=2,y=1, 
    id=factor("orange",levels=c("apple","banana","orange"))) 

然後使用geom_segment()繪製的所有元素

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) 

enter image description here

+0

你好我可以問你一個問題嗎?上圖中又增加了兩個系列。兩條線是表面和底部,因此我除了觀察外還有兩個傳說。我怎樣才能將兩個傳說一起對齊?兩個傳說之間有一些空間。我刪除了圖例標題。我試圖把它們放在頂部,並顯示在兩行上。如果你能告訴我,我怎麼能把這兩個傳說放在同一排上,那會很棒。 –