在ggplot facet_grid中创建小计构面

时间:2017-10-27 20:02:50

标签: r ggplot2 tidyverse

是否有一种优雅的方法可以在应用于分组聚合的facet_grid(var1~var2)绘图上添加小计面,其中聚合类似于summean,{{1}等等。

"总计" facet应使用与其他facet相同的聚合。

下图给出了使用sd的示例。总共有6个小计和1个总面。每个总面都提供每个碳水化合物值的平均mpg。

Facets with total facets

我的方法是笨重而冗长的。需要推广用于处理x和y分面/分组变量的一般数量的方法。我可以编写一个函数,根据聚合中的分组执行大量不规则的条件计算,但我真的在寻找方便和简单的东西。 Tidyverse解决方案首选。

mean

2 个答案:

答案 0 :(得分:1)

您想在margins功能中使用facet_grid()选项。请参阅以下内容:

p2 <- ggplot(aggregate_data, aes(x=1, y=value))+
  geom_point()+
  facet_grid(dist~scale, margins = TRUE)
p2

答案 1 :(得分:0)

ggplot可以直接从原始数据框执行此操作。但geom_text仍然显示单个行值,而不是聚合。

p3<-ggplot(mtcars, aes(x=carb, y=mpg))+
  stat_summary(fun.y="mean", geom="bar")+
  facet_grid(cyl~gear, margins=T)+
  geom_text(aes(label=round(..y..,1)), 
            col='red', size=3,hjust=-0.3, angle=90)+
  ggtitle('Average MPG vs Num Carbs, by Num Cylinders & Num Gears')
print(p3)

它允许您按任何facet_grid组合对聚合进行分组。例如。

p4<-ggplot(mtcars, aes(x=carb, y=mpg))+
  stat_summary(fun.y="mean", geom="bar")+
  facet_grid(am+vs~gear, margins=T)+
  geom_text(aes(label=round(..y..,1)), 
            col='red', size=3,hjust=-0.3, angle=90)+
  ggtitle('Average MPG vs Num Carbs, by Num Gears and vs & am')
print(p4)

enter image description here