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

R 在ggplot中设置上限,以包括大于最大值的标签,r,ggplot2,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轴上(并相应地展开绘图)。例如,这应该自动完成,而无需在比例选项中指定这些数字 可能使用缩放y___连续和展开参数: ggplot(data.frame(x=1:10, y=c(11:17,5:3)),

我的数据范围似乎总是大于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轴上(并相应地展开绘图)。例如,这应该自动完成,而无需在比例选项中指定这些数字


可能使用
缩放y___连续
展开
参数:

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

dat所以我不认为
expand
实际上是解决这个问题的方法,而是
expand\u 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))))))

dat以下解决方案如何:

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))
库(ggplot2)

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

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

谢谢你,先生。但当我运行该代码时,不会出现这样的18。(行首的+s而不是前一行的末尾会产生抖动。)我认为要显示18,您需要更改
中的
breaks
参数
scale_y_continuous
。对不起,关于
+
的问题,不用担心。好的,我知道如何进行限制,我可以用
limits=c(0,max(17)*1.1)
解决问题,但我想知道是否有更优雅的解决方案。我肯定有;),也许其他人也会对你的帮助表示感谢!感谢您对
pretty()
的介绍!这不完全是我想要的(这不是我想要的18%,而是自动包含数据上方的下一个中断级别。在本例中为20。)我认为expand参数起作用,但我需要更多地使用它,以确保它足够扩展。再次感谢。如果你有更好的答案,我很乐意放弃我的,接受你的@那是6个月前的事了,恐怕我不记得了:(无论如何,我这里的方法比解决方案更有效。我承认你的解决方案比我的解决方案更好,但ggplot中不是有什么东西首先会把漂亮范围的端点修剪掉吗?另外,我也不需要
breaks=px
参数,对吗?(顺便说一句,如果没有人能想出更好的办法,赏金就是你的!)我尝试过有和没有
breaks=px
,我更喜欢有。如果我不考虑它,我基本上是说“让
pretty
决定最小值和最大值是什么,但让
ggplot
决定断点应该在哪里”因此,我认为最好是让
pretty
控制一切或
ggplot
。顺便说一句,我最初更喜欢ggplot方法,即去掉超出数据范围的记号,但现在我知道有一种相对简单的方法可以用
pretty
覆盖它,以获得我正在使用的更标准的记号方法非常高兴。我原以为ggplot使用
pretty
来确定断点,但现在你提到了,也许我错了。谢谢,@Jeremy,但当我尝试它时,我仍然得到了超出刻度范围的分数。
expand_limits(y=c(min(pretty(c(dat$y,min(dat$y)))),max(pretty(c(dat$y,max(dat$y))))))