在ggplot中设置上限以包括大于最大值的标签

时间:2012-07-11 07:00:23

标签: r ggplot2

我的数据范围似乎总是大于y轴的顶部标签。有没有办法可以自动包含它而无需手动设置限制?

e.g。在

ggplot(data.frame(x=1:11, y=c(11:17,5:2)), aes(x,y)) + geom_point()

我希望标签0和20出现在y轴上,o和12出现在x轴上(并且图表相应地展开)。这应该自动完成,而不在比例选项中指定这些数字。

enter image description here

5 个答案:

答案 0 :(得分:10)

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))

ggplot pretty breaks

pretty函数选择好的中断为10次幂的1,2或5次。然后我只将18包含在该向量中。

答案 1 :(得分:9)

以下解决方案如何:

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))

enter image description here

答案 2 :(得分:3)

可能使用scale_y_continuousexpand参数:

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))

答案 3 :(得分:3)

因此,我认为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))))))

scales completely surrounding data

我假设扩展默认值为0.05,而且默认使用默认值。有更好的方法吗?

答案 4 :(得分:0)

您是否尝试过跳过0.95 * 1.05乘数?

expand_limits(y=c(min(pretty(c(dat$y,min(dat$y)))),max(pretty(c(dat$y,max(dat$y))))))