r - 将原始数据叠加到 geom_bar 上

标签 r ggplot2

我有一个数据框排列如下:

condition,treatment,value
A        ,  one    , 2
A        ,  one    , 1
A        ,  two    , 4
A        ,  two    , 2
...
D        ,  two    , 3

我使用 ggplot2 制作了一个如下所示的分组条形图:
example plot

条形按“条件”分组,颜色表示“治疗”。条形高度是每个条件/治疗对的平均值。我通过创建一个包含构成每个组的所有点的均值和标准误差(对于误差条)的新数据框来实现这一点。

我想做的是叠加原始抖动数据以生成此箱线图的条形图版本:http://docs.ggplot2.org/0.9.3.1/geom_boxplot-6.png [我意识到箱线图可能会更好,但我的手被绑住了,因为客户病态地依附于条形图]

我曾尝试将 geom_point 对象添加到我的绘图中,并将原始数据(而不是用于制作条形图的聚合均值)提供给它。这种工作,但它在错误的 x 轴位置绘制原始值。它们出现在红色和灰色条的连接点,而不是相应条的中心。所以我的情节是这样的:

wrong-looking plot

我不知道如何将点移动一个固定的量,然后抖动它们以使它们在正确的条上居中。有人知道吗?是否有更好的方法来实现我正在尝试做的事情?

下面是一个显示我遇到的问题的最小示例:
#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)
)

最佳答案

我发现没有必要创建单独的数据框。可以通过向 ggplot 提供原始数据来创建绘图。

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

p <- ggplot(ex, aes(cond,value,fill = treat))
p + geom_bar(position = 'dodge', stat = 'summary', fun.y = 'mean') +
  geom_errorbar(stat = 'summary', position = 'dodge', width = 0.9) +
  geom_point(aes(x = cond), shape = 21, position = position_dodge(width = 1))

ggplot example

关于r - 将原始数据叠加到 geom_bar 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728008/

相关文章:

r - 如何使用R ggplot stat_summary绘制中位数和四分位数?

R:无法保存剧情

r - 将 ggsave() 纵横比设置为 RStudio 的 "Zoom"按钮给出的比例?

r - 如何从 ggplot2 对象中提取图例标签?

r - R 中的动物园 na.approx

r - 具有外生变量的 VAR

r - ggpubr:在标签中显示显着性水平(*** 或 n.s.)而不是 p 值

r - 一个 ggplot2 图中的 PCA 图和方差比例表 - R

r - 在ggplot2中,如何更改所选构面的边框?

c++ - 使用 R 和 Rcpp,如何将两个稀疏 Matrix::csr/csc 格式的矩阵相乘?