如何在百分比条形图中显示平均值和误差线

时间:2015-08-31 20:03:40

标签: r ggplot2

我一直试图制作百分比条形图,以显示三种不同背景下两种蝌蚪的死亡率(用于伪装研究) 我的数据集是:

[[1]]
    campanha fundo sobreviventes especie intactos percentsob
1         5 light            10      Bs        9   66.66667
2         5 mixed             8      Bs        5   53.33333
3         5  dark             8      Bs        8   53.33333
4         6 light            15      Bs       13  100.00000
5         6 mixed            15      Bs       11  100.00000
6         6  dark            14      Bs       11   93.33333
7         5 light             7      Sm        5   46.66667
8         5 mixed            10      Sm        9   66.66667
9         5  dark            12      Sm       10   80.00000
10        6 light            14      Sm        6   93.33333
11        6 mixed            14      Sm        6   93.33333
12        6  dark            15      Sm        9  100.00000

我的脚本是(文件名= odonatapint,15 =每次试用的个人总数):

odonatapint$percentsob<-odonatapint$sobreviventes*100/15

ggplot(data=odonatapint,aes(x=fundo,y=percentsob,fill=especie)) + 
   geom_bar(method="mean",stat="identity",position="dodge") + 
   scale_fill_manual(values=c("#999999", "#000000")) + 
   xlab("Background type (natural)") + 
   ylab("Tadpoles surviving (%)")

但是我注意到图表显示每个类别的最高值而不是平均值(我试图发布图表但我不允许因为我刚注册)。

我应该怎么做才能修复它?如何在显示平均值后添加误差条?

2 个答案:

答案 0 :(得分:1)

我对geom_bar()知之甚少,所以这需要稍微不同的方法,但它适用于示例数据集。它通过引导计算错误条值,对于较大的数据集,这可能是计算密集的。

ggplot(data=odonatapint,aes(x=fundo,y=percentsob,fill=especie)) +
    stat_summary(geom='bar', fun.y='mean', position='dodge') +
    stat_summary(geom='errorbar', fun.data='mean_cl_boot', position='dodge')

答案 1 :(得分:1)

这就是我所做的,首先计算平均值和标准差(误差线)

library(dplyr)
odonatapint <- odonatapint %>% group_by(fundo,especie) %>% mutate(mean = mean(percentsob), sd = sd(percentsob))

然后使用ggplot绘图(使用geom_bar绘制第一个绘图条,然后使用geom_errorbar添加误差线

ggplot(data=odonatapint,aes(x=fundo,y=mean,fill=especie)) + 
  geom_bar(method="mean",stat="identity",position=position_dodge()) + 
  geom_errorbar(aes(ymax = mean + sd, ymin = mean - sd), position = position_dodge()) + 
  scale_fill_manual(values=c("#999999", "#000000")) + 
  xlab("Background type (natural)") + 
  ylab("Tadpoles surviving (%)")

生成的数字如下所示

enter image description here