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