ggplot 中具有相同面板大小的 gridExtra 面板图
gridExtra panel plot with identical panel sizes in ggplot
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
' 对象(所以日期行正常)?
作为 grid
的替代品,新的 patchwork
库可能会在此处提供帮助。它与 ggsave 配合使用,可以很好地对齐图。
https://github.com/thomasp85/patchwork
patchwork::plot_layout(p1 / p2)
我发现了一个使用 egg
包的解决方案,我认为它包含在 ggplot2
中。我将走这条路以防止必须安装 patchwork
。看来您需要 R 3.5+ 才能安装 patchwork
.
egg::ggarrange(p1, p2)
p <- egg::ggarrange(p1, p2)
ggsave(plot = p, "panel-plot.png")
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
' 对象(所以日期行正常)?
作为 grid
的替代品,新的 patchwork
库可能会在此处提供帮助。它与 ggsave 配合使用,可以很好地对齐图。
https://github.com/thomasp85/patchwork
patchwork::plot_layout(p1 / p2)
我发现了一个使用 egg
包的解决方案,我认为它包含在 ggplot2
中。我将走这条路以防止必须安装 patchwork
。看来您需要 R 3.5+ 才能安装 patchwork
.
egg::ggarrange(p1, p2)
p <- egg::ggarrange(p1, p2)
ggsave(plot = p, "panel-plot.png")