我的数据范围似乎总是大于 y 轴的顶部标签。有没有一种方法可以在不手动设置限制的情况下自动包含它?
例如在
ggplot(data.frame(x=1:11, y=c(11:17,5:2)), aes(x,y)) + geom_point()
我想让标签 0 和 20 出现在 y 轴上,o 和 12 出现在 x 轴上(并且绘图相应地展开)。例如,这应该自动完成,而无需在比例选项中指定这些数字。
以下解决方案怎么样:
library(ggplot2)
d <- data.frame(x=1:11, y=c(11:17,5:2))
px <- pretty(d$x)
py <- pretty(d$y)
ggplot(d, aes(x,y)) + geom_point() +
scale_x_continuous(breaks=px, limits=range(px)) +
scale_y_continuous(breaks=py, limits=range(px))
dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) +
geom_point()+
scale_y_continuous(breaks=c(pretty(dat$y, n=4),18), expand=c(0.25, 0.25))
该pretty
函数选择 1、2 或 5 倍的 10 次方作为很好的中断。然后我只将 18 包含到该向量中。
也许与scale_y_continuous
论点expand
:
ggplot(data.frame(x=1:10, y=c(11:17,5:3)), aes(x,y)) +
geom_point() +
scale_y_continuous(expand=c(0.5, 0.5))
所以我不认为expand
实际上是解决这个问题的方法,而是expand_limits
。这显然不是最漂亮的代码,但这基本上是我正在寻找的功能,其中 y 轴上的标签完全包含数据。
dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) +
geom_point() +
expand_limits(y=c(min(pretty(c(dat$y, min(dat$y) * (0.95)))), max(pretty(c(dat$y, max(dat$y) * (1.05))))))
我假设 expand default 为 0.05,并且 pretty 与默认值一起使用。有一个更好的方法吗?
您是否尝试过跳过 0.95 * 1.05 乘数?
expand_limits(y=c(min(pretty(c(dat$y,min(dat$y)))),max(pretty(c(dat$y,max(dat$y))))))