根据mean()和sd()数据添加多个ggplot2 geom_segment()

时间:2016-05-12 18:20:58

标签: r ggplot2

我的数据框mydataAll包含DESWCjournalhighlight列。要计算每个DESWC的{​​{1}}的平均值和标准差,我会

journal

现在我绘制一个水平条形图,沿x轴的值为avg <- aggregate(DESWC ~ journal, data = mydataAll, mean) stddev <- aggregate(DESWC ~ journal, data = mydataAll, sd) ,沿y轴的值为DESWC。但对于每个journal,我想用简单的线表示标准偏差和平均值。这是我目前的代码和结果。

journal

enter image description here

查看图像底部的三个水平geom_segments指示传播?我希望为所有stripchart2 <- ggplot(data=mydataAll, aes(x=mydataAll$DESWC, y=mydataAll$journal, color=highlight)) + geom_segment(aes(x=avg[1,2] - stddev[1,2], y = avg[1,1], xend=avg[1,2] + stddev[1,2], yend = avg[1,1]), color="gray78") + geom_segment(aes(x=avg[2,2] - stddev[2,2], y = avg[2,1], xend=avg[2,2] + stddev[2,2], yend = avg[2,1]), color="gray78") + geom_segment(aes(x=avg[3,2] - stddev[3,2], y = avg[3,1], xend=avg[3,2] + stddev[3,2], yend = avg[3,1]), color="gray78") + geom_point(size=3, aes(alpha=highlight)) + scale_x_continuous(limit=x_axis_range) + scale_y_discrete(limits=mydataAll$journal) + scale_alpha_discrete(range = c(1.0, 0.5), guide='none') show(stripchart2) 做到这一点,但不需要手工制作每个journals。我尝试了using the solution from this question,但是当我把所有内容都放在一个循环中并删除了aes()时,它会给我一个错误:

Error in x - from[1] : non-numeric argument to binary operator

任何人都可以帮我压缩geom_segment()语句吗?

1 个答案:

答案 0 :(得分:2)

我生成了一些虚拟数据来演示。首先,我们像您一样使用aggregate,然后我们将这些结果组合在一起创建data.frame,我们在其中创建upperlower列。然后,我们将这些传递给指定新数据集的geom_segment。另外,我将x指定为字符变量,将y指定为数字变量,然后使用coord_flip()

library(ggplot2)
set.seed(123)
df <- data.frame(lets = sample(letters[1:8], 100, replace = T),
                 vals = rnorm(100), 
                 stringsAsFactors = F)
means <- aggregate(vals~lets, data = df, FUN = mean)
sds <- aggregate(vals~lets, data = df, FUN = sd)
df2 <- data.frame(means, sds)
df2$upper = df2$vals + df2$vals.1
df2$lower = df2$vals - df2$vals.1

ggplot(df, aes(x = lets, y = vals))+geom_point()+
  geom_segment(data = df2, aes(x = lets, xend = lets, y = lower, yend = upper))+
  coord_flip()+theme_bw()

enter image description here 在这里,lets列将类似于您的字符变量。