facet_wrap奇数分面排布控制:如何实现上1下2而非默认上2下1布局
解决方案
仅使用facet_wrap就可以实现目标布局,只需要添加as.table = FALSE参数即可。
原理说明
facet_wrap默认参数为as.table = TRUE,会按照因子水平的正序,从上到下、从左到右排列分面。3个分面搭配2列的布局下,自然会生成第一行2个、第二行1个的效果。
修改为as.table = FALSE后,会将因子水平最高的分面放在最顶部,剩余分面按顺序排列在下一行,刚好对应第一行1个、第二行2个的布局。
可直接运行的修改后代码
ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point() + facet_wrap(~cyl, ncol = 2, as.table = FALSE)
自定义第一行显示的分面
如果需要指定第一行展示的分面内容,提前调整cyl的因子水平,把想要放在第一行的分类设为最高因子水平即可,示例如下:
library(ggplot2) library(dplyr) # 调整因子水平,把6缸设为最高水平,最终第一行将展示6缸的分面 mtcars_mod <- mtcars %>% mutate(cyl = factor(cyl, levels = c(4, 8, 6))) ggplot(mtcars_mod, aes(x = hp, y = mpg)) + geom_point() + facet_wrap(~cyl, ncol = 2, as.table = FALSE)
内容的提问来源于stack exchange,提问作者user2019886
相关产品推荐
相关产品推荐

