R 计算两个不同分组的统计汇总平均值,并在一个图中绘制

R 计算两个不同分组的统计汇总平均值,并在一个图中绘制,r,ggplot2,R,Ggplot2,我在同一个图中使用stat_summary绘制两个计算平均值时遇到问题 我使用ggplot和stat_summary来绘制我根据变量a分组的数据集的平均值。变量a的值可以是1,2,3,4。同样的数据也有变量B,其值为1,2。 所以,我可以用变量a后面分组的数据做一个图,得到4行。 我也可以用变量B后面分组的数据做一个图,其中有两行。 但是我怎样才能在同一个图形中绘制它们,从而得到6行呢?我使用mtcars数据集制作了一个类似的示例: library(ggplot2) mtcars$cyl <

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

我使用ggplot和stat_summary来绘制我根据变量a分组的数据集的平均值。变量a的值可以是1,2,3,4。同样的数据也有变量B,其值为1,2。 所以,我可以用变量a后面分组的数据做一个图,得到4行。 我也可以用变量B后面分组的数据做一个图,其中有两行。 但是我怎样才能在同一个图形中绘制它们,从而得到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

到目前为止,我的印象是,由于我从ggplotxxx开始,其中xxx定义了数据和分组,所以我不能将它与另一个ggplot和另一个分组结合起来。如果我可以启动ggplot而不在参数中定义任何内容,而只在stat_summary的参数中定义数据和分组,我觉得这就是解决方案。但如果可能的话,我不知道如何使用这样的统计摘要。

您可以添加更多层,分别为每个层定义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)

太好了,谢谢!它向图例中添加了一些我似乎无法删除的文本:。你能帮忙吗?这就是我用粘贴'cyl:',cyl和粘贴'vs:',vs所做的,只是为了确保它们有唯一的级别,并且你可以看到你引用的变量。
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)