如何扩展ggplot y轴限制以包括最大值

run*_*rds 1 r ggplot2

通常在图中,Y轴值标签会在要绘制的最大值以下被切掉。

For example:

library(tidyverse)
mtcars %>% ggplot(aes(x=mpg, y = hp))+geom_point()
Run Code Online (Sandbox Code Playgroud)

我知道scale_y_continous-但我想不出一种聪明的方法来做到这一点。也许我只是在想什么。我不想弄乱自动生成的“智能”中断。

我可能会尝试手动进行此操作...

  mtcars  %>% ggplot(aes(x=mpg, y=hp, color=as.factor(carb)))+geom_point()  + scale_y_continuous(limits = c(0,375))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但这由于“智能中断”而无法像我上面提到的那样起作用。无论如何,我是否需要将默认的中断间隔延长到另外1个,因此在这种情况下将是400个?当然,我希望它对于我正在使用的任何数据集都具有灵活性。

eip*_*i10 5

您可以使用expand_limits()增大最大y轴值。您还可以确保最大y轴值四舍五入到数据范围内的下一个最大值,例如,下一个最高的十个值,下一个最高的数百个值等,具体取决于是否是数据在数十,数百等范围内

例如,下面的函数查找最大y值的以10为底的对数,并将其四舍五入。这为我们提供了最大y值的十进制刻度(例如,数十,数百,数千等)。然后,它将最大y轴值四舍五入到比最大y值高的最接近的十,一百等。

expandy = function(vec, ymin=NULL) {

  max.val = max(vec, na.rm=TRUE)
  min.log = floor(log10(max.val))

  expand_limits(y=c(ymin, ceiling(max.val/10^min.log)*10^min.log))
}

p = mtcars %>% ggplot(aes(x=mpg, y = hp)) +
  geom_point()

p + expandy(mtcars$hp)

p + expandy(mtcars$hp, 0)
Run Code Online (Sandbox Code Playgroud)

或者,为使操作更简单,可以设置函数,以便直接从图中收集y范围数据:

library(gridExtra)

expandy = function(plot, ymin=0) {

  max.y = max(layer_data(plot)$y, na.rm=TRUE)
  min.log = floor(log10(max.y))

  expand_limits(y=c(ymin, ceiling(max.y/10^min.log)*10^min.log))
}

p = mtcars %>% ggplot(aes(x=mpg, y = hp)) +
  geom_point()

grid.arrange(p, p + expandy(p), ncol=2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

p = iris %>% ggplot(aes(x=Sepal.Width, y=Petal.Width)) +
  geom_point()

grid.arrange(p, p + expandy(p), ncol=2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明