r - 为什么 stat_summary 会根据变量绘制多条/单条线?

标签 r ggplot2 tidyverse

我问 this刚才的问题。在这种情况下,该解决方案有时似乎有效。这是使用 mpg 的示例数据集。

我的目标是使用 stat_summary 在每个方面的数据中位数出现的位置放置一条垂直线。 .请注意,当我在 displ 上使用链接问题中的解决方案时列,该解决方案按需要工作。但是当我在cty上使用它时列,绘制多条线。为什么是这样?

下面显示的是我的问题的代表。

library(tidyverse)

mpg %>% 
  ggplot(aes(x=displ, group=cyl))+
  geom_histogram()+
  facet_grid(~cyl)+
  stat_summary(aes(xintercept=stat(x), y=0), fun = median, geom = 'vline')
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.



mpg %>% 
  ggplot(aes(x=cty, group=cyl))+
  geom_histogram()+
  facet_grid(~cyl)+
  stat_summary(aes(xintercept=stat(x), y=0), fun = median, geom = 'vline')
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.



创建于 2020-04-01 由 reprex package (v0.3.0)

最佳答案

我们可以使用 group_by 预先计算中位数和 mutate ,我经常发现它的行为更可靠且易于理解,然后只需使用 geom_vline .无法回答 stat_summary一边,但有兴趣知道答案。

mpg %>%
  group_by(cyl) %>%
  mutate(cty_med = median(cty)) %>%
  ggplot(aes(x=cty))+
  geom_histogram()+
  facet_grid(~cyl)+
  geom_vline(aes(xintercept=cty_med))

enter image description here

如果您想对此进行概括,您可以创建一个包装函数来一起进行计算和分面。

f <- function(df, fct, var) {
  df %>%
    group_by({{fct}}) %>%
    mutate(med = median({{var}})) %>%
    ggplot(aes(x={{var}}))+
    geom_histogram() +
    facet_grid(cols = vars({{fct}})) +
    geom_vline(aes(xintercept=med))
}

f(mpg, cyl, cty)
f(mpg, cyl, displ)

关于r - 为什么 stat_summary 会根据变量绘制多条/单条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60965322/

相关文章:

r - 如何计算有多少子字符串与列表中的至少一个元素匹配,前提是它们前面或后面没有否定?

r - 制作相对生存率分析表

r - 减少ggplot2图例中的填充

r - 如何将 fitdistrplus::fitdist 摘要转换为整齐的格式?

r - 在drc包中找不到数据集 'FA'

python - 将稀疏矩阵从 Python 传输到 R

r - 如何在 ggplot2 中使坐标轴居中

r - 定义由gganimate创建的.gif的大小-更改尺寸/分辨率

r - 如何使用存储在 data.table 或 tibble 中的线性模型添加预测列?

r - 如何获得对观察运行函数的多个结果?