仅在某个方面ggplot中添加注释(片段/箭头) [英] Adding annotation (segment / arrow) in only certain facet ggplot

查看:1242
本文介绍了仅在某个方面ggplot中添加注释(片段/箭头)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


可能存在重复:

在ggplot2的各个方面注释文本


我正在研究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,color = group1))+ facet_wrap(〜id,ncol = 1)+ theme_bw()$ ()表达式(温度〜(度)*))+ element_blank()+主题(
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(break = c(250,300,350,400,450,500,550),labels = c(250,300,350,34,84,134,184))
p1

###这就是它的样子(尽管显示所有图的注释)
p + annotate(text,x = 340,y = 3,label =2008,大小= 3)+注释( 段 中,x = 366,xend的= 366,Y = 0,YEND = 2,大小= 0.5)+注释( 文本 中,x = 390,Y = 3,标记=2009年,大小= 3)+注释( 段 中,x = 366,X端= 310,Y = 1,YEND = 1,大小= 0.5,箭头​​=箭头(长度=单元(0.2, CM)))+注释( 段 中,x = 366,xend的= 420,Y = 1 ,yend = 1,size = 0.5,arrow = arrow(length = unit(0.2,cm)))


###这就是我所做的显示文本注释的方法底部面板
ann_text 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



我的输出是



这是我唯一得到的文本注释。但是对于分段注释,我总是有错误。您可以注意到在底部面板上添加了2008年和2009年的文字标签。





输出显示我想要的注释,但它在所有方面。我只想在最下面的一个。



非常感谢。



问候,
Jdbaba

解决方案

您应该为您想要用于该细分的值创建一个数据框(与文本标签相同)。

  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()来绘制所有元素

 <$ c_c> 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)


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)

这篇关于仅在某个方面ggplot中添加注释(片段/箭头)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆