R语言 我们如何在格子中交替轴刻度标签?

628mspwn  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(103)

我希望在左侧和右侧之间交替Y轴刻度标签。我检查了xyplot文档,但找不到任何有助于实现该目标的参数。我尝试使用alternating参数到scales,但它只接受一个整数或两个整数的向量。我希望替换刻度标签,因为我想可视化由线性混合效应模型估计的条件模式-使用默认设置,有时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))))

输出量:

nzkunb0c

nzkunb0c1#

alternating参数决定在每个面板的哪一侧显示 * 整个轴 *。它不支持在同一面板的两侧交替使用标签。为此,您需要一个辅助轴,如latticeExtra::doubleYScale所产生的。
在你的例子中,它可能看起来像这样:

dp1 <- dotplot(y ~ x, data = latticeDF, 
               scales = list(y = list(labels = replace(letters, 1:13 * 2, ''))))

dp2 <- dotplot(y ~ x, data = latticeDF, 
               scales = list(y = list(labels = replace(letters, 1:13*2-1, ''))))

latticeExtra::doubleYScale(dp1, dp2, use.style = FALSE, add.ylab2 = TRUE)

如果你有兴趣,你可以在ggplot中这样做:

library(ggplot2)

ggplot(latticeDF, aes(x, as.numeric(factor(y)))) + 
  geom_point(color = '#0080fe') +
  scale_y_continuous('y', breaks = 1:13 * 2 - 1, minor_breaks =  1:13 * 2,
                     labels = ~letters[.x],
                     sec.axis = sec_axis(~.x, NULL, breaks = 1:13 * 2, 
                                         labels = letters[1:13 * 2])) +
  theme_bw() +
  theme(panel.grid = element_blank(), 
        panel.grid.major.y = element_line(linewidth = 0.2, color = 'gray'),
        panel.grid.minor.y = element_line(linewidth = 0.2, color = 'gray'))

相关问题