68 votes

Contrôle de l'ordre d'affichage de la légende de ggplot2

Quelqu'un sait-il comment je peux obtenir le contrôle de l'ordre des légendes dans ggplot2?

De ce que je peux voir l'ordre semble liée à l'ampleur des étiquettes plutôt que l'échelle de la déclaration de l'ordre. La modification de l'échelle des titres modifie la commande. J'ai fait un petit exemple d'utilisation du diamant dataset pour illustrer ce point. Je suis en train d'utiliser ggplot2 pour une série de parcelles, et je veux faire une variable apparaît sur la droite dans tous les. À l'heure actuelle bien que cela n'arrive que dans certains d'entre eux, et je suis à une perte sur la façon de faire respecter mon choix de la commande tout en conservant l'échelle appropriée des étiquettes.

library(ggplot2)
diamond.data <- diamonds[sample(nrow(diamonds), 1000), ]
plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top", legend.box = "horizontal")
plot # the legend will appear shape then colour 
plot + labs(colour = "A", shape = "B") # legend will be colour then shape
plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour

111voto

kohske Points 30437

En 0.9.1, la règle pour déterminer l'ordre des légendes est secrète et imprévisible . Maintenant, dans 0.9.2, version dev dans github, vous pouvez utiliser le paramètre pour définir l’ordre de la légende.

Voici l'exemple:

 plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top")

plot + guides(colour = guide_legend(order = 1), 
              shape = guide_legend(order = 2))
 

entrez la description de l'image ici

 plot + guides(colour = guide_legend(order = 2), 
              shape = guide_legend(order = 1))
 

entrez la description de l'image ici

13voto

Andrie Points 66979

Il me semble que l'ordre de la légende est déterminé par le nombre de caractères dans les noms d'échelle. (Oui, je suis d'accord, cela semble bizarre.)

Une solution consiste donc à garnir vos étiquettes avec des espaces:

 plot + labs(colour = "Clarity", shape = "      Cut")
 

entrez la description de l'image ici


J'espère sincèrement que quelqu'un publiera bientôt une solution appropriée!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X