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轴数据(即,不需要舍入)。

其他回答

您可以通过修改scale_x_continuous和/或scale_y_continuous来覆盖ggplot的默认规模。例如:

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

给你这个:

重写音阶可以得到这样的结果:

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

如果您只想“放大”图的特定部分,请分别查看xlim()和ylim()。在这里也可以找到很好的见解来理解其他的论点。

此外,

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)

根据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))