我只想繪制一次特定集群的均值文本。
所以我遵循了情節:

但我想要的是:

復制代碼:
price_l <- rep(c('€€-€€€', '€€-€€€', '€€€€', '€€-€€€', '€€-€€€',
'€€-€€€', '€€€€', '€€-€€€', '€€€€', '€€-€€€',
'€€-€€€', '€€-€€€', '€€-€€€', '€€-€€€',
'€€-€€€', '€€-€€€', '€€-€€€', '€€-€€€', '€€€€','€', '€',
'€', '€','€€€€', '€'),100)
avg_r <- rep(c(4.5, 3.5, 4.0, 4.0, 4.0, 3.5, 4.5, 4.0, 3.0, 4.0,
3.0, 5.0, 4.5, 4.0, 3.0,
3.5, 4.5, 3.5, 3.5, 4.0, 3.0, 4.0, 4.0, 2.5, 4.5),100)
sub.df <- data.frame(price_l, avg_r)
sub.df %>%
group_by(price_l) %>%
mutate(mean = mean(avg_r)) %>%
ungroup() %>%
ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T)
geom_jitter(aes(colour = price_l))
geom_text(aes(label = sprintf("%.2f",mean)))
uj5u.com熱心網友回復:
我們可以使用stat_summary(aes(label = ..y..), geom = "text", fun = mean, color="black", size = 6, fontface = 2)
sub.df %>%
group_by(price_l) %>%
mutate(mean = mean(avg_r)) %>%
ungroup() %>%
ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T)
geom_jitter(aes(colour = price_l))
stat_summary(aes(label = ..y..), geom = "text", fun = mean, color="black", size = 6, fontface = 2)

uj5u.com熱心網友回復:
您可以y在geom_text
sub.df %>%
group_by(price_l) %>%
mutate(mean = mean(avg_r)) %>%
ungroup() %>%
ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T)
geom_jitter(aes(colour = price_l))
geom_text(aes(y = 3.5, label = sprintf("%.2f",mean)),
check_overlap = TRUE, size = 6, fontface = 2)

或者,正如 r2evans 建議的那樣:
sub.df %>%
group_by(price_l) %>%
mutate(mean = mean(avg_r)) %>%
ungroup() %>%
ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T)
geom_jitter(aes(colour = price_l))
geom_text(aes(y = mean, label = sprintf("%.2f",mean)),
check_overlap = TRUE, size = 6, fontface = 2)

uj5u.com熱心網友回復:
對于它的價值,這是一種使用stat_summary(). 與之前的方法相比,這具有以下優勢:(1)無需預先通過group_by()... mutate()... 函式進行匯總,以及(2)避免使用geom_text().
單獨使用建議的答案geom_text()對結果很好,但您會注意到這將導致過度繪圖。原因是geom_text()像所有其他幾何圖形一樣,將為資料集中的每個觀察結果在繪圖上繪制“一個東西”。%>%初始呼叫上方的管道 ( ) 命令產生的資料幀ggplot()應該有 2500 個觀察值。這意味著如果您要求geom_text()在特定位置創建標簽/文本,它會這樣做...... 2500 次。
為避免這種情況,您應該執行以下兩項操作之一:
創建一個單獨的聚合資料資料框,其中僅包含 3 個觀察值(此處為三段文本)并使用
geom_text(data = that_new_dataframe...), 或使用
stat_summary()并讓它根據原始資料集為您進行所有匯總,sub.df.
對于該stat_summary()方法,您可以創建一個用戶函式來回傳 alabel和y值(滿足所需的美學,然后通過引數geom_text()將其應用于您的資料集:stat_summary()fun.data=
my_fun <- function(x){
return(data.frame(y=mean(x), label=sprintf("%.2f", mean(x))))
}
sub.df %>%
ggplot(sub.df, mapping=aes(price_l, avg_r), na.rm=T)
geom_jitter(aes(colour = price_l))
stat_summary(
geom="text", fun.data="my_fun", size=8,
aes(group=price_l)
)

注意:發布此訊息后,我意識到它與@TarJae 的答案相似......但由于進一步的解釋而將其保留在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427646.html
