Sembra che si desideri tracciarli in una qualche forma di ordine in base al valore del 50% di ciascun grafico a riquadri? Facendo una dataframe diverso come esempio:
temp <- structure(list(
Grade = c("U","G", "F", "E", "D", "C", "B", "A", "A*"),
n = c(20L, 13L, 4L, 13L, 36L, 94L, 28L, 50L, 27L)),
.Names = c("Grade", "n"),
class = c("tbl_df", "data.frame"),
row.names = c(NA, -9L))
Se tracciamo questo, possiamo vedere che le etichette sono incasinato (A viene prima di A *).
library(ggplot2)
ggplot(temp) +
geom_bar(stat="identity", aes(x=Grade, y=n))
Potremmo ordinare questo manualmente come mostrato sopra, o potremmo decidere di tracciare i gradi in ordine di numero di studenti che ottengono ogni grado. Questo può anche essere fatto manualmente, ma sarebbe meglio se si potesse automatizzare questo:
Prima abbiamo ordinato il dataframe:
library(dplyr)
temp <- temp %>% arrange(n)
Poi modificare i livelli all'interno della colonna Grade
a rappresentare l'ordine del dati
temp$Grade <- as.vector(temp$Grade) #get rid of factors
temp$Grade = factor(temp$Grade,temp$Grade) #add ordered factors back
L'esecuzione dello stesso comando grafico mostrato sopra fornisce dati tracciati con un asse x diversamente ordinato.
Più discussione qui: http://stackoverflow.com/questions/11587111/setting-levels-when-creating-a-factor-vs-levels – harkmug