Recomendaciones de color y grosor de línea para gráficos de líneas

31

Mucho se ha escrito sobre las opciones de color amigables para los daltónicos para mapas, polígonos y regiones sombreadas en general (ver, por ejemplo, http://colorbrewer2.org ). No he podido encontrar recomendaciones para colores de línea y grosores de línea variables para gráficos de líneas. Los objetivos son:

  1. distinguir líneas fácilmente incluso cuando se entrelazan
  2. las líneas son fáciles de distinguir por individuos con las formas más comunes de daltonismo
  3. (menos importante) las líneas son fáciles de imprimir (ver Color Brewer arriba)

En el contexto de las líneas de escala de negro y gris, he encontrado que es muy efectivo tener líneas negras delgadas y líneas de escala de grises más gruesas. Agradecería recomendaciones específicas que incluyen colores variados, grado de escala de grises y grosor de línea. No soy tan aficionado a los diferentes tipos de línea (sólido / punteado / punteado), pero podría hablar de esa opinión.

Sería preferible tener recomendaciones para hasta 10 curvas en un gráfico. Aún mejor sería hacer lo que hace Color Brewer: permitir que las recomendaciones para m líneas no sean un subconjunto de recomendaciones para n líneas donde n> m, y que varíen m de 1 a 10.

Tenga en cuenta : También agradecería orientación que aborde solo la parte de la pregunta que colorea la línea.

Algunos practicantes agregan símbolos a las líneas cada pocos centímetros para distinguir mejor las diferentes clases. No estoy tan a favor que requiera más de una característica (por ejemplo, color + tipo de símbolo) para distinguir las clases, y a veces me gustaría reservar símbolos para denotar información diferente.

En ausencia de otra guía, propongo usar los mismos colores recomendados para polígonos en colorbrewer2.org para líneas, y multiplicar el ancho de línea por 2.5 para líneas dibujadas con colores menos brillantes / densos. Estoy creando una función R que configura esto. Además de los colores de los fabricantes de cerveza, creo que haré que los primeros 2 colores sean negro sólido (delgado) y escala de grises (grueso) aunque se podría argumentar que deberían ser negro sólido sólido y azul delgado.

Las funciones R se pueden encontrar en http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Una vez que defina la función colBrew, puede ver cómo funciona la configuración escribiendo

showcolBrew(number of line types)  # add grayscale=TRUE to use only grayscale

También latticeSetse proporciona una función para configurar latticelos parámetros gráficos a las nuevas configuraciones. Las mejoras a los algoritmos son bienvenidas.

Para explorar : dichromatpaquete R : http://cran.r-project.org/web/packages/dichromat/

Frank Harrell
fuente
2
Pensé que un número limitado de tipos de línea sería muy útil. Otra opción que parece no haberse mencionado todavía, es el uso de marcadores de puntos para mediciones individuales, por ejemplo, cruces, ceros, asteriscos, etc.
Robert Jones
1
Para mí, los marcadores de puntos no son completamente efectivos cuando las curvas se entrelazan. Pero he visto varios ejemplos en los que funcionan muy bien.
Frank Harrell

Respuestas:

21

Intentaré ser provocativo aquí y preguntarme si surge la ausencia de tales pautas porque este es un problema casi insoluble. Las personas en diferentes campos parecen estar de acuerdo en hablar a menudo sobre "parcelas de espagueti" y los problemas que plantean para distinguir diferentes series.

Concretamente, una masa de líneas para varias series de tiempo individuales puede transmitir colectivamente patrones generales y, a veces, series individuales que varían de cualquier patrón.

Sin embargo, la pregunta que considero es distinguir todas las series de tiempo individuales cuando tienen identidades que te importan.

Si dice series 2 o 3, distinguir series generalmente no es demasiado difícil, y tendería a usar líneas continuas en dos o tres de rojo, azul o negro. También he jugado con naranja y azul como lo usan Hastie y sus amigos (ver respuesta de @ user31264).

Variando el patrón de línea (sólido, guión, punteado, etc.) He encontrado un valor limitado. Las líneas punteadas tienden a desaparecer física y mentalmente y las combinaciones más sutiles de puntos y guiones son demasiado sutiles (es decir, leves) en contraste para tener éxito en la práctica.

Diría que el problema muerde mucho antes de que tengas 10 series. A menos que sean muy diferentes, 5 o más series pueden ser demasiado difíciles de distinguir. La psicología común parece ser que las personas entienden el principio de que las diferentes series están indicadas por diferentes colores y / o simbolismos perfectamente bien, pero carecen de la inclinación a trabajar duro para trazar las líneas individuales y tratar de mantener una historia sobre sus similitudes y diferencias en sus cabezas . Parte de esto a menudo proviene del uso de una leyenda (o clave). Es controvertido, pero trataría de etiquetar diferentes series en el gráfico siempre que sea posible. Mi lema aquí es "Pierde la leyenda, o mata la llave, si puedes".

Me he convertido en un enfoque diferente para mostrar múltiples series de tiempo, en el que todas las diferentes series de tiempo se muestran repetidamente en varios paneles, pero se resalta una diferente en cada uno. Esa es una fusión de una vieja idea (a) pequeños múltiplos (como los llama Edward Tufte) y otra vieja idea (b) que destaca una serie de particular interés. A su vez, puede ser otra nueva idea redescubierta, pero hasta ahora solo puedo encontrar referencias recientes. Más en este hilo sobre Statalist .

En términos de colores, soy positivo sobre el uso de grises para series de tiempo que son el telón de fondo de lo que se enfatiza. Eso parece ser consistente con la mayoría de las revistas en las que vale la pena publicar.

Aquí hay un experimento. Los datos son rendimientos de grano de 17 parcelas en los campos de Broadbalk en Rothamsted 1852-1925 y provienen de Andrews, DF y Herzberg, AM (Eds) 1985. Datos: una colección de problemas de muchos campos para el estudiante y el investigador . Nueva York: Springer, Tabla 5.1 y descargable desde varios lugares (por ejemplo, ingrese la descripción del enlace aquí . (Detalle: Los datos allí vienen en bloques de 4 líneas para cada año; la tercera y cuarta líneas son para rendimiento de paja, no se trazan aquí. los identificadores de la trama no son explícitos en esa tabla).

No tengo experiencia específica en este tipo de datos; Solo quería una serie de tiempo múltiple que no pudiera (fácilmente) descartarse como trivialmente pequeña en términos de longitud de serie o número de paneles. (Si tiene cientos, miles, ... de paneles, este enfoque realmente no puede ayudar mucho). Lo que estoy imaginando es que un analista de datos, tal vez hablando con un experto en la materia, podría identificar una variedad de comportamientos poco comunes aquí y obtener ideas e información de este modo.

ingrese la descripción de la imagen aquí

Evidentemente, esta receta podría usarse para muchos otros tipos de gráficos (por ejemplo, gráficos de dispersión o histogramas con cada subconjunto resaltado a su vez); junto con paneles de pedido de acuerdo con alguna medida o criterio interesante o útil (por ejemplo, por mediana o percentil 90 o DE); y para los resultados del modelo, así como los datos sin procesar.

Nick Cox
fuente
2
Estoy muy impresionado por el subconjunto. ¿Podría incluir algunas imágenes de salida de muestra directamente en su publicación? Tengo curiosidad por saber qué tan bien funciona, ya que el número de líneas varía, pero esta es definitivamente la solución más satisfactoria que he visto para ~ 10 líneas
Silverfish
@Silverfish Gracias por el aliento. Un experimento ahora agregado.
Nick Cox
1
Nick, estoy totalmente de acuerdo con "perder la etiqueta", minimizando las leyendas remotas, y con el uso de resaltar una curva a la vez, dejando que otras se atenúen como lo hiciste [puedes ser casi tan efectivo usando negro sólido para la curva resaltada] . Creo que esta es una gran idea para presentaciones, pero no es tan óptima para publicar un artículo debido a limitaciones de espacio.
Frank Harrell
Tal vez las tramas interactivas pronto se conviertan en un estándar en la publicación y podamos pasar el cursor sobre las líneas en las tramas y obtener más información (resaltar toda la línea o mostrar información sobre herramientas para darle más información, etc.).
bdeonovic
1
@Frank Harrell La cuestión de las picaduras de espacio (1) si los paneles de gráficos individuales se vuelven demasiado pequeños para ser legibles, en cuyo caso los méritos del diseño son dudosos; (2) si las revistas o los editores de libros no pueden ser persuadidos para asignar más espacio para una figura más grande de lo normal si parece que vale la pena. (Quizás tenías otros puntos en mente.)
Nick Cox
14

Preguntas 2 y 3 que usted mismo respondió: las paletas de cerveceras de color son adecuadas. La pregunta difícil es 1, pero como Nick, me temo que se basa en una falsa esperanza. El color de las líneas no es lo que hace que uno pueda distinguir fácilmente entre las líneas, se basa en la continuidad y cuán tortuosas son las líneas. Por lo tanto, hay opciones basadas en el diseño, que no sean el color o el patrón de trazos de las líneas, que ayudarán a que la trama sea más fácil de interpretar.

Como ejemplo, robaré uno de los diagramas de Frank que muestran la flexibilidad de las splines para aproximar muchas funciones con diferentes formas en un dominio limitado.

#code adapted from http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RmS/rms.pdf page 40
library(Hmisc)
x <- rcspline.eval(seq(0,1,.01), knots=seq(.05,.95,length=5), inclx=T)
xm <- x
xm[xm > .0106] <- NA
x <- seq(0,1,length=300)
nk <- 6
set.seed(15)
knots<-seq(.05,.95,length=nk)
xx<-rcspline.eval(x,knots=knots,inclx=T)
for(i in 1:(nk1)){
  xx[,i]<-(xx[,i]−min(xx[,i]))/
  (max(xx[,i])−min(xx[,i]))
for(i in 1:20){
  beta<-2runif(nk1)−1
  xbeta<-xx%∗%beta+2runif(1)−1
  xbeta<-(xbetamin(xbeta))/
         (max(xbeta)−min(xbeta))
  if (i==1){
  id <- i
  MyData <- data.frame(cbind(x,xbeta,id))
  }
  else {
          id <- i
          MyData <- rbind(MyData,cbind(x,xbeta,id))
       }
  }
}
MyData$id <- as.factor(MyData$id)

Ahora esto produce un lío bastante enredado de 20 líneas, un desafío difícil de visualizar.

library(ggplot2)
p1 <- ggplot(data = MyData, aes(x = x, y = V2, group = id)) + geom_line()
p1

Lío de líneas

Aquí está la misma trama en pequeños múltiplos, del mismo tamaño, usando paneles envueltos. Es un poco más difícil hacer comparaciones entre paneles, pero incluso en el espacio reducido es mucho más fácil visualizar la forma de las líneas.

p2 <- p1 + facet_wrap(~id) + scale_x_continuous(breaks=c(0.2,0.5,0.8))
p2

Los 20 paneles

Un punto que Stephen Kosslyn hace en sus libros es que no es cuántas líneas diferentes hacen que la trama sea complicada, es cuántos tipos diferentes de formas pueden tomar las líneas. Si 20 paneles terminan siendo demasiado pequeños, con frecuencia puede reducir el conjunto a trayectorias similares para colocar en el mismo panel. Todavía es difícil distinguir entre las líneas dentro de los paneles, por definición estarán cerca una de la otra y se superpondrán con frecuencia, pero reduce bastante la complejidad de hacer comparaciones entre paneles. Aquí reduje arbitrariamente las 20 líneas en 4 agrupaciones separadas. Esto tiene el beneficio adicional de que el etiquetado directo de líneas es más simple, hay más espacio dentro de los paneles.

###############1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
newLevels <- c(1,1,2,2,2,2,2,1,1, 2, 3, 3, 3, 3, 2, 4, 1, 1, 2, 1)
MyData$idGroup <- factor(newLevels[MyData$id])
p3 <- ggplot(data = MyData, aes(x = x, y = V2, group = id)) + geom_line() + 
             facet_wrap(~idGroup)
p3

Paneles reducidos

Hay una frase general que es aplicable a la situación, si te enfocas en todo, no te enfocas en nada . En el caso de solo diez líneas, tiene (10*9)/2=45posibles pares de líneas para comparar. Probablemente no estamos interesados ​​en las 45 comparaciones en la mayoría de las circunstancias, o estamos interesados ​​en comparar líneas específicas entre sí o comparar una línea con la distribución del resto. La respuesta de Nick muestra esta última muy bien. Dibujar las líneas de fondo delgadas, de color claro y semitransparentes, y luego dibujar la línea de primer plano en cualquier color brillante y más grueso será suficiente. (¡También para el dispositivo, asegúrese de dibujar la línea de primer plano sobre las otras líneas!)

Es mucho más difícil crear una estratificación donde cada línea individual se pueda distinguir fácilmente en la maraña. Una forma de lograr la diferenciación entre el primer plano y el fondo en la cartografía es el uso de sombras (consulte este documento de Dan Carr para un buen ejemplo). Esto no escalará hasta 10 líneas, pero puede ayudar para 2 o 3 líneas. ¡Aquí hay un ejemplo para las trayectorias en el Panel 1 usando Excel!

Excel Shadow

Hay otros puntos que destacar, como las líneas grises claras que pueden ser engañosas si tiene trayectorias que no son suaves. Por ejemplo, podría tener dos trayectorias en forma de X, o dos en forma de un lado derecho hacia arriba y hacia abajo V. Dibujándolas del mismo color no podría trazar las líneas, y esta es la razón por la cual algunos sugieren dibujar gráficas de coordenadas paralelas utilizando líneas suaves o fluctuaciones / desviaciones de los puntos ( Graham y Kennedy, 2003 ; Dang et al., 2010 ).

Por lo tanto, los consejos de diseño pueden cambiar según el objetivo final y la naturaleza de los datos. Pero cuando es interesante hacer comparaciones bivariadas entre las trayectorias, creo que la agrupación de trayectorias similares y el uso de pequeños múltiplos hacen que las tramas sean mucho más fáciles de interpretar en una amplia variedad de circunstancias. Esto creo que es generalmente más productivo que cualquier combinación de colores / líneas discontinuas en trazados complicados. Los trazados de paneles individuales en muchos artículos son mucho más grandes de lo que deben ser, y la división en 4 paneles generalmente es posible dentro de las restricciones de página sin mucha pérdida.

Andy W
fuente
3
Andy, esto es maravilloso. Creo que para este ejemplo de curva de spline en particular, sería igual de efectivo, o incluso más efectivo, asignar 5 colores a las 20 líneas para que las curvas más cercanas se asignen a diferentes colores. No hay una métrica de distancia que siempre funcione, pero generalmente hay una métrica que funciona para una situación dada. Como dijiste, todo esto depende de la suavidad y la tortuosidad.
Frank Harrell
5

De "Los elementos del aprendizaje estadístico" de Trevor Hastie et al. :

"Nuestra primera edición no fue amigable para los lectores daltónicos; en particular, tendemos a favorecer los contrastes rojo / verde que son particularmente problemáticos. Hemos cambiado la paleta de colores en esta edición en gran medida, reemplazando el anterior con un contraste naranja / azul". "

Es posible que desee ver sus gráficos.

También puede usar líneas discontinuas, punteadas, etc.

usuario31264
fuente
4

He visto muy poca atención al "grosor de línea" en lo que respecta a la visualización de datos adecuada. Quizás la capacidad de discernir diferentes grosores de línea no sea tan variable como la capacidad de discernir el color.

Algunos recursos:

  1. Hadley Wickham (2009), ggplot: Gráficos elegantes para el análisis de datos , Springer; tiene una página web de apoyo
  2. 8 recursos de libros sugeridos sobre visualización de datos: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

Algunos cursos:

  1. Conferencia de gráficos en el curso introductorio de computación para bioestadística de Thomas Lumley
  2. Curso de posgrado de Ross Ihaka sobre análisis de datos computacionales y gráficos
  3. Curso de pregrado de Ross Ihaka sobre visualización de información
  4. Curso de pregrado de Deborah Nolan Conceptos en Computación con Datos
  5. Curso de visualización de datos de Hadley Wickham
bdeonovic
fuente
77
Esa es una gran lista de recursos. Sin embargo, ¿hay alguna recomendación específica que conozca, de una o más de ellas, que se relacione con la pregunta (grosor de línea, con líneas de color, donde puede haber muchas líneas), que podría mencionar brevemente?
Glen_b -Reinstate Monica
Me tomé la libertad de formatear tu publicación. Creo que hace que sea más fácil ver la estructura. Si no te gusta, retrocede con mis disculpas.
gung - Restablece a Monica
2

Si bien estoy de acuerdo en que no hay una solución única para el problema, uso la recomendación de este blog:

http://blogs.nature.com/methagora/2013/07/data-visualization-points-of-view.html

Las publicaciones sobre color abordan los problemas de daltonismo e impresión en escala de grises y dan un ejemplo de escala de color que resuelve estos dos problemas.

En los mismos artículos también se analizan las escalas de color continuas, que muchos utilizan para gráficos de calor, etc. Se recomienda no usar el arco iris, debido a algunas transiciones bruscas (como la zona amarilla, mucho más pequeña que la roja). En cambio, es posible hacer transiciones entre otros pares de colores.

Un buen conjunto de colores para este propósito es azul y naranja (¡un clásico!). Puede hacer una prueba aplicando filtros daltónicos y grises y ver si aún puede notar la diferencia.

Para el grosor de las líneas, algunos de los temas del blog mencionados anteriormente abordan este punto. Las líneas, si tiene muchas, deben tener el mismo grosor, que es "delgado". Use líneas gruesas solo si desea llamar la atención sobre ese objeto.

chuse
fuente
1
No estoy totalmente de acuerdo con "Usar solo líneas gruesas ...". Las líneas gruesas de escala de grises pueden ser muy efectivas en muchos casos.
Frank Harrell el
1
Puede ser seguramente. Solo quería decir que si usa un estilo llamativo, debe usarse con un propósito.
chuse