使用stat_summary为两个不同的分组计算平均值并在一个图中进行绘制

时间:2019-09-03 19:33:34

标签: r ggplot2

我在同一图中使用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

enter image description here

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

enter image description here

到目前为止,我的印象是,由于我从ggplot(xxx)开始,其中xxx定义了数据和分组,因此我无法将其与另一个具有另一个分组的ggplot组合。如果我可以启动ggplot()而不在参数中定义任何内容,而只为stat_summary定义数据并在参数中分组,那么我认为这将是解决方案。但是我什至无法弄清楚如何使用stat_summary。

1 个答案:

答案 0 :(得分:0)

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