You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除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())

关键修改说明

  1. 行标签顺序调整
    默认levelplot的y轴是从下到上渲染行,我们通过反转矩阵的行([nrow(m):1, ]),让原本的第一行(Aardvark)对应y轴的顶部,最终实现字母顺序从上到下排列。

  2. 留白消除

  • 用scales参数直接关闭底部(x轴)和右侧(y轴)的轴绘制,避免无效渲染
  • 通过par.settings的layout.widths和layout.heights将右侧、底部的预留 padding 设为0,彻底消除留白
  • 保留自定义axis函数确保仅绘制左侧和顶部的轴,与scales设置形成双重保障

内容的提问来源于stack exchange,提问作者Spacedman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:17