【问题标题】:Stacked barplot with errorbars using ggplot2使用ggplot2的带有误差线的堆叠条形图
【发布时间】:2012-05-02 15:36:05
【问题描述】:

我正在尝试使用 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))

这给了我这个:

它看起来像平均值位置的误差条中心,而不是平均值 +“先前”基板的平均值。也就是说,errorbar a 的中心应该在 a 的均值处,errorbar b 的中心应该在 mean a + mean b 处,以此类推。

有谁知道如何在 ggplot2 中实现这一点?

*我意识到不以这种方式显示数据有很好的理论上的理由 - 但我们并不总是能够自己决定如何呈现我们的数据!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我想你可以用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()
    

    【讨论】:

    • 单向条要好得多 - 它们减少了条之间重叠的机会。
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多