标题相对自我解释。我想知道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()
非常感谢任何帮助
答案 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)被推导出来。
关注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有关。