2016-06-16 10 views
1

Ich habe einen Schüler-Tabelle, die wie folgt aussehen,Wie zeichne sortierte Frequenz-Barplot mit ggplot in R?

StudentID SectorID ClassID 
1   A Team_1 Class_1 
2   A Team_1 Class_1 
3   B Team_1 Class_1 
4   B Team_2 Class_1 
5   B Team_2 Class_1 
6   A Team_2 Class_1 
7   A Team_3 Class_1 
8   C Team_3 Class_2 
9   C Team_3 Class_2 
10   C Team_3 Class_2 
11   C Team_3 Class_2 
12   C Team_1 Class_2 
13   D Team_1 Class_2 
14   D Team_1 Class_2 

du durch diese sehen können,

stg <- data.frame(StudentID = c(rep("A", 2), rep("B", 3), rep("A", 2), rep("C", 5), rep("D", 2) ), 
        SectorID = c(rep("Team_1", 3), rep("Team_2", 3), rep("Team_3", 5), rep("Team_1", 3)),    
        ClassID  = c(rep("Class_1", 7), rep("Class_2", 7))    
) 


stg 

ggplot(stg, aes(x = stg$StudentID)) + geom_bar() 

Nun möchte ich eine sortierte barchart erreichen. Wo C (mit der Häufigkeit 5) zuerst erscheint, und so weiter. Könntest du bitte ein paar Lichter anschalten? Vielen Dank für Ihre Zeit.

Antwort

2

Sie müssen studentID zu einem Faktor mit den Ebenen in der gewünschten Reihenfolge machen. Dieser Code wird das tun

cnt <- plyr::count(stg$StudentID) 
stg$StudentID <- factor(stg$StudentID, 
    levels = cnt$x[order(cnt$freq, decreasing = TRUE)]) 

ggplot(stg, aes(x = StudentID)) + geom_bar() 
1

Sie könnten dies tun ..

ggplot(stg, aes(x = reorder(StudentID,StudentID,function(x)-length(x)))) + geom_bar() 

enter image description here