Je me suis familiarisé avec R le mois dernier.
Voici ma question:
Quel est le bon moyen d'attribuer des couleurs aux variables catégorielles dans ggplot2 qui ont un mappage stable? J'ai besoin de couleurs cohérentes sur un ensemble de graphiques qui ont différents sous-ensembles et un nombre différent de variables catégorielles.
Par exemple,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
où categoricalData
a 5 niveaux.
Puis
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
où categoricalData.subset
a 3 niveaux.
Cependant, un niveau particulier qui se trouve dans les deux ensembles se terminera par une couleur différente, ce qui rend plus difficile la lecture des graphiques ensemble.
Dois-je créer un vecteur de couleurs dans le bloc de données? Ou existe-t-il un autre moyen d'attribuer des couleurs spécifiques aux catégories?
factor
élément commun à toutes les parcelles.fillScale <- scale_fill_manual(name = "grp",values = myColors)
pour l'utiliser avec des graphiques à barres.Je suis dans la même situation évoquée par malcook dans son commentaire : malheureusement la réponse de Thierry ne fonctionne pas avec ggplot2 version 0.9.3.1.
Voici le premier chiffre:
et le deuxième chiffre:
Comme on peut le voir, les couleurs ne restent pas fixes, par exemple E passe du magenta au bleu.
Comme suggéré par malcook dans son commentaire et par hadley dans son commentaire le code qui utilise
limits
fonctionne correctement:donne la figure suivante, qui est correcte:
C'est la sortie de
sessionInfo()
:la source
La solution la plus simple consiste à convertir votre variable catégorielle en un facteur avant le sous-ensemble. En fin de compte, vous avez besoin d'une variable de facteur avec exactement les mêmes niveaux dans tous vos sous-ensembles.
Avec une variable de caractère
Avec une variable factorielle
la source
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
pour préserver l'association couleur | facteur mais, ce qui fonctionne, sauf que, entre mes mains, le drop = TRUE n'est PAS respecté (je m'attends à ce qu'il supprime le niveau de la légende). Drat ... ou est-ce moi?Ceci est un ancien post, mais je cherchais une réponse à cette même question,
Pourquoi ne pas essayer quelque chose comme:
Si vous avez des valeurs catégoriques, je ne vois pas pourquoi cela ne devrait pas fonctionner.
la source
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
pour éviter d'avoir à coder manuellement les niveaux.Sur la base de la réponse très utile de joran, j'ai pu trouver cette solution pour une échelle de couleurs stable pour un facteur booléen (
TRUE
,FALSE
).Puisque ColorBrewer n'est pas très utile avec les échelles de couleurs binaires, les deux couleurs nécessaires sont définies manuellement.
Voici
myboolean
le nom de la colonnemyDataFrame
contenant le facteur TRUE / FALSE.date
etduration
sont les noms de colonne à mapper sur les axes x et y du tracé dans cet exemple.la source