Je trace un ensemble de données catégoriques et je souhaite utiliser des couleurs distinctes pour représenter les différentes catégories. Étant donné un nombre n
comment puis-je obtenir n
nombre de couleurs les plus distinctives dans R ? Merci.
Réponses
Trop de publicités?J'ai rejoint toutes les palettes qualitatives de RColorBrewer
paquet. Les palettes qualitatives sont censées fournir chacune X couleurs les plus distinctives. Bien sûr, en les mélangeant, on obtient aussi des couleurs similaires, mais c'est le mieux 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 consiste à prendre toutes les couleurs R des dispositifs graphiques et à les échantillonner. J'ai supprimé 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
palette
fonction :palette(rainbow(6)) # six color rainbow (palette(gray(seq(0,.9,len = 25)))) #grey scale
-
Et le
colorRampPalette
fonction :##Move from blue to red in four colours colorRampPalette(c("blue", "red"))( 4)
-
Regardez le
RColorBrewer
paquet (et site web ). Si vous voulez des couleurs divergentes, sélectionnez divergentes sur le site. Par exemple,library(RColorBrewer) brewer.pal(7, "BrBG")
-
El Je veux la teinte Le site web donne beaucoup de belles palettes. Là encore, 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 randomcoloR
paquet :
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 circulaire (comme suggéré par d'autres réponses ici) :
pie(rep(1, n), col=palette)
Représenté dans un diagramme circulaire de 50 couleurs :
n <- 50
palette <- distinctColorPalette(n)
pie(rep(1, n), col=palette)
Ce n'est pas une réponse à la question de l'OP, mais il est utile de mentionner qu'il y a les viridis
qui possède de bonnes palettes de couleurs pour les données séquentielles. Elles sont uniformes du point de vue de la perception, sûres pour les daltoniens et faciles à imprimer.
Pour obtenir la palette, il suffit d'installer le paquet et d'utiliser la fonction viridis_pal()
. Il y a quatre options "A", "B", "C" et "D" à choisir.
install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n) # n = number of colors seeked
Il existe également un excellent exposé expliquant la complexité des bonnes cartes de couleurs sur YouTube :
Vous pouvez utiliser colorRampPalette
de la base ou RColorBrewer
paquet :
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 hexagonaux :
colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5)
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640"
# Note that the mid color is the mid value...
Avec RColorBrewer
vous pourriez utiliser des couleurs provenant de palettes préexistantes :
require(RColorBrewer)
brewer.pal(9, "Set1")
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"
# [9] "#999999"
Regardez RColorBrewer
pour les autres palettes disponibles. J'espère que cela vous aidera.
- Réponses précédentes
- Plus de réponses