簡體   English   中英

將組平均線添加到 geom_bar 圖並包括在圖例中

[英]Adding group mean lines to geom_bar plot and including in legend

我希望能夠創建一個條形圖,該圖還顯示了每個組中條形的平均值。 AND 顯示圖例中的平均條。

我已經能夠使用下面的代碼獲得這個圖形條形圖,這很好,但我希望能夠看到圖例中的平均線。

在此處輸入圖片說明

##The data to be graphed is the proportion of persons receiving a treatment
## (num=numerator) in each population (denom=demoninator). The population is 
##grouped by two age groups and (Age) and further divided by a categorical 
##variable V1

###SET UP DATAFRAME###
require(ggplot2)    
df <- data.frame(V1 = c(rep(c("S1","S2","S3","S4","S5"),2)), 
               Age= c(rep(70,5),rep(80,5)), 
               num=c(5280,6570,5307,4894,4119,3377,4244,2999,2971,2322),
               denom=c(9984,12600,9425,8206,7227,7290,8808,6386,6206,5227))

df$prop<-df$num/df$denom*100

PopMean<-sum(df$num)/sum(df$denom)*100

df70<-df[df$Age==70,]
group70mean<-sum(df70$num)/sum(df70$denom)*100

df80<-df[df$Age==80,]
group80mean<-sum(df80$num)/sum(df80$denom)*100

df$PopMean<-c(rep(PopMean,10))
df$groupmeans<-c(rep(group70mean,5),rep(group80mean,5))

我希望情節看起來像這樣,但也希望圖例中的線條被標記為“組均值”或類似的。

 #basic plot
 P<-ggplot(df, aes(x=factor(Age), y=prop, fill=factor(V1))) +
   geom_bar(position=position_dodge(), colour='black',stat="identity")    

 P
####add mean lines    
P+geom_errorbar(aes(y=df$groupmeans, ymax=df$groupmeans, 
ymin=df$groupmeans), col="red", lwd=2)

添加 show.legend=TRUE 會將誤差線疊加到因子圖例上,而不是單獨添加。 如果有一種在圖例中單獨顯示 geom_errorbar 的方法,這可能是最簡單的解決方案。

我還用 geom_line 嘗試了各種方法 下面的語法為總體平均值生成一條線,但從每個點的中心開始運行,而不是覆蓋條的寬度 這為總體平均值生成一條線,它確實產生了一個圖例但是一個顯示一條顏色而不是一條線。

P+geom_line(aes(y=df$PopMean, group=df$PopMean, color=df$PopMean),lwd=1)

如果我嘗試為組做線條意味着線條不可見(因為它們只是單點)。

P+geom_line(aes(y=df$groupmeans, group=df$groupmeans, color=df$groupmeans))

我也試圖用刻面圖來解決這個問題,盡管這需要我假裝我的分類變量是數字來讓它工作。

###set up new df
df2<-df
df2$V1<-c(rep(c(1,2,3,4,5),2))

P<-ggplot(df2, aes(x=factor(V1), y=prop, fill=factor(V1))) +
  geom_bar(position=position_dodge(),     
  colour='black',stat="identity",width=1)

P+facet_grid(.~factor(df2$Age))

P+facet_grid(.~factor(df2$Age))+geom_line(aes(y=df$groupmeans, 
group=df$groupmeans, color=df$groupmeans))

面圖

在此處輸入圖片說明

這允許我使用 geom_line 顯示平均線,因此確實會出現圖例(盡管它看起來不正確,顯示的是顏色漸變而不是彩色線!)。 但是,線條仍然沒有走完條形的整個寬度。 此外,我的 x 軸現在需要重新標記以顯示 S1、S2 等而不是數字 1,2,3

總而言之 - 有沒有辦法在圖例中單獨顯示誤差線?

如果沒有,那么,如果我使用分面,我該如何更正圖例外觀並使用我的分類變量重新標記軸,並且是否可以使線達到圖的整個寬度?

或者是否有我缺少的替代解決方案!?

謝謝

要獲取geom_error的圖例,您需要在aes傳遞colour參數。 由於您只需要一個類別(此處為紅色),因此我首先創建了一個虛擬變量

df$mean <- "Mean"
ggplot(df, aes(x=factor(Age), y=prop, fill=factor(V1))) +
  geom_bar(position=position_dodge(), colour='black',stat="identity") +
  geom_errorbar(aes (ymax=groupmeans, 
                ymin=groupmeans, colour=mean), lwd=2) +
  scale_colour_manual(name="",values = "#ff0000")

在此處輸入圖片說明

暫無
暫無

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

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