我用facet_grid
做了一个图表,显示每组患者在每天治疗中所占的比例。
library(ggplot2)
library(Rmisc)
library(plyr)
mus2 <- summarySE(mus, measurevar="litium",
groupvars=c("treatment", "group", "day"), na.rm = TRUE)
mus2
mus3 <- mus2
mus3$group <- factor(mus3$group)
ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
geom_bar(stat="identity", colour="black") + facet_grid(~day) + theme_bw()
ms.chl
其结果是:
为此,我有两个问题:
我不能为每组的诉讼内容设置正确的错误栏。我已经试过了,但是每次治疗我只得到错误条。
ms.chl + geom_errorbar(aes(ymin=litium-se, ymax=litium+se), size=0.5,
width=.25,
position=position_dodge(.9)) +
facet_grid(~day)
我想要每个组的总错误条。
在那之后,我的第二个问题是:是否可以代表每组的绝对值以及每组治疗的百分比?
数据集(毛里求斯):
litium group treatment day
0.009439528 1 Control day1
0.005115057 1 Control day1
0.009742297 1 Control day1
0.016515625 2 Control day1
0.01074537 2 Control day1
0.016300836 2 Control day1
0.009538339 3 Control day1
0.010609746 3 Control day1
0.008928012 3 Control day1
0.009425325 1 Control + bird day1
0.00561831 1 Control + bird day1
0.014622517 1 Control + bird day1
0.017702439 2 Control + bird day1
0.010545045 2 Control + bird day1
0.029109907 2 Control + bird day1
0.013737568 3 Control + bird day1
0.015174405 3 Control + bird day1
0.014583832 3 Control + bird day1
0.009244079 1 Control day2
0.006591033 1 Control day2
0.007592587 1 Control day2
0.013676745 2 Control day2
0.016208676 2 Control day2
0.017593952 2 Control day2
0.014003037 3 Control day2
0.01163581 3 Control day2
0.011643067 3 Control day2
0.009229506 1 Control + bird day2
0.006423714 1 Control + bird day2
0.008653163 1 Control + bird day2
0.012441379 2 Control + bird day2
0.0204346 2 Control + bird day2
0.010017788 2 Control + bird day2
0.009745063 3 Control + bird day2
0.00967963 3 Control + bird day2
0.010291306 3 Control + bird day2
0.009466604 1 Fence day2
0.019611081 2 Fence day2
0.006796444 2 Fence day2
0.018928695 2 Fence day2
0.007787736 3 Fence day2
0.009409897 3 Fence day2
发布于 2015-09-29 13:29:46
第一个也是最简单的解决方案是让你的酒吧并排而不是堆叠。然后,您需要在代码中更改的唯一事情是将position="dodge"
添加到您的geom_bar()
中,并按照您的需要运行其余的代码。这有一个额外的好处,即能够直接比较不同条形的高度,并避免将错误条放置在条形图的中间。
ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
geom_bar(stat="identity", colour="black",position="dodge") +
facet_grid(~day) + theme_bw()
ms.chl + geom_errorbar(aes(ymin=litium-se, ymax=litium+se), size=0.5,
width=.25,position=position_dodge(.9)) +
facet_grid(~day)
若要在堆叠条形图上添加错误条,必须确保条形图以litium
的累积和为中心。为此,您可以在cumsum()
中使用ave()
mus3 <- within(mus3,lit2 <- ave(litium,group,day,FUN=cumsum))
然后,当您调用lit2
而不是litium
时,请使用geom_errorbar()
,不要躲闪。
ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
geom_bar(stat="identity", colour="black") + facet_grid(~day) + theme_bw()
ms.chl + geom_errorbar(aes(ymin=lit2-se, ymax=lit2+se), size=0.5,
width=.25) + facet_grid(~day)
如果你只想要这个组的错误条,那么你必须在治疗中得到整个组的错误,而不是这个组的错误,但是你不能把它直接加到基于整个组的平均值中,因为这些是均值,堆叠的条形图有平均值的总和,所以你必须从mus3
中把平均值加起来。
musgroup <- summarySE(mus, measurevar="litium",
groupvars=c("group", "day"), na.rm = TRUE)
musgroupsum <- ddply(mus3,.(group,day),summarize,lit2 = sum(litium))
mus4 <- merge(musgroup,musgroupsum)
ms.chl<- ggplot() +
geom_bar(data=mus3, aes(x=group, y=litium, fill=treatment),
stat="identity", colour="black") + facet_grid(~day) + theme_bw()
ms.chl + geom_errorbar(data=mus4,aes(x=group,ymin=lit2-se, ymax=lit2+se),
size=0.5, width=.25)
不过,在这一点上,它开始变得有点荒谬。叠加方法不是分组方法--它们是组均值之和,但误差是组均值。当你看这个数字时,相对于它们所代表的平均值而言,误差条看起来要小一些,因为它们的中心位置比它们应该的高得多。似乎你正在寻找的是一个组均值的代表,它允许你看到每一个治疗方法对该组均值的贡献。显示这一点的一种方法是缩放条形图大小,使累积和以每个组的适当平均值为中心。
mus3 <- within(mus3,lit3 <- ave(litium,group,day,FUN=function(x) x/length(x)))
ms.chl<- ggplot() +
geom_bar(data=mus3, aes(x=group, y=lit3, fill=treatment),
stat="identity", colour="black") + facet_grid(~day) +
theme_bw() + ylab("litium")
ms.chl + geom_errorbar(data=mus4,aes(x=group,ymin=litium-se, ymax=litium+se),
size=0.5,width=.25)
https://stackoverflow.com/questions/32842923
复制相似问题