【问题标题】:在ggplot2(scale_x_discrete)中控制离散刻度标签[重复]
【发布时间】:2022-01-23 05:27:40
【问题描述】:

在连续范围内,我可以使用breaks 降低刻度标签的密度,并使用scales::pretty_breaks() 以灵活的方式很好地控制它们的密度。但是,我不知道如何用离散的比例实现类似的东西。具体来说,如果我的离散标签是letters,那么假设我想显示每隔一个标签来清理图表。有没有一种简单、系统的方法来做到这一点?

我有一个可行的技巧(见下文),但正在寻找更自动和优雅的东西。

library(tidyverse)

# make some dummy data
dat <-
  matrix(sample(100),
         nrow = 10,
         dimnames = list(letters[1:10], LETTERS[1:10])) %>%
  as.data.frame() %>%
  rownames_to_column("row") %>%
  pivot_longer(-row, names_to = "column", values_to = "value")

# default plot has all labels on discrete axes
dat %>% 
  ggplot(aes(row, column)) +
  geom_tile(aes(fill = value))

# desired plot would look like following:
ylabs <- LETTERS[1:10][c(T, NA)] %>% replace_na("")
xlabs <- letters[1:10][c(T, NA)] %>% replace_na("")

# can force desired axis text density but it's an ugly hack
dat %>% 
  ggplot(aes(row, column)) +
  geom_tile(aes(fill = value)) +
  scale_y_discrete(labels = ylabs) +
  scale_x_discrete(labels = xlabs)

reprex package (v2.0.1) 于 2021 年 12 月 21 日创建

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    处理过度密集的轴标签的一种选择是使用n.dodge

    ggplot(dat, aes(row, column)) +
      geom_tile(aes(fill = value)) +
      scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
      scale_y_discrete(guide = guide_axis(n.dodge = 2))
    

    或者,如果您正在寻找一种方法来减少您对xlabs 的使用并以更多的编程方式进行操作,那么我们可以将一个函数传递给scale_x_discrete(breaks=)

    everyother <- function(x) x[seq_along(x) %% 2 == 0]
    ggplot(dat, aes(row, column)) +
      geom_tile(aes(fill = value)) +
      scale_x_discrete(breaks = everyother) +
      scale_y_discrete(breaks = everyother)
    

    【讨论】:

    • 很好的解决方案,谢谢!为了紧凑,我使用了lambda 函数:scale_x_discrete(breaks = ~.[c(T, F)])
    • 不错的代码高尔夫,我忘记了 scale_* 采用 rlang 风格的函数。
    • 请问,“everyother”是哪里来的?另请参阅此线程中的 Gregor Thomas 回答以获得更通用的功能stackoverflow.com/a/52920047/7941188
    • 第二个代码块中定义的自定义函数。但是您链接的答案非常好,谢谢分享!
    • @DanAdams 谢谢 - 我忽略了这一行 :)
    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 2017-03-01
    • 2021-06-04
    • 2017-12-05
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多