如何在不使用aes()定义错误条的位置的情况下控制geom_errorbars末端的x位置?

时间:2019-07-18 19:13:11

标签: r ggplot2 plot

我正在创建一个图形,然后在该图形上添加误差线。误差线的位置取决于第一个图表。我绘制的误差线的数量也必须能够更改(因此for循环)。

df <- data.frame(x=1:10,y=sample(1:10,10,replace = TRUE))
plot <- ggplot(df)+
  geom_line(aes(x,y))
plot.data <- ggplot_build(plot)$data[[1]]

plot #first plotting

制作完初始图形后,一切看起来都不错:

要添加误差线(在此示例中,值的范围

for(i in 1:5){
  plot<- plot + geom_errorbar(x=i*2,ymin = min(plot.data$y[plot.data$x <= i*2]),ymax = max(plot.data$y[plot.data$x <= i*2]),width = 1,color = "blue")
}
plot #second plotting

This abomination

我希望能够控制误差线两端的x位置。我希望它们位于error_bar的垂直部分,我不知道为什么有些在x =〜6处而有些在x =〜20

当我尝试在aes()周围添加x,ymin,ymax时:

for(i in 1:5){
  plot<- plot + geom_errorbar(aes(x=i*2,ymin = min(plot.data$y[plot.data$x <= i*2]),ymax = max(plot.data$y[plot.data$x <= i*2]),width = 1),color = "blue")
}
plot

仅绘制了最终的error_bar,尽管其末端位于正确的位置。

我知道可以使用aes()操作error_bars的末端,但是我不能使用它,因为它不会在循环中复制,只绘制最后一次迭代。 此外,当前确定error_bars两端的x位置的是什么?数字〜6.5和〜21没有出现在我的任何数据中

1 个答案:

答案 0 :(得分:1)

不要在循环中添加错误栏。首先创建一个以x,ymin和ymax值作为列的数据框,然后对该数据框调用一次geom_errorbar

i = 1:5
err.data = data.frame(x = i * 2)
for (j in i) {
  err.data[j, 'ymin'] = min(df$y[df$x <= j*2])
  err.data[j, 'ymax'] = max(df$y[df$x <= j*2])
} 

plot +
  geom_errorbar(aes(x,ymin=ymin,ymax=ymax), data=err.data, color='blue')

enter image description here