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 facet_grid 中旋转切换的构面标签
如何根据 ggplot2 绘制的图上的 y 轴值覆盖构面标签?