La "mejor" serie de colores para usar para diferenciar series en trazados con calidad de publicación

89

¿Se ha realizado algún estudio sobre cuáles son los mejores colores para mostrar múltiples series en la misma trama? Acabo de usar los valores predeterminados matplotlib, y se ven un poco infantiles ya que todos son colores brillantes y primarios.

David Hollman
fuente
28
Esto no responde a su pregunta, pero creo que es importante mencionarlo. Siempre que sea posible, cualquier combinación de colores elegida debe complementarse con diferentes símbolos o estilos de línea, de modo que cuando el diagrama se imprima en blanco y negro, aún sea fácil de entender. Con demasiada frecuencia, los autores confían únicamente en el color, lo que hace que las figuras sean inútiles para los daltónicos y aquellos que prefieren leer la versión impresa en blanco y negro de su papel. Las parcelas siempre deben, si es posible, trabajar en blanco y negro, y trabajar "mejor" en color.
WetlabStudent
11
+1 a MHH. Un legendario comentario televisivo sobre el snooker señala indirectamente el mismo punto: "Steve va por la pelota rosa, y para aquellos de ustedes que están mirando en blanco y negro, el rosa está al lado del verde". Explicación para los lectores más jóvenes: Eso proviene de un momento en que algunas personas podían pagar la televisión en color, pero otras tenían que optar por la televisión en blanco y negro más barata.
Nick Cox
55
¿"Mejor" para qué propósito? Esta no es una pregunta trivial o frívola. Para impresionar a los lectores de un foro de Internet, utilizo símbolos gráficos que funcionan sin color y luego los decoro con colores del arcoíris (que pueden ser significativos pero que están ahí principalmente para atraer la atención y dar una sensación de "calidad"). Para los gráficos que están destinados a transmitir datos, se puede elegir otro esquema de color, mientras que para los gráficos que se crean de forma exploratoria para revelar patrones posiblemente inesperados (en una gestalt visual ), el esquema debe depender del propósito: diferenciación, agregación, selección, ¿otro?
whuber
2
@whuber: Tú haces un punto. Debería haber especificado que tenía intención de publicar en la literatura científica, y en general tenía la intención de pedir respuestas a cada una de las categorías de agregación, selección, diferenciación, etc. De hecho, la agregación y la diferenciación a menudo no son objetivos separados: en las figuras de uno de mis documentos ( dx.doi.org/10.1063/1.4864755 ), necesitaba ambos (y no creo que lo haya hecho muy bien). (Lo siento para aquellos de ustedes que no están en los campus académicos; intentaré poner un enlace público general pronto)
David Hollman

Respuestas:

53

Una referencia común para elegir una paleta de colores es el trabajo de Cynthia Brewer en ColorBrewer . Los colores se eligieron en función de los patrones perceptuales en los mapas coropléticos, pero la mayoría de los mismos consejos se aplican al uso del color en cualquier tipo de diagrama para distinguir los patrones de datos. Si el color es únicamente para distinguir entre las diferentes líneas, entonces está en orden una paleta cualitativa.

A menudo, no se necesita color en los gráficos de líneas con solo unas pocas líneas, y los diferentes símbolos de puntos y / o patrones de guiones son lo suficientemente efectivos. Un problema más común con los gráficos de líneas es que si las líneas se superponen con frecuencia, será difícil distinguir diferentes patrones sin importar qué símbolos o colores use. Stephen Kosslyn recomienda una regla general para tener solo 4 líneas en una parcela. Si tiene más, considere dividir las líneas en una serie de pequeñas parcelas múltiples. Aquí hay un ejemplo que muestra la recomendación.

No se necesita color y las etiquetas son más que suficientes.

Andy W
fuente
44
¡Me encanta la paleta "Dark2" de ColorBrewer!
Gimelist
55
¡Gracias por la recomendación de ColorBrewer! Ese es el tipo de cosas que estaba buscando.
David Hollman
La imagen en escala de grises no funciona si hay dos series con el mismo valor en el medio (las dos series no se pueden rastrear más allá de ese punto) o al final (las etiquetas no podrán distinguir qué serie es cual). Sin embargo, es genial cuando funciona ...
naught101
De acuerdo @ naught101 para el medio (los extremos coinciden solo coloque la etiqueta en algún lugar antes del final). Es una razón para no usar interpolación lineal entre puntos, sino usar algún tipo de spline. En ese caso, la spline se curvará en diferentes direcciones. Eso sucede bastante en densas parcelas de coordenadas paralelas. (La fluctuación de fase también puede ayudar con datos con muchos vínculos, como datos de recuento de números enteros bajos.)
Andy W
1
Sus comentarios sobre datos a saber. Los libros en Amazon son increíbles. Gracias por eso.
Andy W
40

Muchos consejos extraordinariamente buenos en otras respuestas, pero aquí hay algunos puntos adicionales de mis propios consejos de bajo nivel para los estudiantes. Todo esto es solo un consejo, naturalmente, para pensar en las preguntas clave: ¿Qué pretende hacer mi gráfica? ¿Qué tiene sentido con estos datos? ¿Quiénes son los lectores? ¿Qué espero que los colores hagan dentro del gráfico? ¿El gráfico funciona bien, independientemente de los dogmas de otra persona?

Además, la importancia del color varía enormemente de un gráfico a otro. Para un mapa de coropletas o parches, en el que la idea es que diferentes áreas están coloreadas o al menos sombreadas de manera diferente, el éxito de un gráfico está ligado al éxito de su esquema de color. Para otros tipos de gráficos, los colores pueden ser prescindibles o incluso una molestia.

  1. ¿Se necesitan todos sus colores? Por ejemplo, si diferentes variables o grupos se distinguen claramente por las etiquetas de texto en diferentes regiones de un gráfico, entonces los colores separados también serían excesivos. Cuidado con la ensalada de frutas o los efectos de capa de sueño tecnicolor. Para un gráfico circular con etiquetado de texto en o por los cortes, el color no transmite información adicional, por ejemplo. (Si su gráfico circular depende de una clave o leyenda, es probable que esté probando el tipo de gráfico incorrecto).

  2. Nunca confíes en un contraste entre rojo y verde, ya que muchas personas luchan por distinguir estos colores.

  3. Las secuencias del arco iris (ROYGBIV o rojo-naranja-amarillo-verde-azul-índigo-violeta) pueden atraer por motivos físicos, pero no funcionan bien en la práctica. Por ejemplo, el amarillo suele ser un color débil, mientras que el naranja y el verde suelen ser más fuertes, por lo que la impresión ni siquiera es de una secuencia monotónica.

  4. Evite cualquier esquema de color que tenga la consecuencia de grandes manchas de color fuerte.

  5. Una secuencia de rojo oscuro a azul oscuro funciona bien cuando se necesita una secuencia ordenada. Si el blanco es (como de costumbre) el color de fondo en cualquier lugar, no lo use, pero pase del rojo pálido al azul pálido. [agregado el 1 de marzo de 2018] Quizás demasiado obvio para subrayar: el rojo tiene connotaciones negativas y / o peligrosas para muchos, lo que puede ser útil, y el azul puede significar positivo. Demasiado obvio para subrayar, pero lo hago de cualquier manera: el rojo y el azul tienen connotaciones políticas en muchos países.

  6. Azul y naranja van bien juntos (un guiño agradecido a Hastie, Tibshirani y Friedman aquí: http://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf ) [agregado el 1 de marzo de 2018] Muchos Los libros introductorios sobre visualización ahora recomiendan el naranja, el azul y el gris como paleta básica: naranja y / o azul para lo que le interesa y gris para el fondo.

  7. La escala de grises del gris pálido al gris oscuro puede funcionar bien y es una buena idea cuando la reproducción del color está fuera de discusión. (Es una impresora pésima que no puede hacer una fiesta justa en escala de grises). (Gris si lo desea; las preferencias cambian en los océanos, al parecer; al igual que con el color y el color).

  8. [añadido el 5 de agosto de 2016] Un principio bastante general es que a menudo dos colores funcionan mucho mejor que muchos. Si dos grupos son de interés, elija colores igualmente fuertes (por ejemplo, rojo o naranja y azul). Si un grupo es de particular interés entre varios, conviértalo en azul o naranja y deje que los demás sean grises. El uso de siete colores para siete grupos en principio lleva la información, pero es difícil incluso enfocarse en un color a la vez cuando hay competencia de varios otros. Los múltiplos pequeños pueden ser mejores para varios grupos que un gráfico multicolor.

Nick Cox
fuente
1
Muy buen punto sobre colores débiles y fuertes
shadowtalker
2
El punto 2 es MUY importante. Uno de mis maestros de estadística era daltónico y felizmente usaba "amarillo claro" y "amarillo verde claro" en una tabla. El color era prácticamente idéntico al nuestro, pero para él eran fácilmente distinguebles.
Christian Sauer
1
Gracias por los consejos, especialmente # 2. Volví a mirar mis parcelas y me di cuenta de que el rojo y el verde son los dos primeros colores que matplotlib siempre elige. Eso no es tan bueno.
David Hollman
Eso parece un defecto tonto.
Nick Cox
27

En realidad, se ha investigado mucho sobre esto en los últimos años.

Un gran punto es la "resonancia semántica". Básicamente, esto significa "colores que corresponden a lo que representan", por ejemplo, una serie temporal de dinero debe ser de color verde, al menos para una audiencia en los Estados Unidos. Esto aparentemente mejora la comprensión. Un artículo muy interesante sobre el tema es el de Lin, et al (2013): http://vis.stanford.edu/papers/semantically-resonant-colors

También está el generador de color iWantHue muy agradable, en http://tools.medialab.sciences-po.fr/iwanthue/ , con mucha información en las otras pestañas.

Referencias

Lin, Sharon, Julie Fortuna, Chinmay Kulkarni, Maureen Stone y Jeffrey Heer. (2013) Selección de colores semánticamente resonantes para la visualización de datos. Foro de gráficos por computadora (Proc. EuroVis), 2013

Shadowtalker
fuente
13
+1 ... sin embargo, algunas cosas, como su ejemplo de dinero , no son universales. El dinero puede ser verde (-ish) en los Estados Unidos. No es verde en todas partes y la asociación con el color puede variar de un país a otro (por ejemplo, alguien en Alemania podría asociar más el azul con el dinero, aunque hoy en día tiende a tener una amplia variedad de colores).
Glen_b
@Glen_b buen punto
shadowtalker
1
+1 por citar documentos, que aborda mejor las tres primeras palabras de la pregunta :-)
David Hollman
22

Paul Tol proporciona un esquema de color optimizado para las diferencias de color (es decir, datos categóricos o cualitativos) y una visión daltónica en su sitio web , y en detalle en una "nota técnica" (archivo PDF) vinculada allí. Él afirma:

Para que los gráficos con sus resultados científicos sean lo más claros posible, es útil tener una paleta de colores que sean:

  • distinto para todas las personas, incluidos los lectores daltónicos;
  • distinto del blanco y negro;
  • distinto en pantalla y papel; y
  • Todavía coinciden bien juntos.

Tomé el esquema de color de su "Paleta 1" de los 9 colores más distintos, y lo coloqué en mi matplotlibrcarchivo debajo de axes.color_cycle:

axes.color_cycle    : 332288, 88CCEE, 44AA99, 117733, 999933, DDCC77, CC6677, 882255, AA4499

Luego, tomando prestado de la respuesta de Joe Kington las líneas predeterminadas según lo trazado por:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

x = np.linspace(0, 20, 100)

fig, axes = plt.subplots(nrows=2)

for i in range(1,10):
    axes[0].plot(x, i * (x - 10)**2)

for i in range(1,10):
    axes[1].plot(x, i * np.cos(x))

plt.show()

resultados en:

ingrese la descripción de la imagen aquí

Para mapas de colores divergentes (por ejemplo, para representar valores escalares), la mejor referencia que he visto es el artículo de Kenneth Moreland disponible aquí " Mapas de colores divergentes para visualización científica ". Desarrolló el esquema frío-cálido para reemplazar el esquema del arco iris, y "presenta un algoritmo que permite a los usuarios generar fácilmente sus propios mapas de colores personalizados".

Otra fuente útil de información sobre el uso del color en las visualizaciones científicas proviene de Robert Simmon, el hombre que creó la imagen "Blue Marble" para la NASA. Vea su serie de publicaciones en el sitio web del Observatorio de la Tierra.

un ben diferente
fuente
66
+1 a la única (!) Respuesta de nueve que realmente muestra colores en respuesta a la pregunta sobre "mejores colores".
ameba
@amoeba: bueno, ya no :-)
Tung
20

En colorbrewer2.org puede encontrar esquemas de color cualitativos , secuenciales y divergentes . Cualitativo maximiza la diferencia entre colores sucesivos, y eso es lo que estoy usando en gnuplot. La belleza del sitio es que puede copiar fácilmente los códigos hexadecimales de los colores para que sean muy fáciles de importar. Como ejemplo, estoy usando el siguiente conjunto de 8 colores:

#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf

Es bastante agradable y produce resultados claros.

Como nota al margen, la secuencial se usa cuando necesita un gradiente suave y divergente cuando necesita resaltar las diferencias de un valor central (por ejemplo, la elevación de la montaña y la profundidad del mar). Puede leer más sobre estos esquemas de color aquí .

Joseph D'Arimathea
fuente
1
Personalmente, no creo que el amarillo brillante sea un color de trama claro
rombodecaedro
11

Hay muchos sitios web dedicados a elegir paletas de colores. No sé si hay un conjunto particular de colores que sea objetivamente el mejor, tendrá que elegir según su audiencia y el tono de su trabajo.

Visite http://www.colourlovers.com/palettes o http://design-seeds.com/index.php/search para comenzar. Algunos de ellos tienen colores que son dos cercanos para mostrar diferentes grupos, pero otros le darán colores complementarios en un rango más amplio.

También puede consultar los conjuntos de colores predefinidos no predeterminados en Matplotlib .

Jordan Bentley
fuente
5

Me gusta la paleta Dark2 de colorbrewer para diagramas de dispersión. Usamos esto en el libro de ggobi , www.ggobi.org/book . Pero de lo contrario, las paletas de colores están destinadas a áreas geográficas en lugar de trazados de datos. La buena elección del color sigue siendo un problema para las parcelas basadas en puntos.

Los paquetes R colorspacey dichromatson útiles. colorspacepermite la selección de colores alrededor del volante: puede pasar horas / días afinando. dichromatayuda a verificar el daltonismo.

ggplot2 generalmente tiene buenos valores predeterminados, aunque no necesariamente prueba de daltonismo.

El esquema rojo a azul divergente se ve bien en su computadora pero no se proyecta bien.

Dianne Cook
fuente
3

Otra posibilidad sería encontrar un conjunto de colores que sean a) equidistantes en LAB, b) tenga en cuenta el daltonismo yc) que se ajuste a la gama del espacio de color sRGB, así como a la gama de espacios CMYK más comunes.

Creo que el último requisito es una necesidad para cualquier método de selección de colores: no sirve de nada si los colores se ven bien en la pantalla, pero se confunden cuando se imprimen en un proceso CMYK. Y dado que el OP especificó "calidad de publicación", supongo que los gráficos se imprimirán en CMYK.

JenSCDC
fuente
3

Este es mi esquema favorito. Tiene 20 (!!!!) colores distintos, todos los cuales son fácilmente distinguibles. Sin embargo, probablemente falla para las personas daltónicas.

#e6194b
#3cb44b
#ffe119
#0082c8
#f58231
#911eb4
#46f0f0
#f032e6
#d2f53c
#fabebe
#008080
#e6beff
#aa6e28
#fffac8
#800000
#aaffc3
#808000
#ffd8b1
#000080
#808080
#ffffff
#000000
enigmáticoFísico
fuente
2

Al trazar líneas, debe tener cuidado con el verde y el amarillo, que no se muestran bien en los proyectores. Como eventualmente reutilizo la mayoría de mis tramas en presentaciones, evito estos colores incluso si la intención original es la publicación en pantalla o en papel.

En aras de mantener un alto contraste, eso me deja con negro, rojo, azul, magenta, cian y, si realmente lo necesito, uso gris. De hecho, la mayoría de estos son colores brillantes, primarios o secundarios. Sé que podría no ser óptimo desde un punto de vista estético, pero estoy más interesado en la claridad de lo que estoy presentando. Por otro lado, reutilizar consistentemente los mismos colores de una paleta limitada puede ser algo estético.

Si está usando más de 6 líneas, está llenando más espacio y avanzando hacia el trazado de bloques de color. Para este tipo de trama, creo que cada caso debe considerarse por separado. ¿Quieres que se destaquen los extremos o los cruces por cero? ¿Sus datos son cíclicos (por ejemplo, 0 y 2π deben usar el mismo color)? ¿Existe una analogía con estándares como el azul / rojo para la temperatura? ¿El blanco representa NaN, no hay datos, o se utilizará como resaltado? etcétera etcétera.

craq
fuente
2

Para los espectadores daltónicos, CARTOColors tiene un esquema cualitativo de daltonismo Safeque se basa en los esquemas de color populares de Paul Tol . Esta paleta consta de 12 colores fácilmente distinguibles.

Otra gran paleta cualitativa para personas daltónicas es el esquema Okabe e Ito propuesto en su artículo "Color Universal Design (CUD): Cómo hacer figuras y presentaciones que sean amigables para las personas daltónicas".

### Example for R users
library(ggplot2)
library(rcartocolor)
library(patchwork)
theme_set(theme_classic(base_size = 14) + theme(panel.background = element_rect(fill = "#ecf0f1")))

set.seed(123)
df <- data.frame(x = rep(1:5, 8), 
                 value = sample(1:100, 40), 
                 variable = rep(paste0("category", 1:8), each = 5))

safe_pal <- carto_pal(12, "Safe")
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", 
                            "#0072B2", "#D55E00", "#CC79A7", "#000000")

# plot
p1 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_line(aes(colour = variable), size = 1) +
  scale_color_manual(values = palette_OkabeIto_black)


p2 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_col(aes(fill = variable)) +
  scale_fill_manual(values = safe_pal)

p1 / p2

Tung
fuente