R 在ggplot facet_网格中创建小计facet
是否有一种优雅的方法可以在应用于分组聚合的facet_gridvar1~var2图上添加小计facet,其中聚合类似于sum、mean、sd等 整个方面应使用与其他方面相同的聚合 下图给出了使用平均值的示例。总共有6个小计和1个面。每个总切面提供每个carb值的平均mpg 我下面的方法既笨拙又冗长。需要一种通用的方法来处理一般数量的x和y刻面/分组变量。我可以编写一个函数,根据聚合中的分组进行大量不雅的条件计算,但我真的在寻找方便简单的东西。首选Tidyverse解决方案R 在ggplot facet_网格中创建小计facet,r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,是否有一种优雅的方法可以在应用于分组聚合的facet_gridvar1~var2图上添加小计facet,其中聚合类似于sum、mean、sd等 整个方面应使用与其他方面相同的聚合 下图给出了使用平均值的示例。总共有6个小计和1个面。每个总切面提供每个carb值的平均mpg 我下面的方法既笨拙又冗长。需要一种通用的方法来处理一般数量的x和y刻面/分组变量。我可以编写一个函数,根据聚合中的分组进行大量不雅的条件计算,但我真的在寻找方便简单的东西。首选Tidyverse解决方案 library(dpl
library(dplyr)
library(ggplot2)
# use mtcars data set
data <- mtcars
# aggregate data by grouping variables
aggregate_data<- data%>%
group_by(gear,cyl, carb)%>%
summarize(mpg=mean(mpg))%>%
ungroup
# get total for gear
data_tot_cyl<- data%>%
group_by(cyl, carb)%>%
summarize(mpg=mean(mpg))%>%
ungroup%>%
mutate(gear='total')
# get total for cyl
data_tot_gear<- data%>%
group_by(gear, carb)%>%
summarize(mpg=mean(mpg))%>%
ungroup%>%
mutate(cyl='total')
# get total for total-total
data_tot_tot<- data%>%
group_by(carb)%>%
summarize(mpg=mean(mpg))%>%
ungroup%>%
mutate(cyl='total', gear='total')
# get data frame with all total's data.
new_data<-data_tot_tot%>%
bind_rows(data_tot_gear%>%mutate(gear=as.character(gear)))%>%
bind_rows(data_tot_cyl%>%mutate(cyl=as.character(cyl)))%>%
bind_rows(aggregate_data%>%mutate_at(vars(gear, cyl), funs(as.character)))
# Arghh, gotta order the levels so total is at the end.
new_data$cyl <- factor(new_data$cyl,
levels=c('4','6','8','total'),ordered=T)
new_data$gear <- factor(new_data$gear,
levels=c('3','4','5','total'),ordered=T)
# Finally after over 20 additional lines of code, I get the
# faceted plot with totals for x and y facets.
p<-ggplot(new_data, aes(x=carb, y=mpg))+
geom_bar(stat='identity')+
facet_grid(cyl~gear)+
geom_text(aes(label=round(mpg,1), y=0),
col='white', size=3,hjust=-0.3, angle=90)+
ggtitle('Average MPG vs Num Carbs, by Num Cylinders & Num Gears')
print(p)
您希望在镶嵌面网格函数中使用边距选项。见下文:
p2 <- ggplot(aggregate_data, aes(x=1, y=value))+
geom_point()+
facet_grid(dist~scale, margins = TRUE)
p2
ggplot可以直接从原始数据帧执行此操作。但是geom_文本仍然显示单独的行值,而不是聚合
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)
它允许您按任何方面和网格组合对聚合进行分组。例如
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)
找到这个Q。这不符合我的要求,因为我特别尝试使用facet_grid保留网格结构。稍微澄清了一点Q,从geom_point更改为geom_bar,并将数据集更改为mtcars以更好地说明这一点。这并不能正确地对所有方面进行聚合。如果聚合是一个和,则它可以工作,否则就不行。