Tengo una pregunta sobre leyendas en ggplot2. Logré trazar tres líneas en el mismo gráfico y quiero agregar una leyenda con los tres colores utilizados. Este es el código usado
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
y la salida
Me gustaría agregar una leyenda con los tres colores utilizados y el nombre de la variable (TempMax, TempMedia y TempMin). Yo he tratado
scale_colour_manual
pero no puedo encontrar la manera exacta.
Lamentablemente, los datos originales se eliminaron del sitio vinculado y no se pudieron recuperar. Pero vinieron de archivos de datos meteo con este formato
"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
Respuestas:
Tiendo a encontrar que si estoy especificando colores individuales en múltiples geom, lo estoy haciendo mal. Así es como trazaría sus datos:
Todo lo que queda es un simple comando ggplot:
Parcela de ejemplo
fuente
Como @Etienne preguntó cómo hacer esto sin fusionar los datos (que en general es el método preferido, pero reconozco que puede haber algunos casos en que eso no sea posible), presento la siguiente alternativa.
Comience con un subconjunto de los datos originales:
Puede obtener el efecto deseado (y esto también limpia el código de trazado original):
La idea es que a cada línea se le asigne un color asignando la
colour
estética a una cadena constante. Elegir la cadena que es lo que desea que aparezca en la leyenda es lo más fácil. El hecho de que en este caso sea el mismo que el nombre de lay
variable que se está trazando no es significativo; podría ser cualquier conjunto de cuerdas. Es muy importante que esto esté dentro de laaes
llamada; está creando una asignación a esta "variable".scale_colour_manual
Ahora puede asignar estas cadenas a los colores apropiados. El resultado esEn algunos casos, la asignación entre los niveles y los colores debe hacerse explícita al nombrar los valores en la escala manual (gracias a @DaveRGP por señalar esto):
(dando la misma cifra que antes). Con valores con nombre, los saltos se pueden usar para establecer el orden en la leyenda y cualquier orden se puede usar en los valores.
fuente
scale_colour_manual("", values = c("TempMax" = "red", "TempMedia" = "green", "TempMin" = "blue"))
donde TempMax, TempMedia y TempMin se especifican como el argumento de color como en la respuesta anterior.Realmente me gusta la solución propuesta por @Brian Diggs. Sin embargo, en mi caso, creo los gráficos de líneas en un bucle en lugar de darlos explícitamente porque no sé a priori cuántos gráficos tendré. Cuando traté de adaptar el código de @ Brian, tuve algunos problemas para manejar los colores correctamente. Resultó que necesitaba modificar las funciones estéticas. En caso de que alguien tenga el mismo problema, aquí está el código que funcionó para mí.
Usé el mismo marco de datos que @Brian:
En mi caso, genero
my.cols
ymy.names
dinámicamente, pero no quiero complicar las cosas innecesariamente, así que las doy explícitamente aquí. Estas tres líneas facilitan el orden de la leyenda y la asignación de colores.Y aquí está la trama:
fuente
ggplot
espera.