ggplot2:在离散轴上显示每第n个值

Dan*_*nny 4 r ggplot2

我如何自动在离散轴上每n个值中仅显示1个?

我可以像这样获得其他所有值:

library(ggplot2)

my_breaks <- function(x, n = 2) {
  return(x[c(TRUE, rep(FALSE, n - 1))])
}

ggplot(mpg, aes(x = class, y = cyl)) +
  geom_point() +
  scale_x_discrete(breaks = my_breaks)
Run Code Online (Sandbox Code Playgroud)

但是我认为不可能将n参数指定为my_breaks,是吗?

这可能是另一种方式吗?我正在寻找一种适用于字符列和因子列的解决方案。

kra*_*ski 6

从 ggplot 3.3.0 开始,也可以使用 来解决离散轴上的密集标签问题scale_x_discrete(guide = guide_axis(n.dodge = 2)),这给出了(文档中的图):

在此处输入图片说明

有关更多详细信息,请参阅发行说明的轴代码重写部分。


Gre*_*gor 5

不太像,但是scale_x_discrete可以将函数用作breaks参数,因此您只需要调整代码以使其成为函数 (返回函数的函数),一切就可以了:

every_nth = function(n) {
  return(function(x) {x[c(TRUE, rep(FALSE, n - 1))]})
}

ggplot(mpg, aes(x = class, y = cyl)) +
  geom_point() +
  scale_x_discrete(breaks = every_nth(n = 3))
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,这真是一个很好的解决方案! (2认同)