【问题标题】:Passing extra parameters into the stat function将额外参数传递给 stat 函数
【发布时间】:2021-02-27 05:52:15
【问题描述】:

我正在学习 R 和 ggplot2。根据说明,geom 和 stat 通常可以互换,因为 geom 有一个默认的 stat,而 stat 有一个默认的 geom。

我的练习是通过 3 种方式创建绘图:使用 stat、手动和使用 geom_pointrange。我被困在第三部分:

library("tidyverse")

# With stat_summary
ggplot(data = diamonds) +
  stat_summary(
    mapping = aes(x = cut, y = depth),
    fun.min = min,
    fun.max = max,
    fun = median
  )

# Manually
diamonds_summary = diamonds %>% 
  group_by(cut) %>% 
  summarize(p = median(depth), lower = min(depth), upper = max(depth))

ggplot(diamonds_summary) +
  geom_pointrange(
    mapping = aes(x = cut, y = p, ymin = lower, ymax = upper)
  )

# With geom_pointrange and stat
ggplot(data = diamonds) +
  geom_pointrange(
    mapping = aes(x = cut, y = median(depth)),
    stat = "summary"
  )
# Warning: No summary function supplied, defaulting to `mean_se()`

如何将两个汇总函数(最小值和最大值)传递给stat 参数标识的函数?

所有三种解决方案都应产生以下输出:

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    当你 sepcify stat="summary" 时,它仍然需要知道如何总结你的价值观。默认是使用带有标准误差的平均值。但是您想要具有最小值和最大值的中位数。您可以编写自己的摘要函数

    median_min_max <- function(x) {
      data.frame(y=median(x), ymin=min(x), ymax=max(x))
    }
    

    然后通过fun.data= 参数将其传递给您的点范围层。

    ggplot(data = diamonds) +
      geom_pointrange(
        mapping = aes(x = cut, y = depth),
        stat = "summary", fun.data = median_min_max
      )
    

    这将为您提供一个与您从汇总数据创建的图相匹配的图。

    ggplot 确实有一个 median_hilow 汇总函数,但它使用了 Hmisc::smedian.hilow 函数,该函数使用基于置信区间而不是最小/最大值的分位数。

    【讨论】:

    • 正是我所需要的。谢谢!
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 2017-04-09
    • 2018-10-07
    相关资源
    最近更新 更多