绘制geom_pointrange中每个x值的最小值,最大值,中位数

时间:2017-02-04 21:43:30

标签: r plot ggplot2

所以我知道更好的方法是使用stat_summary()函数,但这是为了解决哈德利R数据科学书中提出的问题主要是出于我自己的好奇心。它询问如何转换使用stat_summary()制作的示例图的代码,以使用geom_pointrange()生成相同的图。例子是:

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

情节应如下所示:

pointrange plot http://r4ds.had.co.nz/visualize_files/figure-html/unnamed-chunk-35-1.png

我尝试使用以下代码:

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

enter image description here

但是,这会在每个剪切类别(即所有yminymax' s是一样的)。我也试过传递一个mins和maxs的向量,但ymin只取我自己能说的单个值。它可能很简单,但我认为人们大多使用stat_summary(),因为我发现通过Google使用geom_pointrange()的例子非常少。

2 个答案:

答案 0 :(得分:3)

我认为你需要在plot函数之外进行摘要才能使用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))

enter image description here

答案 1 :(得分:1)

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