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

10
如何在离散轴上自动显示每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)

但我不认为可以指定n参数给my_breaks,对吗?

有其他方法吗?我正在寻找适用于字符列和因子列的解决方案。

2个回答

27

不完全是那样,但 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))

2
非常感谢,这是一个非常巧妙的解决方案! - Danny
这是高度赞赏的。 - ambrish dhaka

15
自 ggplot 3.3.0 版本以来,通过使用 scale_x_discrete(guide = guide_axis(n.dodge = 2)),也可以解决离散轴上标签过于密集的问题(参见文档中的图表)。

enter image description here

请查看发布说明中轴代码重写部分以获取更多详细信息。

非常好!感谢分享这些新功能。 - Danny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接