web-dev-qa-db-fra.com

Ordre inversé après coord_flip dans R

Exemple de données de dbv:

  gender Sektion
1      m       5
2      m       5
3      w      3B
4      w      3B
5      w      3B
6      m       4

J'ai l'intrigue suivante:

Sekplot <- ggplot(dbv,aes(x=Sektion,
                          fill=factor(gender),
                          stat="bin", 
                          label = paste(round((..count..)/sum(..count..)*100), "%"))) 
Sekplot <- Sekplot + geom_bar(position="fill")
Sekplot <- Sekplot + scale_y_continuous(labels = percent)
Sekplot <- Sekplot + labs(title = "test")
Sekplot <- Sekplot + scale_fill_discrete(name="test", breaks=c("m", "w", "k.A."), labels=c("m", "w", "k.A."))
Sekplot <- Sekplot + geom_hline(aes(yintercept = ges, linetype = "test"), colour = "black", size = 0.75, show_guide = T)
Sekplot <- last_plot() + coord_flip()
Sekplot <- Sekplot + guides(colour = guide_legend(override.aes = list(linetype = 0 )), 
                                    fill = guide_legend(override.aes = list(linetype = 0 )), 
                                    shape = guide_legend(override.aes = list(linetype = 0 )), 
                                    linetype = guide_legend()) + theme(legend.title=element_blank())

Sekplot 

Sortie: tracé avec axe Y dans le mauvais ordre

Plot with y-axis in wrong order

Comment inverser l'ordre de l'axe "Sektion"? Je voudrais en avoir un en haut et 8 en bas.

J'ai essayé, selon groupA$Date <- factor(groupA$Date, levels=rev(unique(groupA$Date))):

Sekplot <- last_plot() + coord_flip() + scale_x_reverse()

dans plusieurs saveurs, mais n'a pas pu trouver la bonne façon.

29
CH_

Vous pouvez ajouter scale_x_discrete Avec l'argument limits pour ce faire. Vous pouvez simplement écrire les limites dans l'ordre que vous souhaitez, mais cela se complique lorsque vous avez plusieurs niveaux de facteurs. Au lieu de cela, vous pouvez extraire les niveaux du facteur de votre ensemble de données et profiter de rev pour les mettre dans l'ordre inverse.

Cela ressemblerait à: scale_x_discrete(limits = rev(levels(dbv$Sektion)))

28
aosmith