在 ggplot2 中创建显示平均值的分组条形图(我不想手动输入)

Posted

技术标签:

【中文标题】在 ggplot2 中创建显示平均值的分组条形图(我不想手动输入)【英文标题】:Creating a grouped barplot in ggplot2 showing mean values (that I do not want to enter manually) 【发布时间】:2018-10-25 13:30:35 【问题描述】:

我正在尝试创建一个分组条形图,显示我正在输入的数据的平均值,同时我想让它易于重现,以便我可以交换其他排列相似的数据集.我不想手动计算平均值并将其输入数据框中 - 有没有办法做到这一点?

我的数据由 100 - 2000 之间的数值组成,分为 3 个不同的药物治疗组,然后再细分为 3 组(根据它们在生物体中的解剖位置,称为“内部”、“中间”、“外部” )。最终图应为 3 组,每组 3 条(每组代表 3 个位置中每个位置的细胞存活平均值)。到目前为止,我已经设法制作了单独的条形图,但我想将它们组合起来。

这是我的一些代码,下面是数据集的一小段摘录:

 ggplot(Survival, aes(Treatment, Inner)) +
stat_summary(fun.y = mean,
             geom = "bar",
             position = "dodge")

Treatment   Inner   Middle  Outer
RAD          317    373      354
RAD          323    217      174
RAD          236    255      261
HUTS        1411    1844     1978
HUTS        1922    1756     1856
HUTS        1478    1711     1433
RGD         1433    1489     1633
RGD         1400    1500     1544
RGD         1222    1333     1444

【问题讨论】:

【参考方案1】:

这里有两种选择:一种是使用来自dplyrgroup_bysummarise 来计算均值,然后通过管道连接到ggplot 来制作躲避柱。第二个使用 stat_summary 就像您的示例代码一样。两者都需要gather将您的数据转换为长格式。

library(tidyverse)

df %>%
  gather(key = group, value = value, -Treatment) %>%
  group_by(Treatment, group) %>%
  summarise(mean_val = mean(value, na.rm = T)) %>%
  ggplot(aes(x = Treatment, y = mean_val, fill = group)) +
    geom_col(position = position_dodge())

df %>%
  gather(key = group, value = value, -Treatment) %>%
  ggplot(aes(x = Treatment, y = value, fill = group)) +
    stat_summary(fun.y = mean, geom = "col", position = position_dodge())

【讨论】:

非常感谢!这正是我所追求的。 这个答案令人难以置信。感谢您分享您的知识!

以上是关于在 ggplot2 中创建显示平均值的分组条形图(我不想手动输入)的主要内容,如果未能解决你的问题,请参考以下文章

带有 facet_grid 的 ggplot2 中具有多个分类变量的堆积条形图

带有facet_grid的ggplot2中带有多个分类变量的堆积条形图

R语言ggplot2可视化绘制分组水平条形图并在条形图的各种位置添加数值标签实战

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

将百分比标签添加到堆积条形图ggplot2

R - ggplot2 - 限制分类数据的条形图输出