微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的图表上错误位置的标准误差条

如何解决在我的图表上错误位置的标准误差条

我正在尝试在 R 中为我的研究项目绘制我的数据图表,出于某种原因,我在三个图表上创建了错误条,如下所示。它们都位于条形图的底部,而不是顶部的正确位置。

这是我对该特定图形的编码:

ggplot(Epiphyte_Biomass,aes(x=Treatment,y=Epiphyte.Biomass,fill=Treatment))+
    geom_bar(stat="Identity")+
    geom_errorbar(aes(ymin=mean(Epiphyte.Biomass)-sd(Epiphyte.Biomass),ymax=mean(Epiphyte.Biomass)+ sd(Epiphyte.Biomass)),width=0.2)+
   theme_classic()

解决方法

当你计算均值和 sd 时,ggplot 没有自动按组细分数据,所以我认为你得到了整体均值和 SD(均值看起来很低,但也许你有更少的“NC+N”处理中的数据点?)

ggplot2Hmisc 包中的函数提供了一些内置的便利包装器,用于计算不同种类的范围,但不包括 ±1 SD 条。试试

msd <- function(y) {
   my <- mean(y,na.rm = TRUE)
   sy <- sd(y,na.rm = TRUE)
   data.frame(y = my,ymin = my - sy,ymax = my + sy)
}
## and use this in place of `geom_errorbar()`:
+ stat_summary(fun.data = msd,geom = "errorbar")

以下是使用 mtcars 的示例:

ggplot(mtcars,aes(cyl,mpg,fill = factor(cyl))) +
    stat_summary(geom = "bar",fun = mean) +
    stat_summary(geom = "errorbar",fun.data = msd)

关键是这样 ggplot 可以即时为您完成每次治疗的所有均值和 SD 计算,而不是您必须单独进行...

看起来好像您的数据集可能已经计算了每次处理的附生植物生物量的平均值,在这种情况下,您的 SD 计算无论如何都会被搞砸(它们将是 处理平均值的 SD,而不是比治疗内 SDs)

,

我认为错误在于 -+sd(Epiphyte.Biomass)...您必须分别计算每种处理的 sd。在您的情况下,两者的 sd 相同!

,

以下是 mtcars 数据集的示例。 只需将您的变量放入。

我非常感谢 Ben Bolkers 的回答。至少如果您不是每天都这样做,那么设置错误栏并非易事。

library(tidyverse)
library(plyr)

# function
data_summary <- function(data,varname,groupnames){
    require(plyr)
    summary_func <- function(x,col){
        c(mean = mean(x[[col]],na.rm=TRUE),sd = sd(x[[col]],na.rm=TRUE))
    }
    data_sum<-ddply(data,groupnames,.fun=summary_func,varname)
    data_sum <- rename(data_sum,c("mean" = varname))
    return(data_sum)
}


# definition of variables
df <- data_summary(mtcars,varname="mpg",groupnames=c("cyl"))

# plot
ggplot(df,aes(x=factor(cyl),y=mpg,fill=factor(cyl))) + 
    geom_bar(stat="identity",color="black",position=position_dodge()) +
    geom_errorbar(aes(ymin=mpg-sd,ymax=mpg+sd),width=.2,position=position_dodge(.9)) 

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。