R中Levelplot布局失效:如何按顺序排列9个点数据Levelplot图
解决R语言Levelplot的9图布局问题
我帮你搞定这个levelplot的布局问题!你的需求是把9个点数据的levelplot按1-9顺序排列,图1放在第一行最左边,对吧?这里有两个靠谱的方法,看你习惯哪种:
方法一:用Lattice原生打印方式(无需额外包)
如果你不想装新包,用Lattice自带的print函数结合split参数就能实现。核心是先设定3行3列的布局,然后逐个指定每个图的位置:
# 先清空绘图区域 grid.newpage() # 按顺序打印每个图,split参数格式是c(列位置, 行位置, 总列数, 总行数) print(p1, split = c(1, 1, 3, 3), more = TRUE) # 第1列第1行,继续打印下一个 print(p2, split = c(2, 1, 3, 3), more = TRUE) print(p3, split = c(3, 1, 3, 3), more = TRUE) print(p4, split = c(1, 2, 3, 3), more = TRUE) print(p5, split = c(2, 2, 3, 3), more = TRUE) print(p6, split = c(3, 2, 3, 3), more = TRUE) print(p7, split = c(1, 3, 3, 3), more = TRUE) print(p8, split = c(2, 3, 3, 3), more = TRUE) print(p9, split = c(3, 3, 3, 3), more = FALSE) # 最后一个图,结束布局
这里more=TRUE表示后面还有图要添加,最后一个设为FALSE就会完成整个布局。
方法二:用gridExtra包快速排列(更简洁)
如果想写更少的代码,gridExtra包的grid.arrange函数是绝佳选择,它能直接按顺序排列多个Lattice图:
首先安装并加载包:
install.packages("gridExtra") library(gridExtra)
然后直接把你的9个图按顺序传进去,指定行数和列数:
# 按1-9顺序排列,3行3列 grid.arrange(p1, p2, p3, p4, p5, p6, p7, p8, p9, nrow = 3, ncol = 3)
要是你的图是存在列表里的(比如循环生成的),还能直接传列表:
# 假设你的9个图存在plots列表里 plots <- list(p1, p2, p3, p4, p5, p6, p7, p8, p9) grid.arrange(grobs = plots, nrow = 3, ncol = 3)
这样默认就是从上到下、从左到右的顺序,正好让图1待在第一行起始位置。
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

