3

私はdata.frame

df <- structure(list(sample = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", 
"B", "C"), class = "factor"), replicate = c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), 
    treatment = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 
    2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("V0", 
    "V2", "V4", "V6"), class = "factor"), mean = c(72.5, 66.4, 
    60.3, 56.3, 90.7, 86.9, 68.8, 64.6, 73.3, 69.8, 62.3, 68.7, 
    77.1, 73.6, 65.9, 65.3, 75.7, 73.8, 65.9, 66.8), sd = c(5.4, 
    6.1, 3.5, 4.7, 1.2, 4.9, 8.4, 6.1, 7.3, 3.5, 5.9, 2.2, 3.2, 
    3, 3.1, 4.2, 4.2, 2.4, 2.2, 2.6)), .Names = c("sample", "replicate", 
"treatment", "mean", "sd"), class = "data.frame", row.names = c(NA, 
-20L))

一部のサンプルでは複製がありますが、他のサンプルでは複製がありません。

> head(df, 15)
   sample replicate treatment mean  sd
1       A         1        V0 72.5 5.4
2       A         1        V2 66.4 6.1
3       A         1        V4 60.3 3.5
4       A         1        V6 56.3 4.7
5       B         1        V0 90.7 1.2
6       B         1        V2 86.9 4.9
7       B         1        V4 68.8 8.4
8       B         1        V6 64.6 6.1
9       C         1        V0 73.3 7.3
10      C         1        V2 69.8 3.5
11      C         1        V4 62.3 5.9
12      C         1        V6 68.7 2.2
13      C         2        V0 77.1 3.2
14      C         2        V2 73.6 3.0
15      C         2        V4 65.9 3.1

sample各値のファセット棒グラフに平均をプロットしたいと思います。複製が1より大きい場合にグループ化されたバーを取得したいのですが、ggplot2で可能ですか?

私がこれまでに得たもの:

g <- ggplot(df, aes(x=treatment, y=mean, fill=sample)) 
g <- g + geom_bar(position="dodge")
g <- g + geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), position="dodge")
g <- g +  facet_grid(. ~ sample)

g

棒グラフ

編集

@Tyler Rinkerの提案に従って、私は次のようになります。

g <- ggplot(df, aes(x=treatment, y=mean, fill=replicate))
g <- g + geom_bar(position="dodge", stat="identity")
g <- g + geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), position="dodge", width=0.25)
g <- g +  facet_grid(. ~ sample)

test2

ただし、「C」サンプル複製のバーを並べて表示したいと思います。

EDIT2に非常に近い...

group=を追加するだけreplicateです::

g <- ggplot(df, aes(x=treatment, y=mean, group=replicate, fill=replicate))
g <- g + geom_bar(position="dodge", stat="identity")
g <- g + geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), position="dodge", width=0.25)
g <- g +  facet_grid(. ~ sample)

test3

ただし、エラーバーの位置には問題が残っています。私はかわすと遊ぶ必要があると思いますか?しかし、私は方法がわかりません...

EDIT3最終的に...@joranに感謝します

dodge <- position_dodge(width = 0.9)

0.9以外の値では、エラーバーが正しく配置されないことを確認しました

g <- ggplot(df, aes(x=treatment, y=mean, group=replicate, fill=replicate))
g <- g + geom_bar(position="dodge", stat="identity") 
g <- g + geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), position=dodge, width=0.25, color="black")
g <- g +  facet_grid(. ~ sample)

test4

4

1 に答える 1

4

これを試して、少し実験してください。

dodge <- position_dodge(width = 0.9)

g <- ggplot(df, aes(x=treatment, y=mean, group=replicate, fill=replicate))
g <- g + geom_bar(position=dodge, stat="identity")
g <- g + geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), position = dodge,width = 0.25)
g <- g +  facet_grid(. ~ sample)
g

パネルごとに覆い焼きが異なるため、幅の設定がわかりにくいと思います。覆い焼きの詳細を少し読む必要があります(そして、これらの部分の周りには、自分よりも簡単に計量できる人が何人かいます...)が覆い焼きを「ローカル」に設定すると、各geomで、ggplotは、各レイヤーの情報に基づいて幅に関する情報を個別に決定しています。したがって、ここでの秘訣は、「グローバル」な回避設定を確実にすることであるように思われました。

于 2012-10-07T21:39:14.200 に答える