Desde @Etienne a demandé comment faire cela sans faire fondre les données (ce qui est en général la méthode préférée, mais je reconnais qu'il peut y avoir des cas où cela n'est pas possible), je présente l'alternative suivante.
Commencez par un sous-ensemble des données d'origine :
datos <-
structure(list(fecha = structure(c(1317452400, 1317538800, 1317625200,
1317711600, 1317798000, 1317884400, 1317970800, 1318057200, 1318143600,
1318230000, 1318316400, 1318402800, 1318489200, 1318575600, 1318662000,
1318748400, 1318834800, 1318921200, 1319007600, 1319094000), class = c("POSIXct",
"POSIXt"), tzone = ""), TempMax = c(26.58, 27.78, 27.9, 27.44,
30.9, 30.44, 27.57, 25.71, 25.98, 26.84, 33.58, 30.7, 31.3, 27.18,
26.58, 26.18, 25.19, 24.19, 27.65, 23.92), TempMedia = c(22.88,
22.87, 22.41, 21.63, 22.43, 22.29, 21.89, 20.52, 19.71, 20.73,
23.51, 23.13, 22.95, 21.95, 21.91, 20.72, 20.45, 19.42, 19.97,
19.61), TempMin = c(19.34, 19.14, 18.34, 17.49, 16.75, 16.75,
16.88, 16.82, 14.82, 16.01, 16.88, 17.55, 16.75, 17.22, 19.01,
16.95, 17.55, 15.21, 14.22, 16.42)), .Names = c("fecha", "TempMax",
"TempMedia", "TempMin"), row.names = c(NA, 20L), class = "data.frame")
Vous pouvez obtenir l'effet désiré en (et cela nettoie également le code de traçage original) :
ggplot(data = datos, aes(x = fecha)) +
geom_line(aes(y = TempMax, colour = "TempMax")) +
geom_line(aes(y = TempMedia, colour = "TempMedia")) +
geom_line(aes(y = TempMin, colour = "TempMin")) +
scale_colour_manual("",
breaks = c("TempMax", "TempMedia", "TempMin"),
values = c("red", "green", "blue")) +
xlab(" ") +
scale_y_continuous("Temperatura (C)", limits = c(-10,40)) +
labs(title="TITULO")
L'idée est d'attribuer une couleur à chaque ligne en mettant en correspondance les éléments suivants colour
esthétique à une chaîne constante. Le choix de la chaîne qui correspond à ce que vous voulez voir apparaître dans la légende est le plus simple. Le fait que dans ce cas, il s'agisse du même nom que celui de la balise y
La variable tracée n'est pas significative ; il peut s'agir de n'importe quel ensemble de chaînes de caractères. Il est très important que ce soit à l'intérieur de l'élément aes
vous créez une correspondance avec cette "variable".
scale_colour_manual
peut maintenant faire correspondre ces chaînes de caractères aux couleurs appropriées. Le résultat est
Dans certains cas, le mappage entre les niveaux et les couleurs doit être rendu explicite en nommant les valeurs dans l'échelle manuelle (merci à @DaveRGP pour l'avoir signalé) :
ggplot(data = datos, aes(x = fecha)) +
geom_line(aes(y = TempMax, colour = "TempMax")) +
geom_line(aes(y = TempMedia, colour = "TempMedia")) +
geom_line(aes(y = TempMin, colour = "TempMin")) +
scale_colour_manual("",
values = c("TempMedia"="green", "TempMax"="red",
"TempMin"="blue")) +
xlab(" ") +
scale_y_continuous("Temperatura (C)", limits = c(-10,40)) +
labs(title="TITULO")
(ce qui donne le même chiffre que précédemment). Avec les valeurs nommées, les ruptures peuvent être utilisées pour définir l'ordre dans la légende et n'importe quel ordre peut être utilisé dans les valeurs.
ggplot(data = datos, aes(x = fecha)) +
geom_line(aes(y = TempMax, colour = "TempMax")) +
geom_line(aes(y = TempMedia, colour = "TempMedia")) +
geom_line(aes(y = TempMin, colour = "TempMin")) +
scale_colour_manual("",
breaks = c("TempMedia", "TempMax", "TempMin"),
values = c("TempMedia"="green", "TempMax"="red",
"TempMin"="blue")) +
xlab(" ") +
scale_y_continuous("Temperatura (C)", limits = c(-10,40)) +
labs(title="TITULO")
1 votes
Je suis toujours curieux de savoir si les légendes peuvent être liées à des éléments distincts du tracé (comme des lignes géométriques différentes).
0 votes
Si vous n'avez que 3 lignes, je vous suggère de regarder le paquet dirrectlabels. (LIEN)
0 votes
@TylerRinker Je l'avais déjà utilisé à d'autres fins, mais la réponse de csgillespie me convient mieux maintenant.
0 votes
@EtienneLow-Décarie Vous pouvez le faire, mais en général seulement s'ils utilisent des esthétiques différentes. Par exemple, faire correspondre un ensemble de lignes à une couleur et un autre à un type de ligne. Dans ce cas, il faut généralement transmettre des données distinctes à chaque géomètre.