2017-10-04 11 views
1

Ich habe einen Datenrahmen, der eine Reihe von Herstellern und gesammelten Daten für diese Hersteller hat. Die Liste der Hersteller und/oder der Attributdaten kann sich je nach Lauf ändern. Ich zeige dies als ein Liniendiagramm in ggplot an, aber ich möchte, dass die Legendenreihenfolge der Reihenfolge "hoch/runter" des letzten Jahres der Daten entspricht. Also für dieses Diagramm: Default Legend Orderr ggplot Änderung der Legende Reihenfolge der endgültigen Reihenfolge der Daten

Ich würde gerne die Legende Reihenfolge (und Farbe) Yoyodyne (lila), Widget (grün), Wonka (blau) und Acme (rot) sehen. Ich kann (oder glaube nicht, dass ich es kann) scale_color_manual als Dateneingang von einem Modell zum nächsten verwenden, die Endreihenfolge (2032) kann abweichen und/oder die Liste der Hersteller kann abweichen.

-Code für Grafik zu tun ist (letzter Teil, pz, nur x-Achse Anzeige zu vereinfachen):

px <- ggplot(bym, aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) 
py <- px + ggtitle("MyChart") + labs(x="Year", y="Foo") + geom_line(size=0.5) + geom_point() 
pz <- py + scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) 
pz 

Antwort

1

Haben Sie versucht, die Werte für Hersteller Einstellung nach dem letzten Jahr? Zum Beispiel können Sie eine Spalte mit Ebenen auf diese Weise eingestellt hinzu:

# order Manufacturer by AverageCost in the last year 
colours = bym[with(bym[bym$Model.Year == 2032,], order(-AverageCost)),]$Manufacturer 
# add factor with levels ordered by colours 
bym$Colour = factor(bym$Manufacturer, levels=as.character(colours)) 

Dann Colour für Ihre colour Ästhetik verwenden.

EDIT: Das heißt, wenn Sie auf Basis R bleiben wollen. Die Antwort mit dplyr::mutate ist viel einfacher zu bedienen.

1

Sie können die Reihenfolge der Legendenobjekte mithilfe der Funktion dplyr::mutate in Verbindung mit der Funktion factor festlegen. Um die Farben in der gewünschten Reihenfolge festzulegen, können Sie einfach einen Vektor mit den gewünschten Farben in der gewünschten Reihenfolge erstellen und an scale_color_manual übergeben. Ich habe das im folgenden Beispiel getan. Meine sieht etwas anders aus als deine, weil ich die Zwischenaufgaben entfernt habe.

bym <- data.frame(
    Model.Year = rep(seq(2016, 2030, 1), 4), 
    AverageCost = rnorm(60), 
    Manufacturer = rep(c("Yoyodyne", "Widget", "Wonka", "Acme"), each = 15) 
) 

my_colors <- c("purple", "green", "blue", "red") 

bym %>% 
    mutate(Manufacturer = factor(Manufacturer, 
           levels = c("Yoyodyne", "Widget", "Wonka",  "Acme"))) %>% 
    ggplot(aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) + 
    ggtitle("MyChart") + 
    labs(x="Year", y="Foo") + 
    geom_line(size=0.5) + 
    geom_point()+ 
    scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) + 
    scale_color_manual(values = my_colors) 
Verwandte Themen