R 如何扩展GGY轴限制以包括最大值
通常在打印中,Y轴值标签在打印的最大值以下被截断R 如何扩展GGY轴限制以包括最大值,r,ggplot2,R,Ggplot2,通常在打印中,Y轴值标签在打印的最大值以下被截断 For example: library(tidyverse) mtcars %>% ggplot(aes(x=mpg, y = hp))+geom_point() 我知道scale_y___continuous,但我想不出一个聪明的方法来做到这一点。也许我只是想得太多了。我不想搞乱自动生成的“智能”中断 我可能会尝试手动执行此操作 mtcars %>% ggplot(aes(x=mpg, y=hp, color=as.fa
For example:
library(tidyverse)
mtcars %>% ggplot(aes(x=mpg, y = hp))+geom_point()
我知道scale_y___continuous,但我想不出一个聪明的方法来做到这一点。也许我只是想得太多了。我不想搞乱自动生成的“智能”中断
我可能会尝试手动执行此操作
mtcars %>% ggplot(aes(x=mpg, y=hp, color=as.factor(carb)))+geom_point() + scale_y_continuous(limits = c(0,375))
但这并不像我上面提到的那样有效,因为“聪明的休息”。我是否需要将默认的中断间隔再延长一次,这样在这种情况下,它将是400?当然,我希望这对于我使用的任何数据集都是灵活的 您可以使用
扩展限制()
增加最大y轴值。您还可以确保最大y轴值向上舍入到数据刻度上的下一个最高值,例如,下一个最高的十位数值、下一个最高的百位数值等,具体取决于数据中的最高值是否在十位数、百位数等范围内
例如,下面的函数查找最大y值的基数为10的对数,并将其向下舍入。这为我们提供了最大y值的基数10(例如,十、百、千等)。然后它将最大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)
选择断开y轴的步骤,可以使用
天花板()
功能
library(gridExtra)
p1 <- mtcars %>% ggplot(aes(x=mpg, y = hp)) + geom_point()
p2 <- p1 +
scale_y_continuous(
limits = c(0, ceiling(max(mtcars$hp)/50)*50),
breaks = seq(0, ceiling(max(mtcars$hp)/50)*50, 50)
)
p3 <- p1 + scale_y_continuous(
limits = c(0, ceiling(max(mtcars$hp)/100)*100),
breaks = seq(0, ceiling(max(mtcars$hp)/100)*100, 100)
)
grid.arrange(p1, p2, p3, ncol=3)
库(gridExtra)
p1%ggplot(aes(x=mpg,y=hp))+geom_点()
p2这里有一个允许任何类型的数字刻度的解决方案:
expandy <- function(y, base, v_min = NULL) {
max.val <- max(y, na.rm = TRUE)
expand_limits(
y = c(
v_min,
base * (max.val %/% base + as.logical(max.val %% base))
)
)
}
expandy哑巴问题,但我如何将其添加到主题中?我相信我可以仔细看一下,但是想知道quick Solution强大的功能是否应该集成到软件包中。
expandy <- function(y, base, v_min = NULL) {
max.val <- max(y, na.rm = TRUE)
expand_limits(
y = c(
v_min,
base * (max.val %/% base + as.logical(max.val %% base))
)
)
}