ggplot2和gridExtra:减少绘图之间的空间,但保持一个绘图的ylab

时间:2018-08-08 15:06:51

标签: r ggplot2 plot whitespace

我想通过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)

enter image description here

  • 应尽量减少图形之间的间隔。
  • 所有图形均应具有相同的大小。
  • 应保留左侧图形的ylab。

我正在尝试用plot.margin解决问题,但不幸的是,这没有用。

2 个答案:

答案 0 :(得分:2)

我建议cbind()gtables,删除轴。空单位会自动确保面板宽度相等。

lg <- lapply(list(ggp1,ggp2,ggp3),ggplotGrob)

rm_axis <- function(g){
  lay <- g[["layout"]]
  cp <- lay[lay$name == "panel",]
  g[,-c(1:(cp$l-1))]
}

lg[-1] <- lapply(lg[-1], rm_axis)

grid::grid.draw(do.call(gtable_cbind, lg))

答案 1 :(得分:0)

theme (axis.title.y = element_blank())ggp2中添加ggp3将减小它们之间的空间。

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("") + theme (axis.title.y = element_blank())


ggp3 <- ggplot(df, aes(x, y)) + 
  geom_line() + theme_bw() +
  ylab("") + theme (axis.title.y = element_blank())

# Arrange grids
grid.arrange(ggp1, ggp2, ggp3, ncol = 3)