我有一个排列如下的数据框:
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)
)