在 Iris 数据集中求均值和 sd 并绘制图形

问题描述

我需要找到 Iris 数据集中每个数字变量的均值和标准差,并使用 geom_col 和 geom_errorbar 在 ggplot2 图中绘制。

这是我目前得到的

library(tidyverse)
data(Iris)
iris %>% 
  group_by(Species) %>% 
    summarise_if(is.numeric,list(mean = mean,sd = sd)) -> IrisData

我试图创建一个图表,但我不知道如何使用 geom_errorbar

IrisData %>%
  select(Species,ends_with("mean")) %>%
  gather(key,val,2:5) %>%
  ggplot(aes(key,fill = Species)) +
  geom_col()

我发现它应该是这样的

geom_errorbar(aes(ymin = mean - sd,ymax = mean + sd),width=0.2)

但我不确定如何使用它,我将其添加代码末尾并得到了一些图表,但我确定它不正确

geom_errorbar(aes(ymin = val - sd(val),ymax = val + sd(val)),width=0.2,size = 1.2) 

解决方法

ggplot 默认不允许堆叠误差线。因此,您将不得不手动执行此操作 error bar with stacked barplot,这并不是那么好。如果你想实现它,你可以遵循this,否则你可以使用类似

library(tidyverse)
data(iris)

iris %>% 
  group_by(Species) %>% 
  summarise_if(is.numeric,list(mean = mean,sd = sd)) -> IrisData

iris %>% 
  pivot_longer(-Species) %>% 
  group_by(Species,name) %>% 
  summarise(Mean = mean(value),SD = sd(value)) -> IrisData

IrisData %>%
  ggplot(aes(name,Mean,fill = Species)) +
  geom_bar(stat = "identity",position = "dodge")+
  geom_errorbar(aes(ymin = Mean - SD,ymax = Mean + SD),width=0.2,position = position_dodge(.9))

enter image description here

library(ggpubr)
iris %>% 
  pivot_longer(-Species) %>% 
  ggbarplot(x = "name",y = "value",add = "mean_sd",color = "Species")

enter image description here