ggplot2 移动构面布局

ggplot2 move facet layout

我想手动(或自动)更改 R 中 ggplot2 图形的分面图的面板布局。我已经看到注释和分面重新排序的解决方案,但不是这个特定问题。这是一个可重现的例子:

library(ggplot2)
plot <- ggplot(diamonds, aes(carat, price)) + facet_wrap(~cut) + geom_point()

如果我现在看绘图,您会看到空白小平面位于绘图网格的右下角。

我想要做的就是让空白绘图位置改为在左上角,但仍然绘制所有其他绘图(只需移动空白绘图位置)。

我试过这样查看 ggplot_build()

plot_build <- ggplot_build(plot)
plot_build$panel$layout

但我不知道如何将空白绘图位置实际移动到正确的行和列。有人有什么想法吗?

您可以在 gtable 中移动面板,

library(grid)
library(ggplot2)

p <- ggplot(diamonds, aes(carat, price)) + 
      facet_wrap(~cut) + geom_point()

g <- ggplotGrob(p)

gl <- g$layout
idcol <- gl$r == (ncol(g)-2)
g$layout[idcol & gl$b < 5, c("t", "b")] <- gl[idcol & gl$b < 5, c("t", "b")] + 4
grid.newpage()
grid.draw(g)