【发布时间】:2022-10-21 17:22:55
【问题描述】:
我想绘制顶部观察次数的箱线图。问题在于,根据信息和异常值,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
这个想法是至少增加+1到具有最高y轴值的图的最大值(在上面解释的情况下,这将是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)))
首先十分感谢
【问题讨论】:
-
limits参数接受一个函数,因此您可以执行scale_y_continuous(limits = function(x){c(min(x), max(x)})。请注意,作为x提供的输入是数据的自然限制,因此此特定函数不会改变任何内容。 -
是的,就您而言,您可能正在寻找类似
p + scale_y_continuous(limits = ~ c(0, max(.x) + 0.4))的东西。 -
非常感谢您的回答!这正是我需要的! @caldwellst
(.x)做什么?是不是就像@teunbrand 编写的函数的简化版本? -
是的,这是
tidyverse用于匿名函数的lambda 格式,而不是function(x),它基本上代表function(.x)。如果使用 R >= 4.1,您还可以使用\(x)作为function(x)的简写 -
哇,非常感谢您的信息和帮助! @caldwellst