2016-07-25 59 views
1

我试图从以下数据(从ddply函数返回)创建一个分组条形图,其中x轴具有全部4个CWD变量(对于2个站点中的每个),y轴是平均值。如何使用ggplot和aes函数在R中创建分组条形图?

我的代码是:

library(plyr) 
library(reshape2) 
library(ggplot2) 

ddply(data, c("Site","Plot","Cover"), summarise, mean=mean(Height), sd=sd(Height), 
    sem=sd(Height)/sqrt(length(Height))) 

BranchSize <- ddply(data, c("Site","CWD"), summarise, mean=mean(Volume), 
    sd=sd(Volume), sem=sd(Volume)/sqrt(length(Volume))) 

,并返回该表。这张表是数据框已经存在吗?还是我需要使它成为一个才能使用它?

Site CWD  mean   sd  sem 
1 High Bark 975.7273 2603.077 554.9780 
2 High Branch 36827.7735 107668.064 13056.6706 
3 High Cage 116041.4286 154934.888 58559.8832 
4 High Log 73463.3636 121054.372 25808.8788 
5 Low Bark  40.0000   NA   NA 
6 Low Branch 1323.8280 2304.571 595.0377 
7 Low Cage 101.5000   NA   NA 
8 Low Log 102600.0000   NA   NA 

然后使用此代码:

limits <- aes(ymax = BranchSize$mean + BranchSize&se, 
    ymin=BranchSize$mean - BranchSize&se) 
CWDVol<-ggplot(data = BranchSize, 
    aes(x = factor(CWD), y = mean, fill = factor(Site))) 
CWDVol 

当我运行此命令,出现在我的情节,但有没有酒吧。

后来,当我运行此:

CWDVol + geom_bar(stat = "identity", position_dodge(0.9)) + 
    geom_errorbar(limits, position = position_dodge(0.9), width = 0.25) + 
    labs(x = "CWD Type", y = "Average Volume") + 
    ggtitle("Average CWD Size in each Site") + 

    scale_fill_discrete(name = "Site") 

我不断收到此错误: “错误:映射必须由aes()aes_()创建”

任何提示将不胜感激。

+2

尝试'STAT =“计数”'? – Jimbou

+0

在'geom_bar'中通过'position = position_dodge(0.9)',在'limits'中,你做了这个:'BranchSize $ se',没有变量叫做'se'。另外,您不必包含'BranchSize $' – Sumedh

+0

谢谢。我将统计数据更改为“计数”,并通过将“se”更改为“sem”来纠正我的错误,但它仍然无效。当我运行CWDVol时,它会生成一个没有任何条形图的图形 – Dominique

回答

2

TL;博士你留出了名的position说法,所以geom_bar假设position_dodge(0.9)mapping说法。一旦你确定一切似乎都很好。

BranchSize <- read.table(header=TRUE,text=" 
Site CWD  mean   sd  sem 
High Bark 975.7273 2603.077 554.9780 
High Branch 36827.7735 107668.064 13056.6706 
High Cage 116041.4286 154934.888 58559.8832 
High Log 73463.3636 121054.372 25808.8788 
Low Bark  40.0000   NA   NA 
Low Branch 1323.8280 2304.571 595.0377 
Low Cage 101.5000   NA   NA 
Low Log 102600.0000   NA   NA") 

library(ggplot2) 
limits <- aes(ymax=mean+sem, ymin=mean-sem) 
CWDVol <- ggplot(data=BranchSize, 
       aes(x=factor(CWD),y=mean,fill=factor(Site))) 
CWDVol + geom_bar(stat="identity",position=position_dodge(0.9))+ 
    geom_errorbar(limits, position = position_dodge(0.9), width = 0.25) + 
    labs(x = "CWD Type", y = "Average Volume") + 
    ggtitle("Average CWD Size in each Site")+ 
    scale_fill_discrete(name = "Site")+ 
    scale_y_log10() 

其他一些建议:

  • 不映射中使用$,它只会捣乱
  • 也许使用+/- 2 SEM(或1.96 SEM)的置信区间? (所有的观众可能会被试图做这种转变在他们的头上,否则)是

代码的结果如下 enter image description here

+0

非常感谢您的帮助!对此,我真的非常感激。最后一件事 - 我将如何着手在每个栏上添加样本大小(例如:n = 2)?使用text()唯一的方法(然后我手动添加标签)?我通过使用长度()提取样本大小() – Dominique

+0

在堆栈溢出和Web上有很多这样的答案。如果找不到,请发帖提问。 –

相关问题