如何去除lattice包levelplot的轴标签留白?
解决Lattice levelplot的两个问题:标签顺序与留白
问题拆解
你需要实现两个核心需求:
- 仅在左侧和顶部显示分类标签,消除右侧和底部的留白
- 矩阵行的类别按字母顺序从上到下排列(默认levelplot会从下到上显示行标签)
解决方案代码
library(lattice) testlat <- function(){ m = matrix(1:16,4,4) rownames(m) = colnames(m) = c("Aardvark","Jackal","Panther","Zebra") # 反转列保留原需求,同时反转行调整y轴标签顺序 m[,ncol(m):1][nrow(m):1, ] } plotlat <- function(m){ levelplot( m, # 精准控制轴显示:x轴仅顶部,y轴仅左侧 scales = list( x = list(bottom = FALSE, top = TRUE, alternating = 1), y = list(right = FALSE, left = TRUE, alternating = 1) ), # 移除右侧和底部的预留空白空间 par.settings = list( layout.widths = list(right.padding = 0), layout.heights = list(bottom.padding = 0) ), # 仅绘制指定侧的轴 axis = function(side, line.col = "black", ...) { if(side %in% c("left","top")) { axis.default(side = side, line.col = line.col, ...) } } ) } # 调用测试 plotlat(testlat())
关键修改说明
行标签顺序调整
默认levelplot的y轴是从下到上渲染行,我们通过反转矩阵的行([nrow(m):1, ]),让原本的第一行(Aardvark)对应y轴的顶部,最终实现字母顺序从上到下排列。留白消除
- 用
scales参数直接关闭底部(x轴)和右侧(y轴)的轴绘制,避免无效渲染 - 通过
par.settings的layout.widths和layout.heights将右侧、底部的预留 padding 设为0,彻底消除留白 - 保留自定义
axis函数确保仅绘制左侧和顶部的轴,与scales设置形成双重保障
内容的提问来源于stack exchange,提问作者Spacedman
相关产品推荐
相关产品推荐

