通常在绘图中,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))
但这不像我上面提到的那样工作,因为“智能休息”。无论如何,我是否可以将默认中断间隔延长到 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)
p = iris %>% ggplot(aes(x=Sepal.Width, y=Petal.Width)) +
geom_point()
grid.arrange(p, p + expandy(p), ncol=2)
关于r - 如何扩展 ggplot y 轴限制以包括最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53532217/