ggplot如何计算其默认中断?

时间:2016-07-20 16:35:50

标签: r ggplot2

标题相对自我解释。我想知道ggplot如何决定它的默认中断(以及标签)。

从下面的代码看,每个geom的方法看起来都是一样的:

library(ggplot2)

ggplot(data=mtcars,mapping=aes(x=carb,y=hp,fill=as.factor(gear)))+
  geom_bar(stat="identity",position="dodge")

ggplot(data=mtcars,mapping=aes(x=carb,y=hp,fill=as.factor(gear)))+
  geom_point()

非常感谢任何帮助

1 个答案:

答案 0 :(得分:6)

我自己也有同样的问题,谷歌把我带到了这个问题,所以我想我会做一些挖掘。

假设我们绘制

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)被推导出来。

enter image description here

关注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有关。