R 使用geom_段在现有绘图上绘制选定数据点的箭头

R 使用geom_段在现有绘图上绘制选定数据点的箭头,r,plot,ggplot2,upperbound,R,Plot,Ggplot2,Upperbound,我已使用R中的ggplot2软件包,使用以下数据创建了一个绘图: # Ind filt objs flux filt objs err_flux# 01 4590 obj1 1005.448892 4590 errobj1 0.0401 02 6220 obj1 1420.626789 6220 errobj1 0.0392 03 7640 obj1 1855.581355 7640 errobj1 0.0432 *......

我已使用R中的ggplot2软件包,使用以下数据创建了一个绘图:

# Ind filt objs        flux  filt    objs err_flux#

01   4590 obj1 1005.448892  4590 errobj1   0.0401  
02   6220 obj1 1420.626789  6220 errobj1   0.0392  
03   7640 obj1 1855.581355  7640 errobj1   0.0432  
 *.......skipped lines...*    
20 21512 obj2  949.642188 21512 errobj2     0.1516    
21  2030 obj2    9.838299  2030 errobj2   **0.0000**  
22  2253 obj2   17.097003  2253 errobj2   **0.0000**  
23  2612 obj2   14.754347  2612 errobj2   **0.0000**  
24  3470 obj2   14.890868  3470 errobj2   **0.0000**  
我正在用ggplot绘制通量vsfilt,然后添加通量列中定义的y误差条。 我想从数据点绘制箭头,其err\u flux==0。

以下是我目前的计划:

g <- ggplot(finaldata[1:26, ], aes(x = filt, y = log10(flux), color = objs))
gf1 <- g + geom_point(size = 2, alpha = 0.8, pch = 15) + theme_bw()
gf <- gf1 + geom_errorbar(aes(ymax = log10(flux) + err_flux,
                              ymin = log10(flux) - err_flux),
                           size = 0.5, color = "darkgrey")
gff <-gf + xlab("wavelength") + ylim(0.3,4.5) +
          geom_smooth(method = "loess", se = FALSE)
gfinal <- gff + scale_color_hue(l = 10, c = 75)

g
Annotate
函数帮助我从选定的数据点绘制向下的箭头(上界)

我用
geom_段
替换程序的最后一部分,该部分使用for和if循环
注释,如下所示:

sub<-subset(finaldata[1:26,],finaldata[1:26,]$err_flux==0.)
gfinal+annotate("segment",x=sub$filt,xend=sub$filt,y=log10(sub$flux),yend=log10(sub$flux)-0.25,color="red",arrow = arrow(length = unit(0.2, "cm")))

使用
注释
,不要对
循环使用
。将数据细分为您想要注释的部分,并使用
数据
参数。@Gregor:这是我第一次尝试使用R进行绘图,所以我就是这么做的:
SubnerMind!我需要这样定义:
annotate(“segment”,x=sub$filt,xend=sub$filt,y=log10(sub$flux),yend=log10(sub$flux)-0.5,color=“red”)
如果您愿意,在自己制定解决方案时鼓励您回答自己的问题。
sub<-subset(finaldata[1:26,],finaldata[1:26,]$err_flux==0.)
gfinal+annotate("segment",x=sub$filt,xend=sub$filt,y=log10(sub$flux),yend=log10(sub$flux)-0.25,color="red",arrow = arrow(length = unit(0.2, "cm")))