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

标签 r ggplot2

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

For example:

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

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

我可能会尝试手动解决这个问题......
  mtcars  %>% ggplot(aes(x=mpg, y=hp, color=as.factor(carb)))+geom_point()  + scale_y_continuous(limits = c(0,375))

enter image description here

但这不像我上面提到的那样工作,因为“智能休息”。无论如何,我是否可以将默认中断间隔延长到 1 个以上,以便在这种情况下为 400?当然,我希望这对于我正在使用的任何数据集都是灵活的。

最佳答案

您可以使用 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)

或者,为了让事情更简单,您可以设置函数,以便直接从图中收集 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)

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

grid.arrange(p, p + expandy(p), ncol=2)

enter image description here

关于r - 如何扩展 ggplot y 轴限制以包括最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53532217/

相关文章:

r - 背景填充(通过 geom_rect)在 scale_y_log10 转换后被移除

r - 在 r 中使用 max() 函数返回向量中的值及其名称?

performance - R 中的向量化矩阵运算

Rmarkdown : different output folders, 共享库

在R中读取Stata 14文件

r - 使用 RJAGS 约束贝叶斯线性回归中的参数

R ggplot2 : add text to geom_tiles

r - 李克特风格图按因子内的水平划分

r - 使用 rmarkdown 渲染时更改 R ggplot gganimate 的速度

r - ggplot : plot mean values instead of counts