Uma desvantagem das soluções baseadas grid.arrange
é que elas dificultam rotular as parcelas com letras (A, B, etc.), como a maioria dos periódicos exige.
Eu escrevi o pacote cowplot para resolver este (e mais alguns) problemas, especificamente a função plot_grid()
:
library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot() + theme_bw()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) + theme_bw() +
theme(legend.position = c(0.8, 0.8))
plot_grid(iris1, iris2, labels = "AUTO")
O objeto que plot_grid()
retorna é outro objeto ggplot2, e você pode salvá-lo ggsave()
como de costume:
p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)
Como alternativa, você pode usar a função cowplot save_plot()
, que é um invólucro fino ggsave()
que facilita a obtenção das dimensões corretas para plotagens combinadas, por exemplo:
p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)
(O ncol = 2
argumento diz save_plot()
que há duas plotagens lado a lado e save_plot()
torna a imagem salva duas vezes maior.)
Para uma descrição mais detalhada de como organizar plotagens em uma grade, consulte esta vinheta. Há também uma vinheta explicando como fazer gráficos com uma legenda compartilhada.
Um ponto frequente de confusão é que o pacote cowplot altera o tema padrão do ggplot2. O pacote se comporta dessa maneira porque foi originalmente escrito para uso em laboratório interno e nunca usamos o tema padrão. Se isso causar problemas, você pode usar uma das três abordagens a seguir para solucionar isso:
1. Defina o tema manualmente para cada plot. Eu acho que é uma boa prática sempre especificar um tema específico para cada enredo, assim como fiz + theme_bw()
no exemplo acima. Se você especificar um tema específico, o tema padrão não importa.
2. Reverta o tema padrão para o padrão ggplot2. Você pode fazer isso com uma linha de código:
theme_set(theme_gray())
3. Chame as funções do cowplot sem anexar o pacote. Você também não pode chamar library(cowplot)
ou, em require(cowplot)
vez disso, chamar funções de cowplot anexando cowplot::
. Por exemplo, o exemplo acima usando o tema padrão ggplot2 se tornaria:
## Commented out, we don't call this
# library(cowplot)
iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()
iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
geom_density(alpha = 0.7) +
theme(legend.position = c(0.8, 0.8))
cowplot::plot_grid(iris1, iris2, labels = "AUTO")
Atualizações:
- No cowplot 1.0, o tema padrão do ggplot2 não é mais alterado.
- A partir do ggplot2 3.0.0, os gráficos podem ser rotulados diretamente, veja, por exemplo, aqui.