我自己也有同样的问题,Google 把我带到了这个 SO 问题,所以我想我会做一些挖掘工作。
假设我们绘制
library(ggplot2)
ggplot(mtcars, aes(x = cyl, y = mpg, size = hp)) +
geom_point()
这给了我们下面的情节,我们想知道mpg (10, 15, ..., 35), cyl (4, 5, ..., 8) 和派生出hp (100, 150, ..., 300)。
关注mpg,我们检查scale_y_continuous 的代码,发现它调用了continuous_scale。然后,调用?continuous_scale,我们看到,在trans 参数的描述下,
一个转换对象将一个转换、它的逆转换以及用于生成中断和标签的方法捆绑在一起。
然后,查找?scales::trans_new,我们看到breaks 参数的默认值为extended_breaks()。顺着线索,我们发现scales::extended_breaks 调用labeling::extended(rng[1], rng[2], n, only.loose = FALSE, ...)。将此应用于我们的数据,
with(mtcars, labeling::extended(range(mpg)[1], range(mpg)[2], m = 5))
# [1] 10 15 20 25 30 35
这是我们在情节中观察到的。这提出了为什么,尽管
with(mtcars, labeling::extended(range(hp)[1], range(hp)[2], m = 5))
# [1] 50 100 150 200 250 300 350
我们没有在图例中观察到 50 和 350。我的理解是答案与https://stackoverflow.com/a/13888731/6455166有关。