2017-07-19 2 views
1

Ich weiß, dass diese Frage sehr oft gestellt wurde, aber ich versuchte, die alle Methode, die ich gefunden und keiner von ihnen scheint zu funktionieren ..R: auf der BarPlot mit geom_text Anzahl der Beobachtung Hinzufügen

Dies ist mein aktueller Daten.

df <- data.frame(ID = c(1,2,3,4), Type = c("A","B","A","B"), Score1 = c(10,20,30,40), Score2 = c(20,40,60,80)) 
ID Type Score1  Score2 
1  A  10   20 
2  B  20   40 
3  A  30   60 
4  B  40   80 

und jetzt will ich eine Grafik machen, wie dieses Bearbeiten aussieht: legte ich das falsche Diagramm> Es ist wie diese

enter image description here

Ich bin in der Lage aussehen sollte das Balkendiagramm zu erreichen mit dem reshape und ggplot

rawscore <- df[, c("Type","Score1", "Score2")] 
rawscore <- melt(rawscore, id = c("Type")) 
ggplot(rawscore, aes(type, value, fill=variable))+ 
geom_bar(stat="summary", fun.y="mean", position="dodge") 

Allerdings kämpft ich die Anzahl der observ hinzufügen ation auf dem Graphen Ich weiß, dass ich geom_text verwenden sollte das Etikett auf dem Diagramm zu setzen, so dass ich versuchte, den neuen Vektor von diesem Spruch post

nlabels <- table(Type) 

aber ich habe einen Fehler beim Erstellen

Error: Aesthetics must be either length 1 or the same as the data 

Irgendwelche Vorschläge?

Antwort

1
df <- data.frame(ID = c(1,2,3,4), Type = c("A","B","A","B"), Score1 = c(10,20,30,40), Score2 = c(20,40,60,80)) 


rawscore <- df[, c("Type","Score1", "Score2")] 
rawscore <- melt(rawscore, id = c("Type")) 

versuchen Sie einen anderen data.frame (EDIT)

library(dplyr) 

dfmean <- rawscore %>% 
    group_by(interaction(variable, Type)) %>% 
    summarise(m = mean(value), count = n()) 
names(dfmean)[1] <- "Inter" 

ggplot(rawscore, aes(x = interaction(variable, Type), y = value)) + 
    geom_bar(aes(fill = variable), stat="summary", fun.y="mean", position="dodge") + 
    geom_text(data = dfmean, aes(x = Inter, y = m + 1, label = count)) 

enter image description here

+0

Ich entschuldige mich ich mein Graph und Befehl nur aktualisiert, aber ich werde Ihre Methode auch versuchen. Ich bin jedoch auf der Suche nach der Anzahl der Beobachtungen auf der Stange nicht den Durchschnitt, aber ich werde sehen, ob ich mit Ihrem Befehl spielen kann – Maru

+0

Ja, ich sehe es. Versuchen Sie 'dfmean <- rawscore%>% group_by (Interaktion (Variable, Typ))%>% summarisieren (Anzahl = n())' – AntoineBic

+0

Ich habe meine Antwort bearbeitet. – AntoineBic

1

Eine kleine Änderung in der Antwort von @Florian zu konstruieren.

library(dplyr) 
rawscore <- df[, c("Type","Score1", "Score2")] 
rawscore <- melt(rawscore, id = c("Type")) %>% 
    group_by(variable) %>% summarize(value=mean(value), count = n()) 

ggplot(rawscore, aes(variable, value, fill=variable))+ 
    geom_bar(stat="identity") + 
    geom_text(aes(label=count), vjust=0) 

Das funktioniert perfekt

enter image description here

+0

Das funktioniert perfekt Danke! – Maru

Verwandte Themen