2017-01-10 1 views
1

Ich möchte in der Lage sein, ein Balkendiagramm zu erstellen, das auch den Mittelwert für Balken in jeder Gruppe zeigt. UND zeigt den mittleren Balken in der Legende.Hinzufügen von Gruppenmittellinien zu geom_bar plot und einschließlich in der Legende

Ich habe dieses Diagramm Balkendiagramm mit Mitteln mit dem Code unten erhalten, was in Ordnung ist, aber ich möchte in der Lage sein, die mittleren Linien in der Legende zu sehen.

enter image description here

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

Ich mag die Handlung so aussehen, aber die Linien in der Legende soll auch als ‚Mittel der Gruppe‘ oder ähnlich gekennzeichnet werden.

Hinzufügen show.legend = TRUE überlagert die Fehlerbalken der Faktor-Legende und nicht separat. Wenn es möglich ist, geom_errorbar separat in der Legende anzuzeigen, ist dies wahrscheinlich die einfachste Lösung.

ich auch verschiedene Dinge mit geom_line Die Syntax unten erzeugt eine Linie für den Mittelwert der Wert versucht, aber von der Mitte jeder Punkt laufen, anstatt bedeckt die Breite der Stäbe Dies ist für die Bevölkerung eine Linie erzeugt bedeuten und es erzeugt eine Legende, aber eine, die einen Farbbalken statt einer Linie zeigt.

Wenn ich versuche, Linien für Gruppe zu tun, bedeutet dies, dass die Linien nicht sichtbar sind (weil sie nur einzelne Punkte sind).

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

Ich habe auch versucht, diese Runde mit Facette Grundstück zu bekommen, obwohl mich das erfordert meine kategorische Variable numerisch ist, so zu tun, um es an die Arbeit.

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

enter image description here

Dies ermöglicht es mir, die Mittellinien zu zeigen, geom_line verwenden, so eine Legende angezeigt wird (obwohl es nicht gut aussieht, einen Farbverlauf zeigt, anstatt farbig Linien!). Die Linien gehen jedoch immer noch nicht über die volle Breite der Balken. Auch meine x-Achse muss jetzt neu nummeriert werden, um S1, S2 usw. anstatt numerisch zu zeigen 1,2,3

Zusammenfassend - gibt es eine Möglichkeit, Fehlerbalkenlinien getrennt in der Legende zu zeigen?

Wenn nicht, dann, wenn ich Facettierung verwende, wie korrigiere ich das Aussehen der Legende und Achsen umbenennen mit meinen kategorialen Variablen und ist es möglich, die Linie die volle Breite des Diagramms gehen zu bekommen?

Oder gibt es eine alternative Lösung, die ich vermisse !?

Dank

+0

mit '$' 'innerhalb aes' nicht benötigt wird. Sie müssen nur Spaltennamen angeben. –

Antwort

2

Um die Legende für die geom_error Sie das colour Argument in den aes geben müssen lernen. Wie Sie nur eine Kategorie (hier rot) wollen, habe ich ein Dummy-Variable erstes

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") 
erstellen

enter image description here

Verwandte Themen