我想通过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)
我正在尝试用plot.margin
解决问题,但不幸的是,这没有用。
答案 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)