library(ggplot2)
library(gridExtra)
df1 <- data.frame(x=c("A1","A2","A3","A4"),something=c(10,18,24,32),col=rep(c("A","B"),2))
df2 <- data.frame(x=c("C1","C2","C3","C4"),somethingelse=c(10543,182334,242334,32255),col=rep(c("A","B"),2))
p1 <- ggplot(df1,aes(x,something,fill=col))+
ggtitle("Plot")+
geom_bar(stat="identity")+
theme(legend.position="top",
legend.justification="right",
legend.direction="horizontal")
p2 <- ggplot(df2,aes(x,somethingelse,fill=col))+
ggtitle("Plot")+
geom_bar(stat="identity")+
theme(legend.position="top",
legend.justification="right",
legend.direction="horizontal")
ggplot2: Match Grundstück Höhe von kombinierten Plots
Ich habe diese beiden Grundstücke, die Ich mag würde zusammen mit gleicher Breite, gemeinsamen Titel und Legende kombinieren. Ich dachte eher, als die Titel und Legenden-Grobs herauszuziehen, ich würde es auf der obersten Handlung lassen und es in der zweiten Handlung verstecken. Auf diese Weise muss ich die Höhen nicht manuell in grid.arrange()
einstellen.
#using loops to generalise to n plots
plist <- list()
plist[[1]] <- p1
plist[[2]] <- p2
grobs <- list()
for (i in 1:length(plist)){
if(i!=1) plist[[i]] <- plist[[i]]+theme(legend.position="none",plot.title=element_blank())
grobs[[i]] <- ggplotGrob(plist[[i]])
widths[[i]] <- grobs[[i]]$widths[2:5]
}
# fix widths
maxwidth <- do.call(grid::unit.pmax, widths)
for (i in 1:length(grobs)){
grobs[[i]]$widths[2:5] <- as.list(maxwidth)
}
#plot
pgrob = do.call("arrangeGrob",grobs)
grid.arrange(pgrob)
Aber hier sind die Grundstücksfläche Höhen sind sehr unterschiedlich. Also stelle ich die Höhe aller Plots manuell als erste ein.
for (i in 1:length(grobs)){
grobs[[i]]$heights[2:5] <- grobs[[1]]$heights[2:5]
}
#plot
pgrob = do.call("arrangeGrob",grobs)
grid.arrange(pgrob)
Nun habe ich am Ende mit diesem großen leeren Raum über dem zweite Grundstück auf. Wie werde ich das los?
Ich empfehle wirklich, mit 'ggpubr' zu bleiben. Es ist sehr gut für die Anpassung von Publikationsqualität Plots (Ausrichten von Plots, Legenden usw.) – PoGibas