如何根据 R 中的绘图更改 scale_y_continuous 的限制?
How to change the limits from scale_y_continuous depending on the plot in R?
我想绘制箱线图,并在顶部显示观察数量。问题在于,根据信息和异常值,y 轴会发生变化。因此,我想自动更改 scale_y_continuous
的限制。可以这样做吗?
这是一个可重现的例子:
library(dplyr)
library(ggplot2)
myFreqs <- mtcars %>%
group_by(cyl, am) %>%
summarise(Freq = n())
myFreqs
p <- ggplot(mtcars, aes(factor(cyl), drat, fill=factor(am))) +
stat_boxplot(geom = "errorbar") +
geom_boxplot() +
stat_summary(geom = 'text', label = paste("n = ", myFreqs$Freq), fun = max, position = position_dodge(width = 0.77), vjust=-1)
p
想法是将 y 轴值最高的图的最大值至少增加 +1(在上面解释的情况下,它将是 n=8 的第二个箱线图)
我试过用 scale_y_continuous
改变 y 轴,像这样:
p <- p + scale_y_continuous(limits = c(0, 5.3))
p
但是,我不想自己设置限制,我想根据自己的绘图找到一种修改限制的方法。 (因为...如果信息发生变化怎么办?)。
有没有办法做这样的事情?使用 min
和 max
--> scale_y_continuous(limits = c(min(x), max(x)))
非常感谢
感谢@teunbrand 和@caldwellst,我得到了我需要的解决方案。
有两种完美的解决方案:
1-
p + scale_y_continuous(limits = function(x){
c(min(x), (max(x)+0.1))
})
p
2-
library(tidyverse)
p + scale_y_continuous(limits = ~ c(min(.x), max(.x) + 0.1))
我想绘制箱线图,并在顶部显示观察数量。问题在于,根据信息和异常值,y 轴会发生变化。因此,我想自动更改 scale_y_continuous
的限制。可以这样做吗?
这是一个可重现的例子:
library(dplyr)
library(ggplot2)
myFreqs <- mtcars %>%
group_by(cyl, am) %>%
summarise(Freq = n())
myFreqs
p <- ggplot(mtcars, aes(factor(cyl), drat, fill=factor(am))) +
stat_boxplot(geom = "errorbar") +
geom_boxplot() +
stat_summary(geom = 'text', label = paste("n = ", myFreqs$Freq), fun = max, position = position_dodge(width = 0.77), vjust=-1)
p
想法是将 y 轴值最高的图的最大值至少增加 +1(在上面解释的情况下,它将是 n=8 的第二个箱线图)
我试过用 scale_y_continuous
改变 y 轴,像这样:
p <- p + scale_y_continuous(limits = c(0, 5.3))
p
但是,我不想自己设置限制,我想根据自己的绘图找到一种修改限制的方法。 (因为...如果信息发生变化怎么办?)。
有没有办法做这样的事情?使用 min
和 max
--> scale_y_continuous(limits = c(min(x), max(x)))
非常感谢
感谢@teunbrand 和@caldwellst,我得到了我需要的解决方案。
有两种完美的解决方案:
1-
p + scale_y_continuous(limits = function(x){
c(min(x), (max(x)+0.1))
})
p
2-
library(tidyverse)
p + scale_y_continuous(limits = ~ c(min(.x), max(.x) + 0.1))