2024-09-24 10:00:04

增加轴刻度数

我正在为一些数据生成图表,但刻度的数量太小,我需要更精确的读数。

是否有某种方法可以增加ggplot2中的轴刻度数?

我知道我可以告诉ggplot使用一个向量作为轴刻度,但我想要的是为所有数据增加刻度的数量。换句话说,我希望从数据中计算出刻度数。

ggplot可能会在内部用一些算法来做这个,但我找不到它是怎么做的,根据我想要的改变。


当前回答

此外,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

适用于二进制或离散缩放的x轴数据(即,不需要舍入)。

其他回答

根据Daniel Krizian的评论,你也可以使用scales库中的pretty_breaks函数,它是自动导入的:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

你所要做的就是插入n的刻度数。


一个稍微不太有用的解决方案(因为你必须再次指定数据变量),你可以使用内置的pretty函数:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))

回答这个问题和如何在R ggplot中以相等的间隔在X轴和Y轴上设置标签?

mtcars %>% 
  ggplot(aes(mpg, disp)) +
  geom_point() +
  geom_smooth() + 
  scale_y_continuous(limits = c(0, 500),
                     breaks = seq(0,500,50))  +
  scale_x_continuous(limits = c(0,40),
                     breaks = seq(0,40,5))

此外,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

适用于二进制或离散缩放的x轴数据(即,不需要舍入)。

您可以提供一个函数参数进行缩放,ggplot将使用 用来计算滴答点位置的函数。

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))

从v3.3.0开始,ggplot2有一个选项n.breaks,用于自动生成scale_x_continuous和scale_y_continuous的间断符

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)