Ich habe eine Frage zu Legenden in ggplot2. Ich habe es geschafft, drei Linien im selben Diagramm zu zeichnen und möchte eine Legende mit den drei verwendeten Farben hinzufügen. Dies ist der verwendete Code
library(ggplot2)
require(RCurl)
link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")
temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) +
geom_line(colour="red") + opts(title="TITULO") +
ylab("Temperatura (C)") + xlab(" ") +
scale_y_continuous(limits = c(-10,40)) +
geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") +
geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
scale_colour_manual(values=c("red","green","blue"))
temp
und die Ausgabe
Ich möchte eine Legende mit den drei verwendeten Farben und dem Namen der Variablen (TempMax, TempMedia und TempMin) hinzufügen. Ich habe versucht
scale_colour_manual
kann aber den genauen Weg nicht finden.
Leider wurden die Originaldaten von der verlinkten Seite gelöscht und konnten nicht wiederhergestellt werden. Sie stammten jedoch aus Meteodatendateien mit diesem Format
"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49
Antworten:
Ich neige dazu festzustellen, dass ich es falsch mache, wenn ich einzelne Farben in mehreren Geoms spezifiziere. So würde ich Ihre Daten zeichnen:
Alles was übrig bleibt ist ein einfacher ggplot Befehl:
Beispielplot
quelle
Da @Etienne gefragt hat, wie dies zu tun ist, ohne die Daten zu schmelzen (was im Allgemeinen die bevorzugte Methode ist, aber ich erkenne, dass es einige Fälle gibt, in denen dies nicht möglich ist), präsentiere ich die folgende Alternative.
Beginnen Sie mit einer Teilmenge der Originaldaten:
Sie können den gewünschten Effekt erzielen, indem Sie (und dies bereinigt auch den ursprünglichen Plotcode):
Die Idee ist, dass jede Linie eine Farbe erhält, indem die
colour
Ästhetik einer konstanten Zeichenfolge zugeordnet wird. Am einfachsten ist es, die Zeichenfolge auszuwählen, die in der Legende angezeigt werden soll. Die Tatsache, dass es in diesem Fall mit dem Namen der dargestellteny
Variablen identisch ist, ist nicht signifikant. Es kann sich um einen beliebigen Satz von Zeichenfolgen handeln. Es ist sehr wichtig, dass dies imaes
Anruf enthalten ist. Sie erstellen eine Zuordnung zu dieser "Variablen".scale_colour_manual
kann diese Zeichenfolgen nun den entsprechenden Farben zuordnen. Das Ergebnis istIn einigen Fällen muss die Zuordnung zwischen den Ebenen und Farben explizit gemacht werden, indem die Werte in der manuellen Skala benannt werden (danke an @DaveRGP für den Hinweis):
(mit der gleichen Zahl wie zuvor). Bei benannten Werten können die Unterbrechungen verwendet werden, um die Reihenfolge in der Legende festzulegen, und jede Reihenfolge kann in den Werten verwendet werden.
quelle
scale_colour_manual("", values = c("TempMax" = "red", "TempMedia" = "green", "TempMin" = "blue"))
in dem TempMax, TempMedia und TempMin als Farbargument angegeben sind, wie in der obigen Antwort.Die von @Brian Diggs vorgeschlagene Lösung gefällt mir sehr gut. In meinem Fall erstelle ich die Liniendiagramme jedoch in einer Schleife, anstatt sie explizit anzugeben, da ich apriori nicht weiß, wie viele Diagramme ich haben werde. Als ich versuchte, den Code von @ Brian anzupassen, hatte ich einige Probleme mit dem richtigen Umgang mit den Farben. Es stellte sich heraus, dass ich die ästhetischen Funktionen modifizieren musste. Falls jemand das gleiche Problem hat, ist hier der Code, der für mich funktioniert hat.
Ich habe den gleichen Datenrahmen wie @Brian verwendet:
In meinem Fall generiere ich
my.cols
undmy.names
dynamisch, aber ich möchte die Dinge nicht unnötig kompliziert machen, deshalb gebe ich sie hier explizit an. Diese drei Zeilen erleichtern die Reihenfolge der Legende und die Zuweisung von Farben.Und hier ist die Handlung:
quelle
ggplot
erwartete lange Form umzuformen.