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

如何在lattice中实现Y轴刻度标签左右交替显示?

实现lattice绘图Y轴刻度标签左右交替显示

问题背景

我需要可视化线性混合效应模型的条件模式,但默认设置下Y轴标签过于拥挤,因此想让Y轴的刻度标签在左右两侧交替显示。查阅xyplot文档未找到对应参数,尝试给scales设置alternating参数,但该参数仅接受整数或含两个整数的向量,无法实现逐行交替的效果。

预期效果

预期的Y轴标签显示形式如下:

z| --- |
 | --- |y
x| --- |
 | --- |w
 .  .
 .  .
 .  .
b| --- |
 | --- |a

尝试失败的代码

library(lattice)
library(tidyverse)

set.seed(123)
latticeDF <- tibble(x = runif(26), y = letters)
lattice::dotplot(y ~ x, 
                 data = latticeDF, 
                 scales = list(y = list(labels = letters, 
                                       alternating = rep(c(1, 2), 13))))

当前问题

上述代码运行后,Y轴标签全部显示在左侧,没有实现预期的交替显示效果。


解决方案

要实现Y轴刻度标签的左右交替显示,需要自定义axis函数手动控制每个刻度标签的位置,具体代码如下:

library(lattice)
library(tidyverse)

set.seed(123)
latticeDF <- tibble(x = runif(26), y = letters)

# 自定义Y轴绘制函数
custom_y_axis <- function(side, at, labels, ...) {
  if (side == 2) { # 左侧Y轴:绘制奇数位置的标签
    left_idx <- seq(1, length(at), 2)
    axis(side = 2, at = at[left_idx], labels = labels[left_idx], ...)
  } else if (side == 4) { # 右侧Y轴:绘制偶数位置的标签
    right_idx <- seq(2, length(at), 2)
    axis(side = 4, at = at[right_idx], labels = labels[right_idx], ...)
  }
}

dotplot(y ~ x, 
        data = latticeDF,
        scales = list(y = list(draw = FALSE)), # 关闭默认Y轴绘制
        ylab = NULL, ylab.right = NULL, # 移除默认轴标题
        axis = function(side, ...) {
          if (side %in% c(2,4)) {
            custom_y_axis(side = side, 
                         at = seq_along(latticeDF$y), 
                         labels = latticeDF$y, 
                         tick = FALSE) # 可根据需求选择是否显示刻度线
          } else {
            axis.default(side = side, ...)
          }
        })

代码说明

  1. 关闭默认Y轴绘制(scales = list(y = list(draw = FALSE))),避免与自定义轴冲突;
  2. 自定义custom_y_axis函数,分别控制左侧、右侧Y轴的标签显示范围:左侧显示奇数行标签,右侧显示偶数行标签;
  3. 在axis参数中调用自定义函数,实现标签交替显示的效果。

内容的提问来源于stack exchange,提问作者medium-dimensional

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:05