首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >fun.min、fun.max和stat_summary是如何工作的?

fun.min、fun.max和stat_summary是如何工作的?
EN

Stack Overflow用户
提问于 2022-07-20 04:25:30
回答 2查看 165关注 0票数 0

对不起,我知道这个问题实际上已经被问到here了,但是我仍然不明白这些摘要函数( fun.min、fun.max、fun)是如何真正工作的。在手册示例中,这些函数通常在以下上下文中定义为

代码语言:javascript
运行
复制
 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函数,因为它不是已经定义为在向量中找到最小值,然后返回一个数字吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-20 07:14:33

让我们从一个简单的例子开始:

代码语言:javascript
运行
复制
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变量的每个值或类别(或者在更一般的情况下,xgroup美学之间的交互),它为映射在y aes上的变量计算funfun.minfun.max定义的三个统计数据。然后,fun计算的值映射到y上,fun.min值映射到ymin上,fun.max值映射到ymax上。

这个步骤的结果可以通过ggplot2::layer_data显示。对于基本示例

代码语言:javascript
运行
复制
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还添加了许多其他内容,基本上与

代码语言:javascript
运行
复制
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.minfun.max来显示置信区间或显示四分位数范围:

代码语言:javascript
运行
复制
base + stat_summary(
    fun.min = ~quantile(.x, probs = .25),
    fun.max = ~quantile(.x, probs = .75),
    fun = median,
    color = "red"
  )

票数 2
EN

Stack Overflow用户

发布于 2022-07-20 07:14:43

fun.min/fun.max/fun是做什么的?

这些函数操作ggplot输出的不同部分。它们获取一个值的向量,并生成一个值,然后将其放置在数字上。

  • fun.min为区间的下界分配一个值。通常,这是value.
  • fun.max为区间的上界分配值的最小值。通常,这是value.
  • fun的最大值,它将一个值赋值给通常位于区间中间的点。通常这是y值的平均值.

通过观察下面的图是如何随传递给这些参数的函数的不同而变化的,您可以看到这种行为。它有助于考虑这些控制间隔-它可以代表任何你想要的-而不是显示的最大,最小和平均。例如,与其用间隔显示最小值、最大值和平均值,还可以通过传递估计每个值的函数来显示计算向量的1、2和3阶值的间隔。下面,我将演示传递不同的函数。

具有“典型”函数的绘图:minmaxmean

代码语言:javascript
运行
复制
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的函数

代码语言:javascript
运行
复制
d + stat_summary(fun = mean, fun.min = function(x){1}, fun.max = max, colour = "red")

传递给fun.min一个从c(-20, 0, 20)返回随机值的函数

代码语言:javascript
运行
复制
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的函数

看点移动与第一个情节相比!

代码语言:javascript
运行
复制
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":典型函数

代码语言:javascript
运行
复制
d + stat_summary(fun = mean, fun.min = min, fun.max = max, colour = "red", geom = "line")

geom = "line":传递fun.min一个返回5的函数

代码语言:javascript
运行
复制
d + stat_summary(fun = mean, fun.min = function(x){5}, fun.max = max, colour = "red", geom = "line")

geom = "line":传递fun一个返回5的函数

代码语言:javascript
运行
复制
d + stat_summary(fun = function(x){5}, fun.min = min, fun.max = max, colour = "red", geom = "line")

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73045987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档