如何在ggplot2中使用geom_errorbar和facet_wrap

问题描述 投票:0回答:1

我在向我的情节添加错误条时遇到问题。我有一个这样的数据框:

> str(bank1)
'data.frame':   24 obs. of  4 variables:
 $ site    : Factor w/ 12 levels "BED","BEU","EB",..: 8 9 10 3 11 1 6 7 5 4 ...
 $ canopy  : Factor w/ 3 levels "M_Closed","M_Open",..: 3 3 3 3 2 2 2 2 1 1 ...
 $ variable: Factor w/ 2 levels "depth5","depth10": 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : int  200 319 103 437 33 51 165 38 26 29 ...

我这样绘制:

gs1 <- ggplot(bank1, aes(x = canopy, y= value , fill = variable)) + 
  geom_bar(stat='identity', position = 'dodge', fill = 'darkgray')+
  xlab("Canopy cover")+ylab("Seed Bank")+ 
  facet_wrap(~variable,nrow=1)
gs1  

这给出了这样的情节: enter image description here

我的问题是当我想添加错误栏(标准差)时,代码不会运行。我用这个代码:

bank2 <- bank1
bank2.mean = ddply(bank2, .(canopy, variable), summarize,
                  plant.mean = mean(value), plant.sd = sd(value))

gs1 <- ggplot(bank1, aes(x = canopy, y= value , fill = variable)) + 
  geom_bar(stat='identity', position = 'dodge', fill = 'darkgray')+ 
  geom_errorbar(aes(ymin=plant.mean-plant.sd, ymax = plant.mean +
                      plant.sd), width = 0.5)+
  xlab("Canopy cover")+ylab("Seed Bank")+ 
  facet_wrap(~variable,nrow=1)
gs1  

我搜索了帮助herehereherehere,但我不明白如何继续。请帮忙!

在这里,我重现一个例子:

> set.seed(1)
> Data1 <- data.frame(
+   site= c("KOA","KOB","KOO","EB","PNS","BED","KB","KER","KAU","KAD","RO","BEU"),
+   variable = sample(c("depth5", "depth10"), 12, replace = TRUE),
+   canopy=sample(c("open", "M_open", "M_closed"), 12, replace = TRUE),
+   value=sample(c(100,500,50,20,112,200,230,250,300,150,160,400))
+ )
> Data1
   site variable   canopy value
1   KOA   depth5 M_closed    20
2   KOB   depth5   M_open   112
3   KOO  depth10 M_closed   100
4    EB  depth10   M_open   400
5   PNS   depth5 M_closed   230
6   BED  depth10 M_closed    50
7    KB  depth10   M_open   250
8   KER  depth10 M_closed   200
9   KAU  depth10 M_closed   500
10  KAD   depth5     open   150
11   RO   depth5   M_open   300
12  BEU   depth5     open   160
> gs1 <- ggplot(Data1, aes(x = canopy, y= value , fill = variable)) + 
+   geom_bar(stat='identity', position = 'dodge', fill = 'darkgray')+
+   xlab("Canopy cover")+ylab("Seed Bank")+ 
+   facet_wrap(~variable,nrow=1)
> gs1
> Data2 <- Data1
> data2.mean = ddply(Data2, .(canopy, variable), summarize,
+                    plant.mean = mean(value), plant.sd = sd(value))
> gs1 <- ggplot(Data2, aes(x = canopy, y= value , fill = variable)) + 
+   geom_bar(stat='identity', position = 'dodge', fill = 'darkgray')+ 
+   geom_errorbar(aes(ymin=plant.mean-plant.sd, ymax = plant.mean +
+                       plant.sd), width = 0.5)+
+   xlab("Canopy cover")+ylab("Seed Bank")+ 
+   facet_wrap(~variable,nrow=1)
> gs1
Error in FUN(X[[i]], ...) : object 'plant.mean' not found

我的原始数据出错了

r ggplot2 facet-wrap errorbar
1个回答
1
投票

我的问题的解决方案就在这里。我想要的方式。你需要这些包

library(ggplot2)
library(dplyr)

我的数据框架qazxsw poi被用管道输入新的数据框qazxsw poi来计算bank1cleandatamean并总结结果

sd

汇总结果如下所示:

se

最后,用这段代码完成了绘图:

cleandata <- bank1 %>%
  group_by(canopy, variable) %>%
  summarise(mean.value = mean(value),
            sd.value = sd(value), count = n(),
            se.mean = sd.value/sqrt(count))

这给出了具有如下给出的误差棒(标准偏差)的图表 > head(cleandata) # A tibble: 6 x 6 # Groups: canopy [3] canopy variable mean.value sd.value count se.mean <fct> <fct> <dbl> <dbl> <int> <dbl> 1 Open depth5 265. 145. 4 72.4 2 Open depth10 20.5 12.8 4 6.41 3 M_Open depth5 71.8 62.6 4 31.3 4 M_Open depth10 6.5 4.20 4 2.10 5 M_Closed depth5 20 8.98 4 4.49 6 M_Closed depth10 0.5 1 4 0.5

问题解决了!干杯!

© www.soinside.com 2019 - 2024. All rights reserved.