Estou usando o ggplot e tenho dois gráficos que quero exibir um sobre o outro. Usei grid.arrange
do gridExtra para empilhá-los. O problema é que eu quero que as bordas esquerdas dos gráficos se alinhem assim como as bordas direitas, independentemente dos rótulos dos eixos. (o problema surge porque os rótulos de um gráfico são curtos enquanto o outro é longo).
A pergunta:
como posso fazer isso? Não sou casado com grid.arrange, mas o ggplot2 é obrigatório.
O que eu tentei:
tentei brincar com larguras e alturas, bem como ncol e nrow para fazer uma grade 2 x 2 e colocar os visuais em cantos opostos e, em seguida, brincar com as larguras, mas não consegui obter os visuais em cantos opostos .
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Respostas:
Tente isto,
Editar
Aqui está uma solução mais geral (funciona com qualquer número de plotagens) usando uma versão modificada do
rbind.gtable
incluído emgridExtra
fonte
tableGrob
. Ogtable::cbind
dá-me um erro decepcionante:nrow(x) == nrow(y) is not TRUE
. Alguma sugestão?[2:5]
significa isso?Eu queria generalizar isso para qualquer número de parcelas. Aqui está uma solução passo a passo usando a abordagem de Baptiste:
colete as larguras para cada grob de cada parcela
use do.call para obter a largura máxima
atribua a largura máxima para cada grob
enredo
fonte
Usando o pacote cowplot :
fonte
Em http://rpubs.com/MarkusLoew/13295 está disponível uma solução realmente fácil (último item) Aplicada a este problema:
você também pode usar isso para largura e altura:
fonte
size="first"
significa que o alinhamento não ficará muito bom se o segundo gráfico for maior que o primeiroO
egg
pacote envolve objetos ggplot em uma3x3
gtable padronizada , permitindo o alinhamento de painéis de plotagem entre ggplots arbitrários, incluindo os facetados.fonte
geom_tile
) com legenda na parte inferior e um mapa de calor multifacetado (facet_grid
comgeom_tile
), mas falhou em alinhar a altura do terceiro gráfico, que era um dendrograma (geom_segment
). no entanto, o cowplot ougridExtra::grid.arrange
não foram capazes de fazer nem mesmo o primeiro, então isso funciona melhor até agoraAqui está outra solução possível usando
melt
do pacote reshape2 efacet_wrap
:fonte
O pacote patchwork lida com isso por padrão:
Criado em 08/12/2019 pelo pacote reprex (v0.3.0)
fonte
Na melhor das hipóteses, isso é um hack:
Mas parece muito errado.
fonte
Sei que esta é uma postagem antiga e que já foi respondida, mas posso sugerir combinar a abordagem de @baptiste
purrr
para torná-la mais bonita:fonte