如何强制facet_wrap使用定义的列数?

2guxujil  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(95)

我有两个面图(A,ncol = 3 ; B,ncol = 2),我想合并在一起。当合并(使用ggarrange)时,我希望每个图的面都对齐(即,我想强制facet_wrap使用参数ncol=X,即使面的数量小于X)。
你知道我该怎么做吗?

#reprex
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
df <- ToothGrowth
bp <- ggplot(df, aes(x=dose, y=len, group=dose)) + geom_boxplot(aes(fill=dose)) 

a <- bp + facet_wrap(~ dose, ncol=3)
b <- bp + facet_wrap(~ supp, ncol=3)
grid.arrange(a,b,nrow=2)

字符串

我得到的:

x1c 0d1x的数据

我想要的:


pbgvytdp

pbgvytdp1#

一个快速简单的选择是使用ggh4x::facet_manual,它通过design=参数允许单独放置面板,并且可以轻松添加空面板。但是,这仍然会将第二行的图例放置在面板的右侧。

library(ggplot2)
library(ggh4x)

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
df <- ToothGrowth
bp <- ggplot(df, aes(x = dose, y = len, group = dose)) +
  geom_boxplot(aes(fill = dose))

a <- bp + facet_manual(~dose, design = matrix(seq(3), ncol = 3))
b <- bp + facet_manual(~supp, design = matrix(seq(3), ncol = 3))

gridExtra::grid.arrange(a, b, nrow = 2)

字符串


的数据

disho6za

disho6za2#

使用cowplot定义底部行,然后将其嵌套在主网格中。您可能需要根据渲染方式调整2.3。

library(cowplot)

bottom_row <- plot_grid(b, NULL, ncol = 2, rel_widths = c(2.3, 1))
plot_grid(a, bottom_row, ncol = 1)

字符串
这就是在Windows上使用Rgui的样子,如果图形窗口完全展开。rel_widths = c(2.7, 1)如果不展开会更好。


的数据

相关问题