1

我使用以下数据在 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 绘制通量过滤,然后添加err_flux列中定义的 y 误差条。我想从err_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)

结果图如下所示: 在此处输入图像描述

这是我尝试添加箭头的内容(例如,上图中“obj2”的 4 个最左边的点,但它不起作用:

for (i in 1:nrow(finaldata)) {
 if (finaldata$err_flux==0.){
   gfinal<-gfinal + geom_segment(x=finaldata$filt[i], y=finaldata$flux[i], xend=finaldata$filt[i], yend=finaldata$flux[i]-0.5,arrow=arrow(length=unit(0.25,"cm")))
  }
 }

此外,如果我将“geom_segment”应用于实际数据的子集,由于维度不同 ,它不会添加到我现有的绘图 ( gfinal ) 中。

任何建议/帮助将不胜感激。

4

1 回答 1

2

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

geom_segment我用to替换了我的程序的最后一部分,它使用了 for 和 if 循环,annotate如下所示:

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")))

结果如下图:请参阅最左侧 4 个数据点上的 4 个 <code>red</code> 箭头

于 2015-10-13T15:30:09.760 回答