Je crée un graphique multiligne avec légende, mais je ne sais pas comment forcer les carrés de la légende à avoir la même couleur que mes lignes.

ggplot(df, aes(x=Month)) +
  geom_line(aes(y=`Less than a high school diploma`/100, color="Less Than HS Diploma"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`High school graduates, no college`/100, color="HS Diploma"), size=2, alpha=0.5, linetype=1) + 
  geom_line(aes(y=`Some college or associate degree`/100, color="Some College / Associate's Degree"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`Bachelor's degree and higher`/100, color="Bachelor's Degree and Higher"), size=2, alpha=0.5, linetype=1) +
  scale_color_manual(name="Educational Attainment", values = c("Less Than HS Diploma"="deepskyblue", "HS Diploma" = "firebrick1", "Some College / Associate's Degree"="mediumpurple", "Bachelor's Degree and Higher"="springgreen4")) +
  ggtitle("Unemployment Rate by Educational Attainment") +
  xlab("Time") +
  ylab("Unemployment Rate") +
  scale_y_continuous(labels = scales::percent) +
  theme(plot.title = element_text(hjust = 0.5), legend.position="bottom")

enter image description here

0
ats1958 22 oct. 2020 à 16:25

3 réponses

Meilleure réponse

Le principal problème est l'argument alpha avec geom_line. Si vous voulez que les clés apparaissent sous forme de lignes, définissez alpha sur 1 dans la légende via guides(color = guide_legend(override.aes = list(alpha = c(1, 1, 1, 1)))). Si vous voulez des rectangles colorés pour les clés, cela peut être réalisé en ajoutant key_glyph = "rect" à vos calques geom_line

Utilisation de l'ensemble de données economics comme exemple de données:

library(ggplot2)

ggplot(economics, aes(x=date)) +
  geom_line(aes(y=`psavert`/100, color="Less Than HS Diploma"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`uempmed`/100, color="HS Diploma"), size=2, alpha=0.5, linetype=1) + 
  geom_line(aes(y=`psavert`/10, color="Some College / Associate's Degree"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`uempmed`/10, color="Bachelor's Degree and Higher"), size=2, alpha=0.5, linetype=1) +
  scale_color_manual(name="Educational Attainment", values = c("Less Than HS Diploma"="deepskyblue", "HS Diploma" = "firebrick1", "Some College / Associate's Degree"="mediumpurple", "Bachelor's Degree and Higher"="springgreen4")) +
  guides(color = guide_legend(override.aes = list(alpha = c(1, 1, 1, 1)))) +
  ggtitle("Unemployment Rate by Educational Attainment") +
  xlab("Time") +
  ylab("Unemployment Rate") +
  scale_y_continuous(labels = scales::percent) +
  theme(plot.title = element_text(hjust = 0.5), legend.position="bottom")

L'argument key_glyph="rect" de {{X1}} doit avoir des noms de couleur au lieu des noms de ligne, que vous n'avez pas besoin de passer. Exemple:…

library(ggplot2)

ggplot(economics, aes(x=date)) +
  geom_line(aes(y=`psavert`/100, color="Less Than HS Diploma"), size=2,alpha=0.5,  linetype=1, key_glyph = "rect") +
  geom_line(aes(y=`uempmed`/100, color="HS Diploma"), size=2, alpha=0.5, linetype=1, key_glyph = "rect") + 
  geom_line(aes(y=`psavert`/10, color="Some College / Associate's Degree"), size=2, alpha=0.5, linetype=1, key_glyph = "rect") +
  geom_line(aes(y=`uempmed`/10, color="Bachelor's Degree and Higher"), size=2, alpha=0.5, linetype=1, key_glyph = "rect") +
  scale_color_manual(name="Educational Attainment", values = c("Less Than HS Diploma"="deepskyblue", "HS Diploma" = "firebrick1", "Some College / Associate's Degree"="mediumpurple", "Bachelor's Degree and Higher"="springgreen4")) +
  ggtitle("Unemployment Rate by Educational Attainment") +
  xlab("Time") +
  ylab("Unemployment Rate") +
  scale_y_continuous(labels = scales::percent) +
  theme(plot.title = element_text(hjust = 0.5), legend.position="bottom")

Créé le 2020-10-22 par le package reprex (v0.3.0)

1
stefan 22 oct. 2020 à 13:43

L'argument values de scale_color_manual doit avoir des noms de couleur au lieu des noms de ligne, que vous n'avez pas besoin de passer. Exemple:

scale_color_manual(name="Educational Attainment", values = c("red","yellow","white",...))
0
Ricardo Semião e Castro 22 oct. 2020 à 13:29

Cela devrait fonctionner (aucune sortie incluse car aucune donnée n'a été partagée). Si vous voulez que la légende soit remplie, vous devez également activer à l'intérieur aes() l'option fill. Après cela, vous pouvez mettre à l'échelle les couleurs à remplir avec scale_fill_manual() et utiliser labs() pour leur donner un nom commun. Voici le code:

library(ggplot2)
#Code
ggplot(df, aes(x=Month)) +
  geom_line(aes(y=`Less than a high school diploma`/100,
                color="Less Than HS Diploma",
                fill="Less Than HS Diploma"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`High school graduates, no college`/100,
                color="HS Diploma",
                fill="HS Diploma"), size=2, alpha=0.5, linetype=1) + 
  geom_line(aes(y=`Some college or associate degree`/100,
                color="Some College / Associate's Degree",
                fill="Some College / Associate's Degree"), size=2, alpha=0.5, linetype=1) +
  geom_line(aes(y=`Bachelor's degree and higher`/100,
                color="Bachelor's Degree and Higher",
                fill="Bachelor's Degree and Higher"), size=2, alpha=0.5, linetype=1) +
  scale_color_manual(name="Educational Attainment",
                     values = c("Less Than HS Diploma"="deepskyblue",
                                "HS Diploma" = "firebrick1",
                                "Some College / Associate's Degree"="mediumpurple",
                                "Bachelor's Degree and Higher"="springgreen4")) +
  scale_fill_manual(name="Educational Attainment",
                     values = c("Less Than HS Diploma"="deepskyblue",
                                "HS Diploma" = "firebrick1",
                                "Some College / Associate's Degree"="mediumpurple",
                                "Bachelor's Degree and Higher"="springgreen4"))+
  ggtitle("Unemployment Rate by Educational Attainment") +
  xlab("Time") +
  ylab("Unemployment Rate") +
  scale_y_continuous(labels = scales::percent) +
  theme(plot.title = element_text(hjust = 0.5), legend.position="bottom")+
  labs(color='Class',fill='Class')
0
Duck 22 oct. 2020 à 13:32