contrôle de l'ordre de la grille de facette/enveloppe de facette dans ggplot2? [dupliquer]

Cette question a déjà une réponse ici:

Je trace des choses en utilisant facet_wrap et facet_grid dans ggplot, comme:

ggplot(iris) + geom_histogram(aes(iris$Petal.Width)) + facet_grid(Species ~ .)

Est-il possible de contrôler l'ordre dans lequel les Species panneaux sont ordonnés dans l'intrigue? Cela peut-il être fait sans changer le iris dataframe ou en faire un nouveau? La valeur par défaut ici montre setosa, versicolor, virginica mais je voudrais un ordre différent. grâce.

27
demandé sur user248237dfsf 2013-02-27 19:38:25

1 réponses

Je ne pense pas pouvoir vraiment satisfaire votre exigence "sans créer de nouveau cadre de données" , mais vous pouvez créer le nouveau cadre de données à la volée:

ggplot(transform(iris,
      Species=factor(Species,levels=c("virginica","setosa","versicolor")))) + 
    geom_histogram(aes(Petal.Width))+ facet_grid(Species~.)

Je suis d'accord que ce serait bien s'il y avait un autre moyen de contrôler cela, mais ggplot est déjà un moteur assez puissant (et compliqué)...

Notez que l'ordre de (1) lignes du jeu de données est indépendant de l'ordre de (2) niveaux du facteur. #2 est ce que factor(...,levels=...) change, et ce que ggplot regarde pour déterminer l'ordre des facettes. Faire #1 (trier les lignes de la trame de données dans un ordre spécifié) est un défi intéressant. Je pense que j'y parviendrais en faisant #2 d'abord, puis en utilisant order() ou arrange() pour trier en fonction des valeurs numériques du facteur:

neworder <- c("virginica","setosa","versicolor")
library(plyr)  ## or dplyr (transform -> mutate)
iris2 <- arrange(transform(iris,
             Species=factor(Species,levels=neworder)),Species)

Je ne peux pas voir immédiatement un moyen rapide de le faire sans changer l'ordre des niveaux de facteurs (vous pouvez le faire et ensuite Réinitialiser l'ordre des niveaux de facteurs en conséquence).

Dans général, les fonctions de R qui dépendent de l'ordre des niveaux d'une variable catégorique sont basées sur l'ordre des niveaux des facteurs, pas sur l'ordre des lignes de l'ensemble de données: la réponse ci-dessus s'applique plus généralement.

31
répondu Ben Bolker 2017-04-04 22:32:28