绘制带有ggplot中计算标准偏差的分组条形图

时间:2018-05-18 15:30:17

标签: r ggplot2

我觉得这应该很容易,但我很难搞清楚这一点。

我有一个数据框

type <- c("a","b","c","d","e")
x <- rnorm(5)
y <- rnorm(5)
z <- rnorm(5) 
xsd <- sd(x)
ysd <- sd(y)
zsd <- sd(z)
df <- data.frame(type, x,y,z,xsd,ysd,zsd)
df



type           x          y         z       xsd       ysd       zsd
1    a -1.16788106  0.2260430 -1.16788106 0.8182508 0.7321015 0.9016335
2    b -0.09955193 -0.6647980 -0.09955193 0.8182508 0.7321015 0.9016335
3    c -0.87901053 -0.4269936 -0.87901053 0.8182508 0.7321015 0.9016335
4    d -0.87861339 -1.3669793 -0.87861339 0.8182508 0.7321015 0.9016335
5    e  0.84350228  0.4702580  0.84350228 0.8182508 0.7321015 0.9016335

我需要一个xyz均值type的分组条形图,误差条显示每个变量的标准偏差。标准差位于不同的列xsdysdzsd

我需要在y轴上绘制平均值,type在x轴上对xyz变量进行分组。 我尝试使用gather()来重新排列数据,但我没有取得任何成功......

2 个答案:

答案 0 :(得分:1)

这个例子应该有所帮助:

type <- c("a","b","c","d","e")
x <- rnorm(50,20, 5)
y <- rnorm(50, 25,1)
z <- rnorm(50, 40, 1) 

df <- data.frame(type, x,y,z)
df

library(tidyverse)

df %>%
  gather(x,value,-type) %>%
  group_by(type, x) %>%
  summarise(MEAN = mean(value),
            SD = sd(value)) %>%
  ggplot(aes(x, MEAN, fill=type))+
  geom_bar(stat="identity", position = "dodge")+
  geom_errorbar(aes(ymin=MEAN-SD, ymax=MEAN+SD), position = "dodge")

答案 1 :(得分:1)

让ggplot2为你做计算:

install.packages("hmisc") # for mean_sdl

library(tidyverse)

type <- c("a","b","c","d","e")
x <- rnorm(5, 10, 5)
y <- rnorm(5, 8, 3)
z <- rnorm(5, 2, 4) 

df <- data.frame(type,x,y,z)

df_long <- df %>% 
  gather(variable, value, x:z)

ggplot(df_long, aes(x = variable, y = value, fill = variable)) + 
  stat_summary(fun.y = "mean", geom = "col") + 
  stat_summary(fun.data = mean_sdl, geom = "errorbar", width = .5, fun.args = list(mult = 1))

enter image description here