Dies wird in der Google-Gruppe ggplot2 veröffentlicht
Meine Situation ist, dass ich an einer Funktion arbeite , die eine beliebige Anzahl von Plots ausgibt (abhängig von den vom Benutzer bereitgestellten Eingabedaten). Die Funktion gibt eine Liste von n Plots zurück, und ich möchte diese Plots in 2 x 2-Formation anordnen. Ich kämpfe mit den gleichzeitigen Problemen von:
- Wie kann ich zulassen, dass der Flexibilität eine beliebige (n) Anzahl von Parzellen übergeben wird?
- Wie kann ich auch angeben, dass sie 2 x 2 angelegt werden sollen?
Meine aktuelle Strategie verwendet grid.arrange
aus dem gridExtra
Paket. Es ist wahrscheinlich nicht optimal, zumal, und das ist der Schlüssel, es funktioniert überhaupt nicht . Hier ist mein kommentierter Beispielcode, der mit drei Plots experimentiert:
library(ggplot2)
library(gridExtra)
x <- qplot(mpg, disp, data = mtcars)
y <- qplot(hp, wt, data = mtcars)
z <- qplot(qsec, wt, data = mtcars)
# A normal, plain-jane call to grid.arrange is fine for displaying all my plots
grid.arrange(x, y, z)
# But, for my purposes, I need a 2 x 2 layout. So the command below works acceptably.
grid.arrange(x, y, z, nrow = 2, ncol = 2)
# The problem is that the function I'm developing outputs a LIST of an arbitrary
# number plots, and I'd like to be able to plot every plot in the list on a 2 x 2
# laid-out page. I can at least plot a list of plots by constructing a do.call()
# expression, below. (Note: it totally even surprises me that this do.call expression
# DOES work. I'm astounded.)
plot.list <- list(x, y, z)
do.call(grid.arrange, plot.list)
# But now I need 2 x 2 pages. No problem, right? Since do.call() is taking a list of
# arguments, I'll just add my grid.layout arguments to the list. Since grid.arrange is
# supposed to pass layout arguments along to grid.layout anyway, this should work.
args.list <- c(plot.list, "nrow = 2", "ncol = 2")
# Except that the line below is going to fail, producing an "input must be grobs!"
# error
do.call(grid.arrange, args.list)
Wie ich es gewohnt bin, dränge ich mich demütig in die Ecke und warte gespannt auf das kluge Feedback einer Community, die viel weiser als ich ist. Vor allem, wenn ich das schwieriger mache, als es sein muss.