我正在尝试使用ggplot2创建带有错误栏*的堆积条形图,类似于下图:
我使用了以下代码:
df <- data.frame(substrate = gl(6, 2, 12, labels=letters[1:6]),
depth = gl(2, 1, 12, labels=c("surf", "deep")),
mean = 10 * runif(12),
err = runif(12))
p <- ggplot(df, aes(x=depth, y=mean, fill=substrate)) + geom_bar(stat="identity") + coord_flip()
p + geom_errorbar(aes(x=depth, ymin=mean-err, ymax=mean+err))
这给了我这个:
看起来错误栏的中心位于均值位置而不是平均值+“先前”基板的平均值。也就是说,误差条a的中心应该是a的平均值,误差条b的中心应该是平均值a +平均值b等。
有谁知道如何在ggplot2中实现这一目标?
*我意识到有很好的理论原因不能以这种方式显示数据 - 但我们并不总是自己决定如何呈现我们的数据!
答案 0 :(得分:5)
我想你可以用geom_segment
做到这一点,但是你的例子只有一个方向的条形图,这看起来更聪明。所以我和geom_segment
一起攻击了一些东西:
df <- data.frame(substrate = gl(6, 2, 12, labels=letters[1:6]),
depth = gl(2, 1, 12, labels=c("surf", "deep")),
mean = 10 * runif(12),
err = runif(12))
df <- ddply(df,.(depth),transform,ystart = cumsum(mean),yend = cumsum(mean) + err)
p <- ggplot(df, aes(x=depth, y=mean, fill=substrate)) +
geom_bar(stat="identity")
p + geom_segment(aes(xend = depth,y = ystart,yend = yend)) +
geom_point(aes(x = depth,y = yend),shape = "|",show_guide = FALSE) +
coord_flip()