R: ggplot2散点范围示例

18

我目前正在阅读Hadley Wickham所写的R for Data Science。书中有以下例子:

library(tidyverse)

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

现在,问题是如何使用适当的geom_函数创建相同的图形。我查看了stat_summary的默认geom,它是pointrange

因此,我尝试了以下代码:

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

但是我没有在图上得到minmax点。

如何使用geom_pointrange获得精确的图形?


1
我也在读那本书,而且我有完全相同的问题。StackOverflow 最棒了。 - Harry Stevens
3个回答

27

geom_pointrange 不会自动计算 ymin 或 ymax 的值。你可以在仍使用 geom_pointrange 的情况下,使用 stat = "summary" 来完成这一点:

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

所以我缺少的只是最后三个参数。 - chintan s

9
我能想到的简单方法就是使用geom_line和stat_summary。
 ggplot(data = diamonds, mapping = aes(x = cut, y = depth)) +
     geom_line() +
     stat_summary(fun.y = "median", geom = "point", size = 3)

这将提供非常相似的图形。 enter image description here 如果我真的想使用geom_pointrange,我会先创建一个小数据集。
data = diamonds %>%
    group_by(cut) %>%
    summarise(min = min(depth), max = max(depth), 
        median = median(depth))

ggplot(data, aes(x = cut, y = median, ymin = min, ymax = max)) + 
    geom_linerange() + 
    geom_pointrange()

这将生成完全相同的图表。希望这能够帮到您!enter image description here

1
谢谢。第一个选项看起来不错,但问题说明应该不使用 stat_summary。您的第二个选项也不错,但它使用了后面部分教授的技术。那还有其他办法吗? - chintan s

8

我比现在的时间快三年,曾经也有同样的疑问,但是这里提供的任何解决方案都没有奏效。我最终通过以下代码实现了期望的输出(为了帮助和我一样时光穿梭的人):

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

enter image description here


感谢更新。参数在过去三年中的某个时候必须已经被重命名了。甚至没有说这已经被弃用 - ggplot2 3.3.0。 - tjebo
没问题,伙计!:D - Pedro Henrique Cardoso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接