Adicionando linhas médias de grupo ao gráfico geom_bar e incluindo na legenda

Quero poder criar um gráfico de barras que mostre também o valor médio das barras em cada grupo. AND mostra a barra média na legenda.

Consegui obter este gráfico Gráfico de barras com meios usando o código abaixo, o que é bom, mas gostaria de poder ver as linhas médias na legenda.

##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))

Eu quero que o enredo fique assim, mas também quero que as linhas da legenda sejam rotuladas como 'média do grupo' ou similar.

 #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)

Adicionar show.legend = TRUE sobrepõe as barras de erro na legenda do fator, em vez de separadamente. Se houver uma maneira de mostrar geom_errorbar separadamente na legenda, esta é provavelmente a solução mais simples.

Eu também tentei várias coisas com geom_line A sintaxe abaixo produz uma linha para o valor médio da população, mas é executada a partir do centro de cada ponto, em vez de cobrir a largura das barras. Isso produz uma linha para a média da população e produz uma legenda. mas um que mostra uma barra de cores em vez de uma linha.

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

Se eu tentar fazer linhas por grupo significa que as linhas não são visíveis (porque são apenas pontos únicos).

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

Também tentei contornar isso com o gráfico de facetas, embora isso exija que eu finja que minha variável categórica é numérica para que ela funcione.

###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))

Facetplot

Isso me permite mostrar as linhas médias, usando geom_line, para que uma legenda apareça (embora não pareça correta, mostrando um gradiente de cor em vez de linhas coloridas!). No entanto, as linhas ainda não atingem a largura total das barras. Agora meu eixo x agora precisa ser rotulado novamente para mostrar S1, S2 etc., em vez de numérico 1,2,3

Para resumir - existe uma maneira de mostrar as linhas da barra de erro separadamente na legenda?

Se não, então, se eu usar faceta, como corrijo a aparência da legenda e re-identificamos os eixos com minhas variáveis categóricas e é possível fazer com que a linha percorra toda a largura do gráfico?

Ou existe uma solução alternativa que estou faltando !?

obrigado

questionAnswers(1)

yourAnswerToTheQuestion