Добавление средних групповых линий на график geom_bar и включение в легенду

Я хочу иметь возможность создавать гистограмму, которая показывает также показывает среднее значение для баров в каждой группе. И показывает средний бар в легенде.

Я смог получить эту гистограмму с помощью средства, используя приведенный ниже код, и это хорошо, но я хотел бы видеть средние линии в легенде.

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

Facetplot

Это позволяет мне показывать средние линии, используя geom_line, поэтому легенда появляется (хотя она выглядит неправильно, показывая цветовой градиент, а не цветные линии!). Тем не менее, линии по-прежнему не соответствуют всей ширине полос. Также моя ось X теперь нуждается в перемаркировке, чтобы показать S1, S2 и т. Д., А не цифру 1,2,3

Подводя итог - есть ли способ показать строки погрешности отдельно в легенде?

Если нет, то, если я использую фасетирование, как я могу скорректировать внешний вид легенды и относительные оси с моими категориальными переменными, и возможно ли заставить линию пройти всю ширину графика?

Или есть альтернативное решение, которое мне не хватает !?

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос