增加轴刻度数

Joã*_*iel 174 r ggplot2

我正在为一些数据生成图,但是滴答的数量太小,我需要更高的读数精度.

有没有办法增加ggplot2中的轴刻度数?

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

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

Cha*_*ase 172

您可以通过修改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()
Run Code Online (Sandbox Code Playgroud)

给你这个:

在此输入图像描述

覆盖尺度可以给你这样的东西:

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您只想"缩放"绘图的特定部分,请分别查看xlim()ylim().在这里也可以找到好的见解来理解其他论点.

  • 实际上,重点是将"by"参数"推广"到不同的数字标度,即0.5是这个数据的一个好的值,范围是c(-3,3),但它不是一个很好的范围.范围为c(0,5000)的数据.有计算它的功能吗? (4认同)
  • @JoãoDaniel - 我的意思是ggplot自动完成这项工作.如果它没有产生令人满意的结果,我不确定是否有内置函数来提供不同的东西.你会希望将具体到你的情节,但也许想通过一些测试案例和您指定的详细程度详细程度/识别模式......如果这是一个箱线图,像`最大最小30`是一个非常常见的"桶"大小......但这可能是也可能不是一个很好的起点. (3认同)
  • x轴上的分类值如同时间序列的一年中的几个月怎么样? (3认同)
  • @ScottDavis 看看 [link](https://www.statworx.com/de/blog/customizing-time-and-date-scales-in-ggplot2/)。您可以使用 `scale_x_date(date_breaks = "5 月", date_minor_breaks = "1 月") ` (3认同)
  • 对于缩放,应使用“coord_cartesian”而不是“xlim”。/sf/ask/1797962981/ (2认同)

slh*_*hck 151

您可以使用内置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))
Run Code Online (Sandbox Code Playgroud)

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

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))
Run Code Online (Sandbox Code Playgroud)

您所要做的就是插入所需的刻度数.

  • 这显然是最好的答案!Btw ggplot已经导入`scales`但是没有将函数添加到命名空间.因此,您可以在没有导入的情况下将它们称为`scales :: pretty_breaks(n = 10)`. (14认同)

cro*_*ing 62

您可以提供函数参数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))
Run Code Online (Sandbox Code Playgroud)

  • 无需创建自己的函数`number_ticks`.这已经在`pretty_breaks {scales}`中实现了.因此:`ggplot(dat,aes(x,y))+ geom_point()+ scale_x_continuous(breaks = pretty_breaks(n = 10))+ scale_y_continuous(breaks = pretty_breaks(n = 10))` (79认同)
  • @Daniel Krizian:1)需要`要求(尺度)`2)这似乎可以防止我的断裂出现在科学记数法中,因此1e6变为1000000 ?? (11认同)
  • 你可以使用base R的`pretty`而不使用`scales`包,只需提供值作为参数.例如:`(breaks = pretty(dat $ x,n = 10))` (6认同)

Tun*_*ung 24

从 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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这显然是最好的答案!假设您有提供此参数的较新版本的 ggplot,则这与使用 `scales::pretty_breaks` 一样有效,但更紧凑和清晰。谢谢! (2认同)
  • 这个新功能很有用,但我确实希望我们可以指定中断增量,而不必指定最小值和最大值。因此,我不想指定“breaks = seq(1:10, 1)”或“n.breaks = 10”(假设最小值为 1,最大值为 10),而是指定“break.increments”之类的内容= 1`。因此,如果有 12 个数据点,就会有 12 个刻度/标签。`ggplot` 已经有了数据,所以它似乎可以计算出最小值/最大值。 (2认同)

bmc*_*bmc 7

此外,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))
Run Code Online (Sandbox Code Playgroud)

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