library(tidyverse)
library(grid)
df <- tibble(
date = as.Date(40100:40129, origin = "1899-12-30"),
value = rnorm(30, 8)
)
p1 <- ggplot(df, aes(date, value)) +
geom_line() +
scale_x_date(date_breaks = "1 day") +
theme(
axis.title.x = element_blank(),
axis.text.x = element_text(angle = 90, vjust = 0.5)
) +
coord_cartesian(xlim = c(min(df$date) + 0, max(df$date) - 0))
p2 <- ggplot(df, aes(date, value)) +
geom_bar(stat = "identity") +
scale_x_date(date_breaks = "1 day") +
theme(
axis.title.x = element_blank(),
axis.text.x = element_text(angle = 90, vjust = 0.5)
) +
coord_cartesian(xlim = c(min(df$date) + 0, max(df$date) - 0))
让我们如上所述创建图p1
和p1
。我可以将它们堆叠在一起,并使其宽度完全相同(放大至全屏显示)。请注意,日期排列整齐。代码在下面。
grid.newpage()
grid.draw(rbind(ggplotGrob(p1), ggplotGrob(p2), size = "last"))
不幸的是,我无法在上面的代码块中使用ggsave()
,所以我去了gridExtra包。
gridExtra::grid.arrange(p1, p2)
这几乎可以用,但是请注意,日期以垂直方式将顶部图和底部图进行比较时,日期并不是很完美。 所以... 与rbind()
的{{1}}等效,让我得到两个size = "last"
宽度完全相同的对象(因此日期正确排列) ?
答案 0 :(得分:1)
作为grid
的替代方法,新的patchwork
库可能在这里有所帮助。它可以与ggsave一起使用,并且可以很好地对齐绘图。
https://github.com/thomasp85/patchwork
patchwork::plot_layout(p1 / p2)
答案 1 :(得分:0)