ist, gibt es eine elegante Möglichkeit, Wert Ihrer Facetten auf einem facet_grid(var1~var2)
Grundstück auf einer gruppierten Aggregation angewendet hinzuzufügen, wobei eine Aggregation zu einem sum
ähnlich ist, mean
, sd
usw.erstellen Wert Ihrer Facetten in ggplot facet_grid
Der " Die gesamte Facette sollte dieselbe Aggregation wie die anderen Facetten verwenden.
Die folgende Grafik zeigt ein Beispiel für die Verwendung von mean
. Es gibt insgesamt 6 Zwischensummen und 1 Gesamtfacetten. Jede Facette liefert den Mittelwert für jeden Kohlenhydratwert.
Mein Ansatz unten ist klobig und ausführlich. Ein Ansatz, der verallgemeinert wird, um eine allgemeine Anzahl von x- und y-Facettierungs-/Gruppierungsvariablen zu handhaben, ist wünschenswert. Ich könnte eine Funktion programmieren, die abhängig von den Gruppierungen in der Aggregation eine ganze Reihe von uneleganten bedingten Berechnungen durchführt, aber ich suche wirklich nach etwas Bequemem und Einfachem. Tidyverse Lösungen bevorzugt.
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)
dieses Q gefunden https://stackoverflow.com/questions/18933575/easily-add-an-all-facet-to-facet-wrap-in-ggplot2. Das tut nicht, was ich suche, weil ich gerade versuche, die Gitterstruktur mit facet_grid zu behalten. –
klärte ein wenig Q, änderte von geom_point zu geom_bar und änderte den Datensatz in mtcars, um den Punkt besser zu veranschaulichen. –