【问题标题】:Display a summary line per facet rather than overall显示每个方面而不是整体的摘要行
【发布时间】:2018-06-22 03:14:02
【问题描述】:

我正在尝试做类似于this question 的事情,但希望在一个块中完成,而不是单独缓存值。

我正在创建一个类似这样的图表:

library(tidyverse)

mtcars %>%
  rownames_to_column("carmodel") %>%
  mutate(brand = substr(carmodel, 1, 4)) %>%
  group_by(brand, cyl) %>%
  summarize(avgmpg = mean(mpg)) %>%
  ggplot(aes(x=brand, y = avgmpg)) +
  geom_point() +
  facet_grid(cyl~., scales = "free_y") +
  coord_flip()

按其中一个字段分组,然后在结果上绘制计算出的summarize() 值,使用构面将相似的观察结果放在一起。我想做的是在每个方面添加一条线,显示该方面的观察平均值。我尝试将geom_hline(aes(yintercept = mean(avgmpg))) 添加到定义中,但它返回整个数据集的平均值,而不是方面的观察结果:

我所追求的更像是这样。 (这里的线条是用图像编辑器绘制的。)

这可能吗?

【问题讨论】:

标签: r ggplot2


【解决方案1】:

因为你说你想在一个块中完成,注意在.的众多用途中,你可以在geoms中使用它来引用ggplot()的原始数据参数。所以在这里你可以做一个额外的总结来获得geom_vline的值。我也只是颠倒了geom_point 中的美学,而不是使用coord_flip

library(tidyverse)

mtcars %>%
  rownames_to_column("carmodel") %>%
  mutate(brand = substr(carmodel, 1, 4)) %>%
  group_by(brand, cyl) %>%
  summarize(avgmpg = mean(mpg)) %>%
  ggplot(aes(y=brand, x = avgmpg)) +
  geom_point() +
  geom_vline(
    data = . %>%
      group_by(cyl) %>%
      summarise(line = mean(avgmpg)),
    mapping = aes(xintercept = line)
    ) +
  facet_grid(cyl~., scales = "free_y")

reprex package (v0.2.0) 于 2018 年 6 月 21 日创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多