Avec grid.arrange
Je peux organiser plusieurs ggplot
figures dans une grille pour obtenir une figure à plusieurs panneaux en utilisant quelque chose comme:
library(ggplot2)
library(grid)
library(gridExtra)
générer des tracés ggplot2, puis
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
Comment puis-je obtenir une disposition à 2 colonnes "déséquilibrée" avec une parcelle dans tout le premier col et trois parcelles dans le deuxième col? J'ai joué avec une approche "grille de grille" en essayant d'utiliser grid.arrange
pour tracer une grille (par exemple plot5
, ci-dessus) contre un autre complot, mais obtenu:
Erreur dans arrangeGrob (..., as.table = as.table, clip = clip, main = main,: l'entrée doit être grobs!
Mise à jour:
Merci pour le conseil. J'examinerai viewports
et grid
. En attendant, grâce à @DWin, la fonction layOut
dans le paquet 'wq' a très bien fonctionné pour la figure de compilation dans mon document Sweave
:
Mise à jour 2:
La commande arrangeGrob
(comme suggéré par @baptiste) fonctionne également bien, et semble très intuitive - au moins, il était facile de modifier la largeur des deux colonnes. Il a également l'avantage de ne pas nécessiter le package `wq '.
par exemple. Voici le code de mon fichier Sweave:
<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1),
ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
\begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}
qui produit la sortie suivante:
BTW, quelqu'un me dit pourquoi le '> NA' apparaît?
grid.arrange
s'appuie directement sur l'appareil; si vous souhaitez le combiner avec d'autres objets de la grille, vous avez besoin de arrangeGrob
, comme dans
p = rectGrob()
grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1),
ncol=2)
Edit (07/2015): avec v> 2.0.0, vous pouvez utiliser le layout_matrix
argument,
grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))
J'ai essayé de le comprendre avec la grille et j'ai pensé que je l'avais, mais j'ai échoué (bien qu'en regardant maintenant le code dans la fonction que je cite ci-dessous, je peux voir que j'étais vraiment proche ... :-)
Le paquet 'wq' a une fonction layOut
qui le fera pour vous:
p1 <- qplot(mpg, wt, data=mtcars)
layOut(list(p1, 1:3, 1), # takes three rows and the first column
list(p1, 1, 2), # next three are on separate rows
list(p1, 2,2),
list(p1, 3,2))
Une autre alternative est le paquet patchwork
de Thomas Lin Pedersen.
# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
Générez des tracés.
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
Arrangez maintenant les parcelles.
p1 + (p2 / p3 / p4)
Il y a aussi package multipanelfigure qui mérite d'être mentionné. Voir aussi ceci réponse .
library(ggplot2)
theme_set(theme_bw())
q1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
q2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
q3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
q4 <- ggplot(mtcars) + geom_bar(aes(carb))
library(magrittr)
library(multipanelfigure)
figure1 <- multi_panel_figure(columns = 2, rows = 3, panel_label_type = "upper-roman")
figure1 %<>%
fill_panel(q1, column = 1, row = 1:3) %<>%
fill_panel(q2, column = 2, row = 1) %<>%
fill_panel(q3, column = 2, row = 2) %<>%
fill_panel(q4, column = 2, row = 3)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
figure1
Créé le 2018-07-16 par le package reprex (v0.2.0.9000).