4

以下のプロットのように、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でこれを実現する方法を知っている人はいますか?

*データをこのように表示しない優れた理論的理由があることは理解していますが、データの表示方法を常に自分で決定できるとは限りません!

4

1 に答える 1

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

ここに画像の説明を入力

于 2012-05-02T15:51:45.710 に答える