2014-01-28 19 views
5

Ich produziere ein ggplot2 Liniendiagramm von AESRD 2013 - SCO Bitumen - 7y.csvin this folder. Die Datei wird automatisch auf einer Website nach meinen Wünschen erstellt. Dies sind mehrere Zeitreihen mit einigen Produktionswerten, die jeweils nach der Spalte "Compilation" benannt sind. Also habe ich nach "Compilation" gruppiert.ggplot2: Reihenfolge in der alphabetischen Reihenfolge, anstatt der Reihenfolge der Darstellung im Datensatz zu folgen

Siehe diesen Auszug aus meinem Code in der Datei plotter.r in dem gleichen Ordner (siehe oben).

# "dt" is the dataframe derived from the csv file. 
# "thinned" is some vector of x-values that tells where to draw the special symbols. 

p = ggplot(dt, aes(Date, Value, colour= Compilation, group = Compilation, size = plotParameter), guide=FALSE) 
p = p + geom_point(data=dt[thinned,],aes(as.Date(Date), Value, colour= Compilation, shape = Compilation), size = 5) 
p = p + scale_shape_manual(values = seq(0,20)) 
p = p + geom_line(guide = FALSE) 
p = p + scale_colour_manual(values=cbPalette) #cbPalette is already defined 
p = p + scale_size(range=c(0.5, 2), guide=FALSE) 
p = p + scale_y_continuous(labels = comma) 
p = p + ylab("Barrels per day") + xlab("") 
p = p + theme(legend.text = element_text(size = 8, hjust = 5, vjust= -5)) 
plot(p) 

Hier kommt die böse Sache: Die Legende neu ordnet meine Compilations alphabetisch!

Ich habe absichtlich meine csv-Datei so entwickelt, dass jede Zusammenstellung in einer bestimmten logischen Reihenfolge auftaucht (die wichtigste Reihe zuerst, dann in der Reihenfolge einiger Leistungsparameter folgend). So würde die richtige Reihenfolge der Legende einfach nach unique(dt$Compilation) lauten.

Meine bisherigen Schritte waren, die Spalte Order in die csv-Datei einzufügen und damit (erfolglos) zu experimentieren und meinen Code auf verschiedene Arten zu ändern. Ohne Erfolg.

Natürlich habe ich die meisten verfügbaren Threads auf Stackoverflow gegooglet und überprüft. Ich bin auf Faktorisierung und Neuordnung gestoßen, aber es gibt keine "logische" Reihenfolge für meine Zusammenstellungen außer für die Reihenfolge, in der sie im Datensatz erscheinen. * seufz *

Kann mir jemand auf zeigen, woeinzufügen, was?

(Bonus Punkt: Wie kann ich von diesen horizontalen Linien im Symbol Legende loswerden?)

+1

gelten 'breaks' sowohl' scales' (scale_color_manual und scale_shape_manual). Wenn wir nur eins machen würden, würden sie nicht übereinstimmen, und ggplot würde sie in zwei Legenden aufteilen, anstatt sie zu verschmelzen. – RUser

+0

Sie haben es gelöst! Wenn du es als Antwort postest (kein Kommentar), kann ich dich mit etwas Ansehen belohnen! – fridde

+0

Nur die Antwort unten hinzugefügt - Sie können weiter stimmen und genehmigen es als Antwort – RUser

Antwort

4

in beiden Skalen breaks anwenden (scale_color_manual und scale_shape_manual).Wenn wir nur eine haben, würden sie nicht passen, und ggplot würde sie in zwei Legenden aufgeteilt, anstatt sie verschmelzen

Ein solches Beispiel ist:

> library(ggplot2) 
> ggplot(mtcars, aes(wt, mpg, shape=factor(cyl))) + geom_point() + theme_bw() 
> library(ggplot2) 
> bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() 
> bp 

enter image description here

bp + scale_fill_discrete(breaks=c("trt1","ctrl","trt2")) 

enter image description here

Umkehren

auch versuchen

bp + scale_fill_discrete(breaks = unique(levels(PlantGrowth$group))) 
+0

auch erkunden 'bp + opts (legende.key =)' für Legendenthemen – RUser

+0

Reihenfolge der Erscheinung von Elementen in 'Gruppe', die letzte Zeile hier sollte lauten: 'bp + scale_fill_discrete (breaks = unique (PlantGrowth $ group))'? –

2

die Bestellung zu adressieren: Sie wollen wahrscheinlich die Faktorstufen von dt$Compilation durch den Aufruf von etw wie dt <- transform(dt, Compilation=factor(Compilation, levels=unique(Compilation))) vor dem Plotten beheben.

Und sprechen von horizontalen Linien: Wollen Sie p = p + guides(size=FALSE)?

Verwandte Themen