次のように配置されたデータフレームがあります。
condition,treatment,value
A , one , 2
A , one , 1
A , two , 4
A , two , 2
...
D , two , 3
ggplot2 を使用して、次のようなグループ化された棒グラフを作成しました。
バーは「状態」ごとにグループ化され、色は「治療」を示します。バーの高さは、各条件/治療ペアの値の平均です。これは、各グループを構成するすべてのポイントの平均と標準誤差 (エラー バーの) を含む新しいデータ フレームを作成することで実現しました。
私がやりたいのは、生のジッターデータを重ね合わせて、この箱ひげ図の棒グラフ バージョンを生成することです: http://docs.ggplot2.org/0.9.3.1/geom_boxplot-6.pngおそらくもっと良いでしょうが、クライアントが病的に棒グラフに執着しているため、私の手は縛られています]
geom_point オブジェクトをプロットに追加して、生データ (バーを作成するために使用された集計平均ではなく) をフィードしようとしました。この種の方法は機能しますが、生の値が間違った x 軸の位置にプロットされます。それらは、適切なバーの中心ではなく、赤と灰色のバーが結合するポイントに表示されます。したがって、私のプロットは次のようになります。
ポイントを一定量シフトしてから、正しいバーの中央に配置するためにジッターする方法がわかりません。誰でも知っていますか?おそらく、私がやろうとしていることを達成するためのより良い方法はありますか?
以下は、私が抱えている問題を示す最小限の例です。
#Make some fake data
ex=data.frame(cond=rep(c('a','b','c','d'),each=8),
treat=rep(rep(c('one','two'),4),each=4),
value=rnorm(32) + rep(c(3,1,4,2),each=4) )
#Calculate the mean and SD of each condition/treatment pair
agg=aggregate(value~cond*treat, data=ex, FUN="mean") #mean
agg$sd=aggregate(value~cond*treat, data=ex, FUN="sd")$value #add the SD
dodge <- position_dodge(width=0.9)
limits <- aes(ymax=value+sd, ymin=value-sd) #Set up the error bars
p <- ggplot(agg, aes(fill=treat, y=value, x=cond))
#Plot, attempting to overlay the raw data
print(
p + geom_bar(position=dodge, stat="identity") +
geom_errorbar(limits, position=dodge, width=0.25) +
geom_point(data= ex[ex$treat=='one',], colour="green", size=3) +
geom_point(data= ex[ex$treat=='two',], colour="pink", size=3)
)