Je trace un jeu de données catégorique et souhaite utiliser des couleurs distinctives pour représenter différentes catégories. Étant donné un nombre n
, comment puis-je obtenir n
nombre de couleurs PLUS GRANDES en R? Merci.
J'ai rejoint toutes les palettes qualitatives du package RColorBrewer
. Les palettes qualitatives sont supposées fournir chacune X couleurs les plus distinctives. Bien sûr, les mélanger dans une palette contient également des couleurs similaires, mais c'est le meilleur que je puisse obtenir (74 couleurs).
library(RColorBrewer)
n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
pie(rep(1,n), col=sample(col_vector, n))
Une autre solution est la suivante: prendre toutes les couleurs R des périphériques graphiques et en échantillonner. J'ai enlevé les nuances de gris car elles sont trop similaires. Cela donne 433 couleurs
color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]
pie(rep(1,n), col=sample(color, n))
avec 200 couleurs n = 200
:
pie(rep(1,n), col=sample(color, n))
Voici quelques options:
Jetez un coup d’œil à la fonction palette
:
palette(Rainbow(6)) # six color Rainbow
(palette(gray(seq(0,.9,len = 25)))) #grey scale
Et la fonction colorRampPalette
:
##Move from blue to red in four colours
colorRampPalette(c("blue", "red"))( 4)
Regardez le paquetage colorBrewer
(et site web ). Si vous voulez des couleurs divergentes, sélectionnez diverging sur le site. Par exemple,
library(colorBrewer)
brewer.pal(7, "BrBG")
Le site Web Je veux de la teinte donne beaucoup de belles palettes. Encore une fois, il suffit de sélectionner la palette dont vous avez besoin. Par exemple, vous pouvez obtenir les couleurs RGB du site et créer votre propre palette:
palette(c(rgb(170,93,152, maxColorValue=255),
rgb(103,143,57, maxColorValue=255),
rgb(196,95,46, maxColorValue=255),
rgb(79,134,165, maxColorValue=255),
rgb(205,71,103, maxColorValue=255),
rgb(203,77,202, maxColorValue=255),
rgb(115,113,206, maxColorValue=255)))
Vous pouvez également essayer le paquet randomcoloR
:
library(randomcoloR)
n <- 20
palette <- distinctColorPalette(n)
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):
pie(rep(1, n), col=palette)
Représenté dans un graphique à secteurs avec 50 couleurs:
n <- 50
palette <- distinctColorPalette(n)
pie(rep(1, n), col=palette)
Il existe également un moyen plutôt "nouveau" d’obtenir une palette de couleurs distincte optimale, également en ce qui concerne le daltonisme et la conversion possible en noir et blanc avec les palettes de couleurs Viridis .
Pour obtenir la palette, installez simplement le paquet et utilisez la fonction viridis_pal()
install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n) # n = number of colors seeked
Avec les options "A", "B", "C" et "D", vous pouvez choisir entre ces palettes:
Pour plus d'exemples, visitez la vignette du paquet. Quelques exemples magnifiques:
Il existe également un excellent exposé sur la complexité des bonnes palettes sur YouTube:
Vous pouvez utiliser le paquetage colorRampPalette
de la base ou RColorBrewer
:
Avec colorRampPalette
, vous pouvez spécifier les couleurs comme suit:
colorRampPalette(c("red", "green"))(5)
# [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00"
Vous pouvez également fournir des codes hexadécimaux:
colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5)
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640"
# Note that the mid color is the mid value...
Avec RColorBrewer
, vous pouvez utiliser des couleurs de palettes préexistantes:
require(RColorBrewer)
brewer.pal(9, "Set1")
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"
# [9] "#999999"
Regardez le paquet RColorBrewer
pour les autres palettes disponibles. J'espère que cela t'aides.
Je recommanderais d'utiliser une source externe pour les grandes palettes de couleurs.
http://tools.medialab.sciences-po.fr/iwanthue/
a un service pour composer n'importe quelle taille de palette en fonction de divers paramètres et
discute du problème générique du point de vue des concepteurs graphiques et donne de nombreux exemples de palettes utilisables.
Pour composer une palette de valeurs RVB, il vous suffit de copier les valeurs dans un vecteur, par exemple:
colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975")
J'ai trouvé un site Web proposant une liste de 20 couleurs distinctives: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
col_vector<-c('#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', '#008080', '#e6beff', '#9a6324', '#fffac8', '#800000', '#aaffc3', '#808000', '#ffd8b1', '#000075', '#808080', '#ffffff', '#000000')
Vous pouvez essayer!
Vous pouvez générer un ensemble de couleurs comme ceci:
myCol = c("pink1", "Violet", "mediumpurple1", "slateblue1", "purple", "purple3",
"turquoise2", "skyblue", "steelblue", "blue2", "navyblue",
"orange", "tomato", "coral2", "palevioletred", "violetred", "red2",
"springgreen2", "yellowgreen", "palegreen4",
"wheat2", "tan", "tan2", "tan3", "brown",
"grey70", "grey50", "grey30")
Ces couleurs sont aussi distinctes que possible. Pour les couleurs similaires, elles forment un dégradé afin que vous puissiez facilement distinguer les différences.