Как я могу выровнять высоту серой панели и в то же время выровнять все панели (даже перевернутые и перевернутые)? Проблема в том, что из-за того, что на верхнем графике нет меток осей et c, высота панели немного больше.
library(ggplot2)
library(gridExtra)
library(grid)
# Plot 1
df1 <- data.frame(n = 1:10, y = rnorm(10, 5))
plot1 <- ggplot(df1, aes(x = n, y = y)) +
geom_bar(stat = "identity") +
labs(y = 'AU', x = NULL) +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
plot.margin = unit(c(0.1, 0.1, 0.1, 0), "cm"))
# Plot 2
df2 <- data.frame(x = rnorm(100), y = rnorm(100))
plot2 <- ggplot(df2, aes(x = x, y = y)) +
geom_point() +
labs(y = 'AU', x = NULL) +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
plot.margin = unit(c(0.1, 0.1, 0.1, 0), "cm"))
# Plot 3
df3 <- data.frame(x = rnorm(100))
plot3 <- ggplot(df3, aes(x = x)) +
coord_flip() +
geom_histogram() +
theme(axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
plot.margin = unit(c(0.1, 0.1, 0.1, 0), "cm"))
# Plot 4
df4 <- data.frame(n = 1:10, y = rnorm(10, 4))
plot4 <- ggplot(df4, aes(x = n, y = y)) +
scale_y_reverse() +
geom_bar(stat = "identity") +
labs(y = 'AU', x = 'N') +
theme(plot.margin = unit(c(0.1, 0.1, 0.1, 0), "cm"))
# Get blank plot
blank <- grid.rect(gp=gpar(col="white"))
# Combine everything into one plot
## Get Grobs
gplot1 <- ggplotGrob(plot1)
gplot2 <- ggplotGrob(plot2)
gplot3 <- ggplotGrob(plot3)
gplot4 <- ggplotGrob(plot4)
# Align widths
maxWidth = grid::unit.pmax(gplot1$widths, gplot2$widths, gplot4$widths)
gplot1$widths <- as.list(maxWidth)
gplot2$widths <- as.list(maxWidth)
gplot4$widths <- as.list(maxWidth)
# Grid arrange
grid.arrange(grobs = list(gplot1, blank, gplot2, gplot3, gplot4, blank),
newpage = FALSE,
ncol = 2,
widths = c(12, 3))
Поскольку я хочу, чтобы ось y среднего графика рассеяния была выровнена с перевернутой осью x правого графика, я не вижу, как я могу использовать rbind()
, как предлагается здесь будет работать здесь.
Кроме того, установка высоты гроба вручную, например
gplot4$heights<- gplot1$heights
просто разрезы этикеток. В то время как обратный порядок (gplot1$heights<- gplot4$heights
) вводит большой промежуток между верхним и средним графиком.