在R中绘制标准误差的条形图

时间:2015-09-08 22:55:48

标签: r ggplot2 bar-chart

我正在尝试找到在R中创建条形图并显示标准错误的最佳方法。我已经看过其他文章,但我无法弄清楚我自己的数据使用的代码(以前没有使用ggplot,这似乎是最常用的方式和barplot不与数据帧合作)。我需要在两种情况下使用它,我创建了两个示例数据帧:

绘制df1以使x轴具有位置a-c,y轴显示V1的平均值并突出显示标准误差,类似于具有灰色的此example。在这里,植物生物量应该是平均V1值,处理应该是我的每个站点。

以相同的方式绘制df2,但是之前和之后以与this类似的方式位于彼此旁边,因此预测试和后测试等同于我的示例中之前和之后。

x <- factor(LETTERS[1:3])
site <- rep(x, each = 8)
values <- as.data.frame(matrix(sample(0:10, 3*8, replace=TRUE), ncol=1))
df1 <- cbind(site,values)
z <- factor(c("Before","After"))
when <- rep(z, each = 4)
df2 <- data.frame(when,df1)

为更有经验的R用户提供简单的道歉,特别是那些使用ggplot的用户,但我无法将我在别处找到的代码片段应用于我的数据。我甚至无法获得足够的代码来生成图表的开头,所以我希望我的描述足够。先感谢您。

2 个答案:

答案 0 :(得分:4)

这样的东西?

library(ggplot2)
get.se <- function(y) {
 se <- sd(y)/sqrt(length(y))
 mu <- mean(y)
 c(ymin=mu-se, ymax=mu+se)
}
ggplot(df1, aes(x=site, y=V1)) +
  stat_summary(fun.y=mean, geom="bar", fill="lightgreen", color="grey70")+
  stat_summary(fun.data=get.se, geom="errorbar", width=0.1)

ggplot(df2, aes(x=site, y=V1, fill=when)) +
  stat_summary(fun.y=mean, geom="bar", position="dodge", color="grey70")+
  stat_summary(fun.data=get.se, geom="errorbar", width=0.1, position=position_dodge(width=0.9))

因此,这利用了ggplot中的stat_summary(...)函数,首先使用y(对于条形图)汇总给定x的{​​{1}},然后进行汇总给定mean(...)的{​​{1}}使用y函数作为错误栏。另一种选择是在使用ggplot之前汇总您的数据,然后使用xget.se(...)

另外,绘制+/- 1 se并不是一个很好的做法(虽然经常使用它)。你可以更好地绘制合法的置信限度,例如,你可以使用内置的geom_bar(...)函数代替人为的geom_errorbar(...)mean_cl_normal基于数据正态分布的假设返回95%置信限(或者您可以将CL设置为其他内容;请阅读documentation)。

答案 1 :(得分:3)

我使用yourApp.controller('yourController', function($scope, $http, yourFactory){ $scope.sendText = function(data){ //http code... //or yourFactory code.. }; }); group_by来处理此包和summarise_each function

中的std.error函数
plotrix

对于df1情节

library(plotrix) # for std error function
library(dplyr) # for group_by and summarise_each function
library(ggplot2) # for creating ggplot

enter image description here

对于df2情节

# Group data by when and site
grouped_df1<-group_by(df1,site)

#summarise grouped data and calculate mean and standard error using function mean and std.error(from plotrix)
summarised_df1<-summarise_each(grouped_df1,funs(mean=mean,std_error=std.error))


# Define the top and bottom of the errorbars
limits <- aes(ymax = mean + std_error, ymin=mean-std_error)

#Begin your ggplot
#Here we are plotting site vs mean and filling by another factor variable when
g<-ggplot(summarised_df1,aes(site,mean))

#Creating bar to show the factor variable position_dodge 
#ensures side by side creation of factor bars
g<-g+geom_bar(stat = "identity",position = position_dodge())

#creation of error bar
g<-g+geom_errorbar(limits,width=0.25,position = position_dodge(width = 0.9))
#print graph
g

enter image description here