ggplot2 移动构面布局

Posted

技术标签:

【中文标题】ggplot2 移动构面布局【英文标题】:ggplot2 move facet layout 【发布时间】:2016-08-27 16:42:01 【问题描述】:

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

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

如果我现在查看绘图,您会看到空白面分配在绘图网格的右下角。

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

我试过查看ggplot_build()

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

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

【问题讨论】:

不应该把右上角的面板移到左下角,而沿着底部的另外两个移到一个面板上吗?无论您以哪种方式阅读,下面答案中的面板都是乱序的 @rawr 我也想知道最后一列中的 x 轴发生了什么。这是最近的 ggplot2 功能吗? @baptiste 如果没有 free_x 比例,它也不会出现在 this 的东西 @rawr 我接受了答案,因为它向我展示了如何移动面板,即使它没有按照明确指定的方式移动所有面板。这只是一个例子,解决方案引导我从我的实际数字中得到正确的输出。 【参考方案1】:

您可以在 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)

【讨论】:

太棒了,这正是我想要的,谢谢!你介意解释一下布局列代表什么(或者有没有你可以指点我的网站)? 遗憾的是没有文档,这是一个反复试验的游戏,并且在每次包更新时都会随机更改。我曾经在gridextra wiki though 上创建了一个介绍文档 这很不幸,但不用担心我会玩弄它。非常感谢@baptiste!

以上是关于ggplot2 移动构面布局的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 跨越组中的嵌套构面

ggplot2 facet_grid 带有构面标题

在 ggplot2 facet_grid 中旋转切换的构面标签

如何根据 ggplot2 绘制的图上的 y 轴值覆盖构面标签?

ggplot2:将各个facet_wrap构面另存为单独的图对象

根据ggplot2中最后一个分面网格的递减值对条形图的Y轴进行排序