簡體   English   中英

在 geom_bar w 上繪制每組均值

[英]Plot per-group means over geom_bar w

我有一個包含三列的數據框:一個因子(在這里代表書中的一章)、一個數字 ID(代表句子在書中出現的位置)和一個值(代表書中的單詞數)。 它看起來像這樣:

sentence.length
# A tibble: 5,368 x 3
   Chapter    ID Length
   <fct>   <dbl>  <dbl>
 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
# ... with 5,358 more rows

我有一個非常接近我想要的情節。

ggplot(data,aes(x=ID,y=Length,fill=Chapter)) +
  geom_bar(stat='identity') 

一個 ggplot 圖

我想補充的是,在每個組上,是一條代表該組平均值的水平線。

這段代碼,從另一個問題修改,讓我接近

  stat_summary(fun.y = mean, aes(x = 1, yintercept = ..y.., group = Chapter), geom = "hline")

但是這些線延伸到整個地塊; 有沒有辦法只在繪圖的相關部分繪制平均線? 我懷疑這里的問題是我的數據恰好被排序,使得一個group對應於情節的連續部分; 但情節本身的美學沒有任何要求。

更接近的方法是不使用stat_summary而是使用geom_smooth geom_smooth(method='lm',se=FALSE)讓我非常接近。 但不是線性回歸,我真的只想要組的平均值(這里是每章句子長度的平均值)。

使用 geom_smooth 的 ggplot

有沒有更好/更簡單的方法?

我不確定這是否是最簡單的方法,但它有效:

在此處輸入圖片說明

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
  )

使用%.>%管道,您可以向下傳遞df以在geom_segment函數中geom_segment進行匯總。 您可以在%.>%之后訪問df . .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM