Steuern der Anzeigereihenfolge der ggplot2-Legende

70

Weiß jemand, wie ich die Reihenfolge der Legenden in ggplot2 kontrollieren kann?

Soweit ich sehen kann, bezieht sich die Reihenfolge eher auf die tatsächlichen Skalenbezeichnungen als auf die Reihenfolge der Skalendeklaration. Durch Ändern der Skalentitel wird die Reihenfolge geändert. Ich habe ein kleines Beispiel mit dem Diamant-Datensatz gemacht, um dies hervorzuheben. Ich versuche, ggplot2 für eine Reihe von Plots zu verwenden, und ich möchte, dass in allen eine Variable rechts angezeigt wird. Gegenwärtig ist dies jedoch nur bei einigen von ihnen der Fall, und ich weiß nicht, wie ich meine gewünschte Bestellung durchsetzen kann, während die entsprechenden Skalenetiketten beibehalten werden.

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
Alastair
quelle
2
Verwandte (obwohl diese Frage eine bessere Lösung hat): stackoverflow.com/questions/10035551/…
Brian Diggs

Antworten:

118

In 0.9.1 ist die Regel zur Bestimmung der Reihenfolge der Legenden geheim und unvorhersehbar . In Version 0.9.2, Dev-Version in Github, können Sie den Parameter zum Festlegen der Reihenfolge der Legende verwenden.

Hier ist das Beispiel:

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))

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

kohske
quelle
13

Es scheint mir, dass die Reihenfolge der Legende durch die Anzahl der Zeichen in den Skalennamen bestimmt wird. (Ja, ich stimme zu, das scheint bizarr.)

Eine Problemumgehung besteht darin, Ihre Etiketten mit Leerzeichen zu füllen:

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

Geben Sie hier die Bildbeschreibung ein


Ich hoffe aufrichtig, dass bald jemand eine richtige Lösung veröffentlicht!

Andrie
quelle
Ich bekomme Klarheit und schneide dann (mit Leerzeichen gepolstert) in meine Legende, wenn ich das tue, was du getan hast. packageDescription ("ggplot2") $ Version = 0.9.1
Spacedman
Ich hätte klarstellen sollen, dass ich tatsächlich Farbe und dann Form haben möchte (dh Klarheit, dann Schnitt), nicht Schnitt, dann Klarheit, ähnlich wie in Ihrem Beispiel. Ich möchte jedoch in der Lage sein, die Waage zu benennen und trotzdem diese Reihenfolge zu haben.
Alastair
4
@Alastair Es ist jetzt klar, dass meine Problemumgehung nur in ggplot2Version 0.9.0 funktioniert - diese Problemumgehung funktioniert nicht mehr in Version 0.9.1. Wenn Sie also noch 0.9.0 verwenden, können Sie die Zeichenfolgen mit Leerzeichen auffüllen, um die gewünschte Reihenfolge zu erhalten. Wie gesagt, es ist nur eine Problemumgehung (und eine mit begrenzter Haltbarkeit).
Andrie