【问题标题】:Plot min, max, median for each x value in geom_pointrange绘制 geom_pointrange 中每个 x 值的最小值、最大值和中值
【发布时间】:2017-06-22 02:32:18
【问题描述】:

所以我知道解决这个问题的更好方法是使用 stat_summary() 函数,但这是为了解决 Hadley 的 R for Data Science 书中提出的一个问题,主要是出于我自己的好奇心。它询问如何将使用stat_summary() 制作的示例图的代码转换为与geom_pointrange() 制作相同的图。例子是:

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

情节应该是这样的:


(来源:had.co.nz

我尝试过使用以下代码:

ggplot(data = diamonds, mapping = aes(x = cut, y = depth)) +
  geom_pointrange(mapping = aes(ymin = min(depth), ymax = max(depth)))

但是,这会绘制每个切割类别中所有深度值的最小值和最大值(即,所有 yminymax 都相同)。我也尝试传递一个最小值和最大值的向量,但 ymin 据我所知只接受单个值。这可能很简单,但我认为人们大多使用 stat_summary(),因为我通过 Google 发现的 geom_pointrange() 使用示例很少。

【问题讨论】:

标签: r plot ggplot2


【解决方案1】:

我认为你需要在绘图功能之外做总结才能使用geom_pointrange

library(dplyr)
library(ggplot2)
summary_diamonds <- diamonds %>% 
    group_by(cut) %>% 
    summarise(lower = min(depth), upper = max(depth), p = median(depth))

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

【讨论】:

  • 谢谢,效果很好!比较两者,stat_summary 似乎更有效率。
【解决方案2】:

geom_pointrange 包含一个stat 参数,因此您可以内联https://stackoverflow.com/a/41865061 进行统计转换

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2020-02-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2015-01-09
    • 2015-07-04
    相关资源
    最近更新 更多