首页 > 解决方案 > 使用 stat_summary 计算两个不同分组的平均值并绘制在一个图中

问题描述

我在同一图中使用 stat_summary 绘制两个计算均值时遇到问题。

我正在使用 ggplot 和 stat_summary 绘制基于变量 A 分组的数据集的平均值。变量 A 的值可以是 1、2、3、4。相同的数据也有变量 B,它的值可以是 1,2。因此,我可以使用在变量 A 之后分组的数据来绘制图,得到 4 行。我还可以使用在变量 B 之后分组的数据来绘制一个图,其中我得到 2 行。但是如何将它们绘制在同一个图中,以便得到 6 行?我使用 mtcars 数据集做了一个类似的例子:

library(ggplot2)
mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$vs <- as.factor(mtcars$vs)
mtcars

plot1 <- ggplot(mtcars, aes(x=gear, y=hp, color=cyl, fill=cyl)) +
  stat_summary(geom='ribbon', fun.data = mean_cl_normal, fun.args=list(conf.int=0.95), alpha=0.5) +
  stat_summary(geom='line', fun.y = mean, size=1)
plot1

在此处输入图像描述

plot2 <- ggplot(mtcars, aes(x=gear, y=hp, color=vs, fill=vs)) +
  stat_summary(geom='ribbon', fun.data = mean_cl_normal, fun.args=list(conf.int=0.95), alpha=0.5) +
  stat_summary(geom='line', fun.y = mean, size=1)
plot2

在此处输入图像描述

到目前为止,我的印象是,由于我从 ggplot(xxx) 开始,其中 xxx 定义了数据和分组,我不能将它与另一个 ggplot 与另一个分组结合起来。如果我可以启动 ggplot() 而不在参数中定义任何内容,而只在 stat_summary 的参数中定义数据和分组,我觉得这将是解决方案。但如果可能的话,我无法弄清楚如何像那样使用 stat_summary 。

标签: rggplot2

解决方案


您可以添加更多层,分别aes为每个层定义:

ggplot(mtcars) +
  stat_summary(aes(x=gear, y=hp, color=paste('cyl:', cyl), fill = paste('cyl:', cyl)), geom='ribbon', fun.data = mean_cl_normal, fun.args=list(conf.int=0.95), alpha=0.5) +
  stat_summary(aes(x=gear, y=hp, color=paste('cyl:', cyl)), geom='line', fun.y = mean, size=1) +
  stat_summary(aes(x=gear, y=hp, color=paste('vs:', vs), fill=paste('vs:', vs)), geom='ribbon', fun.data = mean_cl_normal, fun.args=list(conf.int=0.95), alpha=0.5) +
  stat_summary(aes(x=gear, y=hp, color=paste('vs:', vs)), geom='line', fun.y = mean, size=1)

推荐阅读