239

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

有什么方法可以增加 ggplot2 中的轴刻度数吗?

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

可能 ggplot 在内部使用某种算法执行此操作,但我找不到它是如何做到的,以根据我想要的进行更改。

4

6 回答 6

231

scale_x_continuous您可以通过修改和/或覆盖 ggplots 默认比例scale_y_continuous。例如:

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()在这里也可以找到很好的洞察力来理解其他论点。

于 2012-07-04T22:15:36.613 回答
212

根据Daniel Krizian 的评论,您还可以使用库中自动导入的pretty_breaks函数:scales

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))
于 2015-07-14T13:45:47.200 回答
68

您可以为 提供一个函数参数scale,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))
于 2013-06-23T03:16:15.473 回答
37

从 v3.3.0 开始,ggplot2可以选择n.breaks自动为scale_x_continuousscale_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)

在此处输入图像描述

于 2020-01-13T22:29:49.827 回答
6

此外,

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

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

于 2018-01-29T16:28:24.813 回答
2

对此问题的答复以及如何在 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))
于 2021-10-02T04:47:45.513 回答