11

我的数据范围似乎总是大于 y 轴的顶部标签。有没有一种方法可以在不手动设置限制的情况下自动包含它?

例如在

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

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

在此处输入图像描述

4

5 回答 5

11

以下解决方案怎么样:

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

在此处输入图像描述

于 2014-01-23T11:35:22.020 回答
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函数选择 1、2 或 5 倍的 10 次方作为很好的中断。然后我只将 18 包含到该向量中。

于 2012-07-11T07:46:28.033 回答
3

也许与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))
于 2012-07-11T07:11:19.667 回答
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))))))

完全缩放周围的数据

我假设 expand default 为 0.05,并且 pretty 与默认值一起使用。有一个更好的方法吗?

于 2012-07-12T06:17:32.223 回答
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))))))
于 2016-03-28T22:03:30.527 回答