Несколько участков рядом - Как сделать так, чтобы все участки имели одинаковую ширину?

Я просто размещаю три ggplots так, чтобы они появлялись рядом в сохраненном png. Тем самым я последовал полезной подсказке этого ответа. Для большей наглядности я отображаю только легенду о самом правом сюжете. По логике теперь должна быть указана большая ширина для самого правого графика из-за легенды. С scales::arrangeGrob() мы можем достичь этого, например, c(600, 600, 750),

library(ggplot2)
economics$long <- with(economics, ifelse(uempmed > 8.61, 1, 0))
p <- ggplot(economics[economics$date < "1979-01-01", ], 
            aes(date, unemploy, color = long)) + 
  geom_line() + theme(legend.position="none")
q <- ggplot(economics[economics$date < "1991-01-01", ], 
            aes(date, unemploy, color = long)) + 
  geom_line() + theme(legend.position="none")
r <- ggplot(economics[economics$date < "2003-01-01", ], 
            aes(date, unemploy, color = long)) +
  geom_line()

l <- list(p, q, r)

library(gridExtra)
ggsave("test.png", 
       arrangeGrob(grobs = l, nrow = 1, ncol = 3, 
                   widths = c(600, 600, 750), heights = NULL, 
                   padding = unit(0.5, "line")),
       width = 18, height = 9, units = "cm", dpi = 600,
       scale = 1.5)

Я уверен, что методом проб и ошибок я мог бы отрегулировать самый правый график, пока он не подойдет. Фактическая проблема заключается в том, что ширины среднего и самого левого графика не совпадают, несмотря на одинаковые значения 600, что действительно раздражает:

введите описание изображения здесь

Кто-нибудь знает, как сделать все участки одинаковой ширины?

1 ответ

Решение

Одним из возможных решений является использование пакета egg baptiste.

# Using OPs data/plots
# Add aligned plots into a single object 
figure <- egg::ggarrange(p, q, r, nrow = 1)
# Save into a pdf
ggsave("~/myStocks.pdf", figure, width = 22, height = 9, units = "cm", dpi = 600)

Выровненный результат выглядит так:

введите описание изображения здесь

Другие вопросы по тегам