【发布时间】:2018-08-02 02:45:25
【问题描述】:
我正在尝试使用 cowplot::plot_grid() 组合两个 ggplot 对象并垂直对齐它们。这通常使用align = "v" 非常简单。
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20)
dat2 <- data.frame(x = 1:10, y = 1:10)
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
但是,当 ggplots 使用 coord_equal() 时,此方法会失败,因为在强制纵横比时 plot_grid() 无法修改轴。相反,默认设置是保持每个绘图的高度相同。
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point() + coord_equal()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point() + coord_equal()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
我可以通过使用 rel_heights 参数来强制我的目标,但这不是一个可行的解决方案,因为我有很多动态的情节要构建。这里y轴是对齐的,所有轴的坐标还是相等的。
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v", rel_heights = c(2, 1.07))
我已经看到许多使用ggplot2::ggplotGrob() 和grid::grid_draw() 来解决类似问题的方法,但是当使用coord_equal() 时,没有什么能完全解决这个问题。也许最好的解决方案根本不使用cowplot::plot_grid(),或者解决方案可能以某种方式动态确定并将正确的值传递给rel_heights。我想我更喜欢后面的选项,以便能够轻松使用 cowplot::plot_grid() 附带的其他功能。或许可以在this related approach中找到一些有用的灵感。
【问题讨论】:
-
是
egg::ggarrange(plot1, plot2)你想要的那种东西? -
我试过
egg::ggarrange(plot1, plot2, ncol = 1),它确实做了垂直对齐,但是y轴坐标不保持等于x轴的坐标。 y 轴在顶部图中被拉伸了一点。另外,我似乎在 github 上找不到egg- 担心它可能不再维护了。 -
很遗憾,但也许该包中还有其他功能可以提供帮助(有点奇怪,它不在 github 上,而是在 it is on cran 上)
-
并不是所有的软件都是在 github 上开发的。
egg的维护者不在github上开发,但是这个库目前维护的很好。 -
@ClausWilke ;有点奇怪的是 baptiste/egg 正在 github 上开发(并且有很多关于从 github 安装它的答案),但它已经从 github 中删除了。嗯 gridExtra 也被删除了,所以似乎改变了方法