Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在ggplot facet_网格中创建小计facet_R_Ggplot2_Tidyverse - Fatal编程技术网

R 在ggplot facet_网格中创建小计facet

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

是否有一种优雅的方法可以在应用于分组聚合的facet_gridvar1~var2图上添加小计facet,其中聚合类似于sum、mean、sd等

整个方面应使用与其他方面相同的聚合

下图给出了使用平均值的示例。总共有6个小计和1个面。每个总切面提供每个carb值的平均mpg

我下面的方法既笨拙又冗长。需要一种通用的方法来处理一般数量的x和y刻面/分组变量。我可以编写一个函数,根据聚合中的分组进行大量不雅的条件计算,但我真的在寻找方便简单的东西。首选Tidyverse解决方案

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以更好地说明这一点。这并不能正确地对所有方面进行聚合。如果聚合是一个和,则它可以工作,否则就不行。