94 votes

Comment puis-je obtenir un "déséquilibré" grille de ggplots?

Avec grid.arrange je peux organiser plusieurs ggplot chiffres dans une grille afin de réaliser un multi-panneau de la figure en utilisant quelque chose comme:

    library(ggplot2)
    library(grid)
    library(gridExtra)

générer certains ggplot2 parcelles , puis

plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)

Comment puis-je obtenir un "asymétriques" 2 col de mise en page avec une parcelle de terrain dans l'ensemble du premier col et trois parcelles dans le deuxième col? J'ai joué avec une "grille de grilles' approche en essayant de l'utiliser grid.arrange de tracer une grille (par exemple, plot5,, ci-dessus) contre une autre parcelle, mais a obtenu:

Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main,  : 
      input must be grobs!

Mise à jour:

Merci pour les conseils. Je vais regarder en viewports et grid. En attendant, merci à @DWin, l' layOut fonction dans le 'qe' package très bien fonctionné pour la compilation figure dans mon Sweavedocument: enter image description here

Mise à jour 2:

L' arrangeGrobcommande (comme suggéré par @baptiste) fonctionne aussi 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 `qe' paquet.

par exemple, Voici le code à partir de mon Sweave fichier:

<<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: enter image description here

BTW, quelqu'un me dire pourquoi le '>NA " qui s'affiche?

73voto

baptiste Points 19677

grid.arrange dessine directement sur l'appareil; si vous souhaitez les combiner avec d'autres de la grille des objets vous avez besoin d' arrangeGrob, comme dans

 p = rectGrob()
 grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1), ncol=2)

17voto

BondedDust Points 105234

J'ai essayé de trouver avec grille et de la pensée, je l'ai eu vers le bas, mais a fini par défaut (bien que maintenant, le code dans la fonction que j'ai citer ci-dessous, je peux voir que j'ai été vraiment proche ... :-)

Le 'qe' paquet a un layOut fonction qui va le faire 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))

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X