[英]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')
我想補充的是,在每個組上,是一條代表該組平均值的水平線。
這段代碼,從另一個問題修改,讓我接近
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)
讓我非常接近。 但不是線性回歸,我真的只想要組的平均值(這里是每章句子長度的平均值)。
有沒有更好/更簡單的方法?
我不確定這是否是最簡單的方法,但它有效:
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.