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
Antworten:
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))
plot + guides(colour = guide_legend(order = 2), shape = guide_legend(order = 1))
quelle
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")
Ich hoffe aufrichtig, dass bald jemand eine richtige Lösung veröffentlicht!
quelle
ggplot2
Version 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).