Com grid.arrange
, posso organizar várias ggplot
figuras em uma grade para obter uma figura de vários painéis usando algo como:
library(ggplot2)
library(grid)
library(gridExtra)
gerar alguns gráficos ggplot2, então
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
Como posso obter um layout 'desequilibrado' de 2 colunas com um gráfico em toda a primeira coluna e três gráficos na segunda coluna? Eu brinquei com uma abordagem de 'grade de grades' tentando usar grid.arrange
para traçar uma grade (por exemplo plot5
, acima) contra outra trama, mas obtive:
Erro em layGrob (..., as.table = as.table, clip = clip, main = main,: input deve ser grobs!
Atualizar:
Obrigado pelo conselho. Vou examinar viewports
e grid
. Nesse ínterim, graças a @DWin, a layOut
função no pacote 'wq' funcionou muito bem para a figura de compilação em meu Sweave
documento:
Atualização 2:
O arrangeGrob
comando (como sugerido por @baptiste) também funciona bem e parece muito intuitivo - pelo menos foi fácil alterar a largura das duas colunas. Também tem a vantagem de não exigir o pacote `wq '.
por exemplo, aqui está o código do meu arquivo 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}
que produz a seguinte saída:
BTW, alguém me diga por que o '> NA' aparece?
grid.arrange
pode não ser flexível o suficiente (pesquisar stackoverflow para "[r] janela de visualização em grade")grid
. Veja também o livro ggplot2 de Hadley, Seção 8.4.2.grid.arrange
pode ser usado com viewports aninhadas usando seu companheiroarrangeGrob
(essencialmente retornando agTree
), como no exemplo que dei abaixo.plot5
não é necessária, poisgrid.arrange
não retorna nada (NULL). Se você quiser salvar o grob resultante, usearrangeGrob
novamente (egrid.draw
para exibi-lo).Respostas:
grid.arrange
desenha diretamente no dispositivo; se você quiser combiná-lo com outros objetos de grade que você precisaarrangeGrob
, como emEditar (07/2015): com v> 2.0.0 você pode usar o
layout_matrix
argumento,fonte
cbind(c(1,1,1), c(2,3,4))
matriz descreve a disposição das figuras?Tentei descobrir com a grade e pensei que tinha feito, mas acabei falhando (embora olhando agora para o código na função que cito abaixo, posso ver que estava muito perto ... :-)
O pacote 'wq' tem uma
layOut
função que fará isso por você:fonte
g1
,g2
, etc ser todosp1
?Outra alternativa é a
patchwork
embalagem de Thomas Lin Pedersen.Gere alguns gráficos.
Agora organize as parcelas.
fonte
Há também um pacote com várias figuras que vale a pena mencionar. Veja também esta resposta .
Criado em 16/07/2018 pelo pacote reprex (v0.2.0.9000).
fonte