在geom_bar w上绘制每组平均值

在geom_bar w上绘制每组平均值,r,ggplot2,R,Ggplot2,我有一个包含三列的数据框:一个因子(这里表示一本书中的一章)、一个数字ID(表示该句子在书中出现的位置)和一个值(表示书中的字数)。它看起来像这样: 句子长度 #A tibble:5368 x 3 章节ID长度 1 1 1 294 2 1 2 19 3 1 3 77 4 1 4 57 5 1 5 18 6 1 6 18 7 1

我有一个包含三列的数据框:一个因子(这里表示一本书中的一章)、一个数字ID(表示该句子在书中出现的位置)和一个值(表示书中的字数)。它看起来像这样:

句子长度
#A tibble:5368 x 3
章节ID长度
1 1           1    294
2 1           2     19
3 1           3     77
4 1           4     57
5 1           5     18
6 1           6     18
7 1           7     27
8 1           8     56
9 1           9     32
10 1          10     25
# ... 还有5358行
我有一个情节非常接近我想要的

ggplot(数据,aes(x=ID,y=Length,fill=Chapter))+
几何图形栏(stat='identity')

我想补充的是,在每个组上,都有一条水平线,代表该组的平均值

这段代码,从另一个问题修改而来,让我很接近

统计摘要(fun.y=平均值,aes(x=1,yintercept=…y…,group=Chapter),geom=“hline”) 但这些线贯穿了整个地块;有没有办法只在绘图的相关部分绘制平均线?我怀疑这里的问题是,我的数据的顺序恰好是
对应于绘图的连续部分;但在情节本身的美学中,没有任何东西需要这样做

更接近的方法不是使用
stat_summary
,而是使用
geom_smooth
geom_smooth(method='lm',se=FALSE)
让我非常接近。但不是线性回归,我真的只想要组的平均值(这里是每章句子长度的平均值)


有更好/更简单的方法吗?

我不确定这是否是最简单的方法,但它确实有效:


使用
%.>%
管道,您可以向下传递
df
,在
geom_段
功能中对其进行总结。您可以通过

%之后访问
df
。>%
这里的geom_段解决方案:可能就是您正在寻找的Hanks@emily kothe;我没看到,geom_段是关键!下面的解决方案将它与wrapr的工具相结合,使其更易于阅读。非常感谢!即使它不是最简单的,它肯定是清楚的,表达得很好,并且避免了我所陷入的用手计算每一个平均值的荒谬。
library(tidyverse)
library(wrapr)

df %.>%
  ggplot(data = ., aes(
    x = ID,
    y = Length,
    fill = Chapter
  )) +
  geom_col() +
  geom_segment(data = group_by(., Chapter) %>%
    summarise(
      mean_len = mean(Length),
      min_id = min(ID),
      max_id = max(ID)
    ),
    aes(
      x = min_id,
      xend = max_id,
      y = mean_len,
      yend = mean_len
    ),
    color = 'steelblue',
    size = 1.2
  )