C'est cross-posté sur le ggplot2 groupe google
Ma situation est que je suis de travailler sur une fonction qui génère un nombre arbitraire de parcelles (selon les données fournies par l'utilisateur). La fonction retourne une liste de n parcelles, et je voudrais proposer ces parcelles à 2 x 2 formation. Je suis aux prises avec les problèmes simultanés de:
- Comment puis-je permettre la souplesse nécessaire pour être remis à un arbitraire (n) nombre de parcelles?
- Comment puis-je aussi préciser que je veux les énoncés 2 x 2
Ma stratégie actuelle utilise grid.arrange
de la gridExtra
package. Ce n'est probablement pas optimale, surtout depuis que, et cela est essentiel, totalement ne fonctionne pas. Voici mon commenté exemple de code, d'expérimenter avec les trois parcelles:
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)
Comme je suis l'habitude de le faire, je demande humblement se blottir dans le coin, attendant impatiemment le sagace commentaires d'une communauté beaucoup plus sage que moi et Surtout si je suis en train de faire ce plus difficile qu'il doit être.