如何分离y轴标题(ggplot)并放置在单独的网格中?

时间:2017-04-07 02:01:29

标签: r ggplot2

我试图将几个地块连在一起。我找到了如何使用鸡蛋对齐图的解决方案:ggarrange。这很好地照顾了主要的情节。但我想让所有情节的y.axis标题也对齐。我不能通过使用ggplot选项的通常建议来做到这一点,因为每次运行我的脚本时,数字的范围会有所不同,并且无法提供固定范围,因此轴标题的位置会发生变化。我知道可以将图例和位置分开放在一个单独的网格中,我想知道我们是否可以对轴做同样的事情?

我在这里创建了一个简单的示例代码。

# example created to explain my problem

gdf <- data.frame(a = runif(10,  0, 1),
              b = runif(10, 100, 1000),
              c= runif(10, 10000,100000),
              d= runif(10, 100000,1000000))


p1 <- ggplot(gdf, aes(a, b)) + geom_point() + ylab ("first")
p2 <- ggplot(gdf, aes(a, c)) + geom_point() + ylab ("Second")
p3 <- ggplot(gdf, aes(a, d)) + geom_point() + ylab ("third" )

egg::ggarrange(p1, p2, p3, ncol= 1, nrow = 3, heights=c(1, 1, 1))

enter image description here

2 个答案:

答案 0 :(得分:2)

如果gtables具有相同的结构,那么鸡蛋就是矫枉过正,你可以简单地使用rbind(gtable版本不喜欢unit.pmax进行比较,所以我使用gridExtra版本),

pl <- lapply(list(p1,p2,p3), ggplotGrob)
pl <- Reduce(gridExtra::rbind.gtable, pl)
grid::grid.draw(pl)

enter image description here

答案 1 :(得分:1)

您可以使用具有对齐参数的cowplot::plot_grid

cowplot::plot_grid(p1, p2, p3, align = "v", ncol = 1)

plot with cowplot