对不起,我知道这个问题实际上已经被问到here了,但是我仍然不明白这些摘要函数( fun.min、fun.max、fun)是如何真正工作的。在手册示例中,这些函数通常在以下上下文中定义为
ggplot(data = <DATA>) +
stat_summary(
mapping = aes(<MAPPINGS>),
fun.min = min,
fun.max = max,
fun = median
)据我所知,fun.min = min将摘要函数定义为min基R函数,但是会发生什么呢?fun.min如何知道如何找到映射参数的最小值?退一步,为什么fun.min必须被定义为min基R函数,因为它不是已经定义为在向量中找到最小值,然后返回一个数字吗?
发布于 2022-07-20 07:14:33
让我们从一个简单的例子开始:
library(ggplot2)
base <- ggplot(data = mtcars, mapping = aes(cyl, mpg)) +
geom_point()
base + stat_summary(
fun.min = min,
fun.max = max,
fun = median,
color = "red"
)

现在请回答你们的问题:
据我所知,
fun.min = min将摘要函数定义为min基R函数,但是会发生什么呢?fun.min如何知道如何找到映射参数的最小值?
在stat_summary下,它聚合通过data参数传递的数据集,即对于x变量的每个值或类别(或者在更一般的情况下,x和group美学之间的交互),它为映射在y aes上的变量计算fun、fun.min和fun.max定义的三个统计数据。然后,fun计算的值映射到y上,fun.min值映射到ymin上,fun.max值映射到ymax上。
这个步骤的结果可以通过ggplot2::layer_data显示。对于基本示例
layer_data(last_plot(), 2) # The 2 means we want the data for the second layer. geom_point = first layer, stat_summary = second layer
#> x group y ymin ymax PANEL flipped_aes colour size linetype shape fill
#> 1 4 -1 26.0 21.4 33.9 1 FALSE red 0.5 1 19 NA
#> 2 6 -1 19.7 17.8 21.4 1 FALSE red 0.5 1 19 NA
#> 3 8 -1 15.2 10.4 19.2 1 FALSE red 0.5 1 19 NA
#> alpha stroke
#> 1 NA 1
#> 2 NA 1
#> 3 NA 1此外,ggplot2还添加了许多其他内容,基本上与
library(dplyr, warn = FALSE)
mtcars |>
group_by(x = cyl) |>
summarise(y = median(mpg), ymin = min(mpg), ymax = max(mpg))
#> # A tibble: 3 × 4
#> x y ymin ymax
#> <dbl> <dbl> <dbl> <dbl>
#> 1 4 26 21.4 33.9
#> 2 6 19.7 17.8 21.4
#> 3 8 15.2 10.4 19.2后退一步,为什么
fun.min必须被定义为min基R函数,因为它不是已经定义为在向量中找到最小值,然后返回一个数字吗?
答案是否定的。fun.min不被定义为最小值或min函数。默认情况下,它是NULL (参见?stat_summary)。fun.min提供了用于计算要映射到ymin aes上的汇总统计数据的函数。如果将fun.min固定在minimum上,stat_summary就不会那么有用,例如,我们经常使用fun.min和fun.max来显示置信区间或显示四分位数范围:
base + stat_summary(
fun.min = ~quantile(.x, probs = .25),
fun.max = ~quantile(.x, probs = .75),
fun = median,
color = "red"
)

发布于 2022-07-20 07:14:43
fun.min/fun.max/fun是做什么的?
这些函数操作ggplot输出的不同部分。它们获取一个值的向量,并生成一个值,然后将其放置在数字上。
fun.min为区间的下界分配一个值。通常,这是value.fun.max为区间的上界分配值的最小值。通常,这是value.fun的最大值,它将一个值赋值给通常位于区间中间的点。通常这是y值的平均值.通过观察下面的图是如何随传递给这些参数的函数的不同而变化的,您可以看到这种行为。它有助于考虑这些控制间隔-它可以代表任何你想要的-而不是显示的最大,最小和平均。例如,与其用间隔显示最小值、最大值和平均值,还可以通过传递估计每个值的函数来显示计算向量的1、2和3阶值的间隔。下面,我将演示传递不同的函数。
具有“典型”函数的绘图:min、max、mean
set.seed(13)
library(ggplot2)
# An example ggplot
d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point()
## Default (fun.min = min)
d + stat_summary(fun = mean, fun.min = min, fun.max = max, colour = "red")

传递fun.min一个返回1的函数
d + stat_summary(fun = mean, fun.min = function(x){1}, fun.max = max, colour = "red")

传递给fun.min一个从c(-20, 0, 20)返回随机值的函数
d + stat_summary(fun = mean,
fun.min = function(x){sample(c(-20, 0, 20), size = 1, replace = T)}, fun.max = max, colour = "red")

传递fun一个返回1的函数
看点移动与第一个情节相比!
d + stat_summary(fun = function(x){1}, fun.min = min, fun.max = max, colour = "red")

它如何“知道”我们的映射?
文档指出,实际传递给这些参数的向量可能是模糊的。默认情况下,ggplot试图确定图形的方向(x和y轴上的变量是什么),然后传递y轴值。但是,您可以手动设置定向以避免产生意外的结果。
下面是对orientation参数到stat_summary的描述
层的方向。默认(NA)从美学映射自动确定方向。在这种失败的情况下,可以显式地将方向设置为"x“或"y”。有关更多细节,请参见定向部分。
替代geom类型
虽然更改参数会影响上述示例中的间隔,但可以在geom中更改stat_summary类型。我们可以增加一条线,而不是在图的顶部用3点来定义一个间隔。您将在下面看到,fun.min参数现在更改轴的比例,而不是实际行的值。然而,fun本身会影响线路的位置。
geom = "line":典型函数
d + stat_summary(fun = mean, fun.min = min, fun.max = max, colour = "red", geom = "line")

geom = "line":传递fun.min一个返回5的函数
d + stat_summary(fun = mean, fun.min = function(x){5}, fun.max = max, colour = "red", geom = "line")

geom = "line":传递fun一个返回5的函数
d + stat_summary(fun = function(x){5}, fun.min = min, fun.max = max, colour = "red", geom = "line")

https://stackoverflow.com/questions/73045987
复制相似问题