Je trace un ensemble de données catégoriques et je souhaite utiliser des couleurs distinctives pour représenter différentes catégories. Étant donné un nombre n
, comment puis-je obtenir le n
nombre de couleurs les plus distinctives dans R? Merci.
130
Réponses:
J'ai rejoint toutes les palettes qualitatives du
RColorBrewer
package. Les palettes qualitatives sont censées fournir chacune X couleurs les plus distinctives. Bien sûr, les mélanger dans une palette de couleurs similaires, mais c'est le meilleur que je puisse obtenir (74 couleurs).Une autre solution est: prenez toutes les couleurs R des appareils graphiques et échantillonnez-les. J'ai supprimé les nuances de gris car elles sont trop similaires. Cela donne 433 couleurs
avec 200 couleurs
n = 200
:la source
col
noms de couleurs correspondants?col
voulez-vous dire? lescolor
périphériques graphiques ont des noms. Si vous voulez dire en général, tous les codes hexadécimaux n'ont pas de noms de couleurs correspondants (il n'y a que 433 couleursgrDevices
mais beaucoup plus de codes hexadécimaux)col=sample(col_vector, n)
duRColorBrewer
package dans votre extrait de code. Par exemple, Comment trouver les noms de couleur#B3E2CD, #E78AC3, #B3DE69
disponibles à partir desample(col_vector,3)
. Sinon, comment trouver tous les codes hexadécimaux donnés parbrewer.pal
fonction avec leurs noms de couleur.RColorBrewer
palettes ne sont pas dérivées degrDevices
couleurs, qui ont des noms mappés, mais sont juste des codes hexadécimaux, à ma connaissance, vous ne pouvez pas faire cela avec desRColorBrewer
palettes, même qualitatives.Voici quelques options:
Jetez un œil à la
palette
fonction:Et la
colorRampPalette
fonction:Regardez le
colorBrewer
package (et le site Web ). Si vous voulez des couleurs divergentes, sélectionnez divergentes sur le site. Par exemple,Le site Web I want hue propose de nombreuses palettes intéressantes. Encore une fois, sélectionnez simplement la palette dont vous avez besoin. Par exemple, vous pouvez obtenir les couleurs RVB du site et créer votre propre palette:
la source
I want hue
est un site Web génial. C'est exactement ce que je veux. Étant donné un nombre, comment générer une palette du nombre de couleurs. mais pouvons-nous le faire en R automatiquement?i want hue
avoir une API qui lui permette d'être automatiquement interrogée (peut-être que c'est le cas - je n'ai pas passé longtemps à chercher)i want hue
, ici . L'efficacité pourrait être améliorée (par exemple en enregistrant des échantillons de couleur en tant qu'objets de données), mais l'idée générale est là. (Charger avecdevtools::source_gist('45b49da5e260a9fc1cd7')
)Vous pouvez également essayer le
randomcoloR
package :Vous pouvez voir qu'un ensemble de couleurs très distinctes est choisi lors de la visualisation dans un graphique à secteurs (comme suggéré par d'autres réponses ici):
Représenté dans un camembert avec 50 couleurs:
la source
unname(distinctColorPalette(n))
pour que cela fonctionne avec ggplot. Je suppose que ggplot a besoin d'un vecteur sans nom.col_vector <- unname(distinctColorPalette(n))
et puis... + scale_color_manual(values=col_vector) ...
Ce n'est pas une réponse à la question d'OP, mais il convient de mentionner qu'il existe un
viridis
package qui a de bonnes palettes de couleurs pour les données séquentielles. Ils sont perceptuellement uniformes, sûrs pour les daltoniens et faciles à imprimer.Pour obtenir la palette, installez simplement le package et utilisez la fonction
viridis_pal()
. Il y a quatre options "A", "B", "C" et "D" à choisirIl y a aussi une excellente présentation expliquant la complexité des bonnes couleurs sur YouTube:
Une meilleure palette de couleurs par défaut pour Matplotlib | SciPy 2015 | Nathaniel Smith et Stéfan van der Walt
la source
Vous pouvez utiliser à
colorRampPalette
partir de la base ou duRColorBrewer
package:Avec
colorRampPalette
, vous pouvez spécifier les couleurs comme suit:Vous pouvez également fournir des codes hexadécimaux:
Avec
RColorBrewer
vous pouvez utiliser des couleurs de palettes préexistantes:Regarder
RColorBrewer
package pour d'autres palettes disponibles. J'espère que cela t'aides.la source
brewer.pal
. mais il est limité à 9 couleurs. J'ai en fait plus de 9 catégories. Les premières alternatives génèrent un dégradé de couleurs, qui n'est pas aussi distinctif que je le souhaite.Je recommanderais d'utiliser une source externe pour les grandes palettes de couleurs.
http://tools.medialab.sciences-po.fr/iwanthue/
dispose d'un service pour composer n'importe quelle taille de palette selon divers paramètres et
/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815
traite du problème générique du point de vue des graphistes et donne de nombreux exemples de palettes utilisables.
Pour constituer une palette à partir de valeurs RVB, il vous suffit de copier les valeurs dans un vecteur comme par exemple:
la source
J'ai trouvé un site internet proposant une liste de 20 couleurs distinctives: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
Vous pouvez essayer!
la source
n
des couleurs distinctives, pas un ensemble de couleurs définies. Essayez de mettre à jour votre réponseVous pouvez générer un ensemble de couleurs comme celui-ci:
Ces couleurs sont aussi distinctes que possible. Pour ces couleurs similaires, elles forment un dégradé afin que vous puissiez facilement distinguer les différences entre elles.
la source
Dans ma compréhension, la recherche de couleurs distinctives est liée à une recherche efficace à partir d'un cube unitaire, où 3 dimensions du cube sont trois vecteurs le long des axes rouge, vert et bleu. Cela peut être simplifié pour rechercher dans un cylindre (analogie HSV), où vous fixez la saturation (S) et la valeur (V) et trouvez des valeurs de teinte aléatoires. Cela fonctionne dans de nombreux cas, et voyez ceci ici:
https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
En R,
Une autre manière consiste à utiliser le package R "uniformément" https://cran.r-project.org/web/packages/uniformly/index.html
et cette fonction simple peut générer des couleurs distinctives:
On peut penser à une fonction un peu plus impliquée par la recherche de grille:
vérifiez cette fonction en:
Cependant, notez que définir une palette distincte avec des couleurs perceptibles par l'homme n'est pas simple. Laquelle des approches ci-dessus génère un ensemble de couleurs diversifié doit encore être testée.
la source
Vous pouvez utiliser le package Polychrome à cet effet. Cela nécessite juste le nombre de couleurs et quelques-unes
seedcolors
. Par exemple:Vous pouvez en savoir plus sur ce package à l' adresse https://www.jstatsoft.org/article/view/v090c01 .
la source