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

Posted

技术标签:

【中文标题】ggplot2:在离散轴上显示每第 n 个值【英文标题】:ggplot2: display every nth value on discrete axis 【发布时间】:2019-03-25 23:18:13 【问题描述】:

如何自动在离散轴上的每 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,是吗?

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

【问题讨论】:

【参考方案1】:

不太一样,但scale_x_discrete 可以将函数作为中断参数,因此您只需修改您的代码以使其成为 functional(返回函数的函数)一切都会奏效:

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】:

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

有关详细信息,请参阅发行说明的 rewrite of axis code 部分。

【讨论】:

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

以上是关于ggplot2:在离散轴上显示每第 n 个值的主要内容,如果未能解决你的问题,请参考以下文章

R:使用 ggplot2 的离散热图

R语言ggplot2可视化更改轴上数字的格式(显示格式)实战

ggplot2:轴上的花括号?

R语言ggplot2可视化X轴标签互相覆盖如法识别解决:x轴上每隔十年显示一个时间值将时间信息从因子或者字符转化为数值则ggplot2会自动优化X轴标签的显示

ggplot2:方面的连续和离散比例

如何在 SQL (postgresql) 中选择每第 n 分钟的行