[英]What exactly does stat=identity mean in geom_bar ggplot?
[英]Plot hline at mean with geom_bar and stat=“identity”
我有一個條形圖,其中確切的條形高度在數據框中。
df <- data.frame(x=LETTERS[1:6], y=c(1:6, 1:6 + 1), g=rep(x = c("a", "b"), each=6))
ggplot(df, aes(x=x, y=y, fill=g, group=g)) +
geom_bar(stat="identity", position="dodge")
現在,我要添加兩個 hline,以顯示每組所有條形的平均值。 我所擁有的
ggplot(df, aes(x=x, y=y, fill=g, group=g)) +
geom_bar(stat="identity", position="dodge") +
stat_summary(fun.y=mean, aes(yintercept=..y.., group=g), geom="hline")
是
因為我也想對任意數量的組執行此操作,所以我只希望使用ggplot解決方案。
我想避免這樣的解決方案,因為它不完全依賴傳遞給ggplot的數據集,具有冗余代碼並且在組數方面不靈活:
ggplot(df, aes(x=x, y=y, fill=g, group=g)) +
geom_bar(stat="identity", position="dodge") +
geom_hline(yintercept=mean(df$y[df$g=="a"]), col="red") +
geom_hline(yintercept=mean(df$y[df$g=="b"]), col="green")
提前致謝!
編輯:
如果我正確理解您的問題,那么您的第一種方法就差不多了:
ggplot(df, aes(x = x, y = y, fill = g, group = g)) +
geom_col(position="dodge") + # geom_col is equivalent to geom_bar(stat = "identity")
stat_summary(fun.y = mean, aes(x = 1, yintercept = ..y.., group = g), geom = "hline")
根據stat_summary
的幫助文件:
stat_summary
對唯一的x進行操作; ...
在這種情況下, stat_summary
繼承了x = x
和group = g
的頂級美學映射,因此它將為g的每個值計算每個x的平均y值,從而導致許多水平線。 在stat_summary
的映射中添加x = 1
會覆蓋x = x
(同時保留group = g
),因此對於g的每個值,我們得到一個均值y值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.