Estoy trazando un conjunto de datos categórico y quiero usar colores distintivos para representar diferentes categorías. Dado un número n
, ¿cómo puedo obtener el n
número de MÁS colores distintivos en R? Gracias.
130
Estoy trazando un conjunto de datos categórico y quiero usar colores distintivos para representar diferentes categorías. Dado un número n
, ¿cómo puedo obtener el n
número de MÁS colores distintivos en R? Gracias.
Respuestas:
Me uní a todas las paletas cualitativas del
RColorBrewer
paquete. Se supone que las paletas cualitativas proporcionan X colores más distintivos cada una. Por supuesto, mezclarlos se une en una paleta de colores también similares, pero eso es lo mejor que puedo obtener (74 colores).Otra solución es: tomar todos los colores R de los dispositivos gráficos y tomar muestras de ellos. Eliminé tonos de gris ya que son demasiado similares. Esto da 433 colores.
con 200 colores
n = 200
:fuente
col
nombres de color correspondientes?col
¿a qué te refieres? elcolor
de los dispositivos gráficos tiene nombres. Si quiere decir en general, no todos los códigos hexadecimales tienen nombres de color correspondientes (solo hay 433 colores engrDevices
muchos más códigos hexadecimales)col=sample(col_vector, n)
elRColorBrewer
paquete en su fragmento de código. Por ejemplo, Cómo encontrar los nombres de color#B3E2CD, #E78AC3, #B3DE69
disponibles ensample(col_vector,3)
. Alternativamente, Cómo encontrar todos los códigos hexadecimales dados porbrewer.pal
función con sus nombres de color.RColorBrewer
paletas no se derivan degrDevices
colores, que tienen nombres asignados, sino que son solo códigos hexadecimales, que yo sepa, no puede hacer esto conRColorBrewer
paletas, incluso las cualitativas.Aquí hay algunas opciones:
Echa un vistazo a la
palette
función:Y la
colorRampPalette
función:Mira el
colorBrewer
paquete (y el sitio web ). Si desea colores divergentes, seleccione divergentes en el sitio. Por ejemplo,El sitio web I want hue ofrece muchas paletas bonitas. Nuevamente, solo seleccione la paleta que necesita. Por ejemplo, puede obtener los colores rgb del sitio y hacer su propia paleta:
fuente
I want hue
Es un sitio web increíble. Esto es exactamente lo que quiero. Dado un número, cómo generar una paleta del número de colores. pero podemos hacerlo en R automáticamente?i want hue
tuviera una API que permitiera que se consultara automáticamente (tal vez sí, no pasé mucho tiempo buscando)i want hue
, aquí . La eficiencia podría mejorarse (por ejemplo, guardando muestras de color como objetos de datos), pero la idea general está ahí. (Cargar condevtools::source_gist('45b49da5e260a9fc1cd7')
)También puedes probar el
randomcoloR
paquete :Puede ver que se elige un conjunto de colores muy distintos al visualizar en un gráfico circular (como lo sugieren otras respuestas aquí):
Se muestra en un gráfico circular con 50 colores:
fuente
unname(distinctColorPalette(n))
para hacer que esto funcionara con ggplot. Supongo que ggplot necesita un vector sin nombre.col_vector <- unname(distinctColorPalette(n))
y luego... + scale_color_manual(values=col_vector) ...
No es una respuesta a la pregunta de OP, pero vale la pena mencionar que existe el
viridis
paquete que tiene buenas paletas de colores para datos secuenciales. Son perceptualmente uniformes, daltónicos seguros y fáciles de imprimir.Para obtener la paleta, simplemente instale el paquete y use la función
viridis_pal()
. Hay cuatro opciones "A", "B", "C" y "D" para elegirTambién hay una excelente charla que explica la complejidad de los buenos mapas de colores en YouTube:
Un mejor mapa de colores predeterminado para Matplotlib | SciPy 2015 | Nathaniel Smith y Stéfan van der Walt
fuente
Puede usar
colorRampPalette
desde la base o elRColorBrewer
paquete:Con
colorRampPalette
, puede especificar colores de la siguiente manera:También puede proporcionar códigos hexadecimales:
Con
RColorBrewer
usted podría usar colores de paletas preexistentes:Mire el
RColorBrewer
paquete para otras paletas disponibles. Espero que esto ayude.fuente
brewer.pal
. pero está limitado hasta 9 colores. De hecho, tengo más de 9 categorías. Las primeras alternativas generan un degradado de colores, que no es tan distintivo como quiero.Recomendaría utilizar una fuente externa para grandes paletas de colores.
http://tools.medialab.sciences-po.fr/iwanthue/
tiene un servicio para componer cualquier tamaño de paleta de acuerdo con varios parámetros y
/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815
analiza el problema genérico desde la perspectiva de los diseñadores gráficos y ofrece muchos ejemplos de paletas utilizables.
Para comprender una paleta de valores RGB, solo tiene que copiar los valores en un vector como, por ejemplo:
fuente
Encontré un sitio web que ofrece una lista de 20 colores distintivos: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
¡Puedes intentarlo!
fuente
n
colores distintivos, no un conjunto de colores definidos. Intenta actualizar tu respuestaPuede generar un conjunto de colores como este:
Estos colores son lo más distintos posible. Para esos colores similares, forman un gradiente para que pueda distinguir fácilmente las diferencias entre ellos.
fuente
Según tengo entendido, la búsqueda de colores distintivos está relacionada con la búsqueda eficiente desde un cubo unitario, donde 3 dimensiones del cubo son tres vectores a lo largo de los ejes rojo, verde y azul. Esto se puede simplificar para buscar en un cilindro (analogía HSV), donde se fija Saturación (S) y Valor (V) y se encuentran valores de Hue aleatorios. Funciona en muchos casos, y mira esto aquí:
https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatic/
En R,
Una forma alternativa es usar el paquete R "uniformemente" https://cran.r-project.org/web/packages/uniformly/index.html
y esta función simple puede generar colores distintivos:
Se puede pensar en una función un poco más complicada mediante la búsqueda de cuadrícula:
verifique estas funciones por:
Sin embargo, tenga en cuenta que definir una paleta distinta con colores perceptibles humanos no es simple. ¿Cuál de los enfoques anteriores genera un conjunto diverso de colores aún no se ha probado?
fuente
Puede usar el paquete Polychrome para este propósito. Solo requiere la cantidad de colores y unos pocos
seedcolors
. Por ejemplo:Puede obtener más información sobre este paquete en https://www.jstatsoft.org/article/view/v090c01 .
fuente