2016-07-27 11 views
5

Ich versuche, die Reihenfolge zu ändern, in der Legendenelemente angezeigt werden. Ich habe ungefähr eine Stunde damit verbracht, ohne Ergebnisse.Wie man die Elemente in einer Legende neu anordnet?

Hier ist ein Beispiel-Setup:

library(ggplot2) 
set.seed(0) 
d <- data.frame(x = runif(3), y = runif(3), a = c('1', '3', '10')) 

Und hier ist eines der vielen Dinge, die ich versucht habe:

ggplot(d, aes(x = x, y = y)) + 
    geom_point(size=7, aes(color = a, order = as.numeric(a))) 

enter image description here

(Meine naive Hoffnung war natürlich, dass die Legendenelemente würden in der numerischen Reihenfolge angezeigt: 1, 3, 10.)

Antwort

8

ggplot wird in der Regel Ihre Faktorwerte nach derbestellendes Faktors. Sie sind am besten dafür sorgen, dass das ist die Bestellung, die Sie sonst mit vielen Funktionen in R kämpfen, aber Sie können dies manuell ändern, indem Sie die Farbskala:

ggplot(d, aes(x = x, y = y)) + 
    geom_point(size=7, aes(color = a)) + 
    scale_color_discrete(breaks=c("1","3","10")) 
2

Th e Reihenfolge der Legende Etiketten können durch Umordnung und Änderung der Werte in Spalte a auf den Faktor manipuliert werden: d$a <- factor(d$a, levels = d$a)

Ihr Code wie dieser

So aussehen würde
library(ggplot2) 
set.seed(0) 
d <- data.frame(x = runif(3), y = runif(3), a = c('1', '3', '10')) 

d$a <- factor(d$a, levels = d$a) 

ggplot(d, aes(x = x, y = y)) + 
    geom_point(size=7, aes(color = a)) 

Und die ouptut enter image description here

Hinweis, als jetzt in der Legende: 1 ist rot, 3 ist grün und 10 ist blaue Farbe

+1

Vielen Dank! Ich habe diese Antwort hochgestuft, weil sie nützliche Informationen liefert, aber ich halte Ausschau nach Antworten, die keine Änderung des zugrunde liegenden 'dat.frame' erfordern. Irgendwie fällt es mir schwer zu glauben, dass 'ggplot2' das Ändern des zugrundeliegenden' data.frame' erfordern würde, um etwas so oberflächliches wie die Anordnung von Elementen in einer Legende zu ändern. – kjo

Verwandte Themen