gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:15:40 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com