【发布时间】:2018-08-09 03:46:54
【问题描述】:
我想通过 ggplot2 和 gridExtra 包并排绘制 3 个图形。左边的图形有一个ylab,其他2个图形没有。所有三个图形应具有相同的大小,并且应尽可能减少图形之间的空间。但是,由于左侧图形的 ylab ,我要么无法根据需要减少空间;或者我正在切断 ylab。
考虑 R 中的以下示例:
library("ggplot2")
library("gridExtra")
# Example data
df <- data.frame(x = 1:10,
y = 1:10)
# Plots
ggp1 <- ggplot(df, aes(x, y)) +
geom_line() + theme_bw() +
ylab("Here is the ylab")
ggp2 <- ggplot(df, aes(x, y)) +
geom_line() + theme_bw() +
ylab("")
ggp3 <- ggplot(df, aes(x, y)) +
geom_line() + theme_bw() +
ylab("")
# Arrange grids
grid.arrange(ggp1, ggp2, ggp3, ncol = 3)
- 应尽可能减少图形之间的间距。
- 所有图形都应具有相同的大小。
- 应保留左侧图形的ylab。
我试图解决 plot.margin 的问题,但很遗憾,这不起作用。
【问题讨论】:
-
如果您不介意从
gridExtra切换到cowplot,请查看cowplot的vignette 制作这些标签 -
几个快速替换:您可以使用
egg::ggarrange来获得相同的面板尺寸,或者您可以隐藏所有y 轴标题,然后使用grid.arrange的left参数,或使用facets -
所以对于备选方案 2.,从 here 获得提示:
plst <- lapply(list(ggp1, ggp2, ggp3), "+", theme(axis.title.y = element_blank(), plot.margin = unit(c(1,0,1,0), "lines"))) ; grid.arrange(grobs = plst, left="my y-axis title", ncol=3) -
非常感谢所有 cmets!我使用了 user10199750 的解决方案,因为他的解决方案完美地解决了我的问题。不过,很高兴知道还有更多选择。
标签: r ggplot2 plot whitespace