【发布时间】:2018-09-10 21:03:41
【问题描述】:
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()s size = "last" 让我得到两个宽度完全相同的 grid.arrange'd 对象(这样日期才能正确排列)?
【问题讨论】: