R:跳过离散 x 轴上的标签

Jot*_*tHa 1 r ggplot2 axis-labels discrete

我正在尝试制作类似于收入直方图的东西ggplot2。然而,因为我不想显示 y 轴中的频率,而是显示 data.frame 中计算出的变量,所以我想我必须使用geom_bar()存储桶并将其分配为我的data.frame. 现在我想显示我已确定存储桶的所有条形图,但不显示 x 轴上的所有标签。我想一定有某种方法可以用breaks =in来做到这scale_x_discrete()一点,但不知道如何让它只接受“显示每个第二个标签”或类似的东西。

有人会建议如何根据因子变量在 x 轴上显示离散 x 轴的每隔一个标签吗?

(非常感谢任何人的帮助,如果我在这里使用了错误的术语,抱歉。我是 R 新手,只是想尽可能准确地描述一切。)

teu*_*and 8

breaks您可以为参数提供可以处理特殊中断规则的函数。在下面的示例中,我们通过回收c(TRUE, FALSE)作为子集操作来选择所有奇数中断。

library(ggplot2)

ggplot(mpg, aes(class)) +
  geom_bar() +
  scale_x_discrete(breaks = function(x){x[c(TRUE, FALSE)]})
Run Code Online (Sandbox Code Playgroud)

更多解释:

重复逻辑索引,直到它与其索引的向量的长度匹配。如果逻辑索引是c(TRUE, FALSE)if 将继续重复此操作,因此它会有效地拾取向量的每个奇数元素,x因为长度为 2 的索引会重复。

x <- 1:9

x[c(TRUE, FALSE)]
#> [1] 1 3 5 7 9
Run Code Online (Sandbox Code Playgroud)

因此,当您创建长度为 3 的索引时,这将重复 3 次。

x[c(TRUE, FALSE, TRUE)]
#> [1] 1 3 4 6 7 9
Run Code Online (Sandbox Code Playgroud)

如果您想复制幕后发生的事情,可以按以下方法操作。

i <- rep_len(c(TRUE, FALSE), length(x))

x[i]
#> [1] 1 3 5 7 9
Run Code Online (Sandbox Code Playgroud)