33 votos

Recomendaciones sobre el color y el grosor de las líneas de los gráficos lineales

Se ha escrito mucho sobre las opciones de color compatibles con los daltónicos para mapas, polígonos y regiones sombreadas en general (véase, por ejemplo http://colorbrewer2.org ). No he podido encontrar recomendaciones sobre los colores de las líneas y la variación del grosor de las mismas para los gráficos de líneas. Los objetivos son:

  1. distinguir fácilmente las líneas aunque se entrecrucen
  2. las líneas son fáciles de distinguir por las personas con las formas más comunes de daltonismo
  3. las líneas (menos importantes) son aptas para la impresión (véase el apartado anterior sobre la elaboración de colores)

En el contexto de las líneas negras y de la escala de grises, he encontrado que es muy efectivo tener líneas negras finas y líneas de escala de grises más gruesas. Agradecería recomendaciones específicas que incluyan la variación de colores, el grado de escala de grises y el grosor de las líneas. No me gusta tanto variar los tipos de líneas (sólidas/puntos/rayas), pero se me podría disuadir de esa opinión.

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

Tenga en cuenta : También agradecería una orientación que abordara únicamente la parte de la pregunta relativa a la coloración de las líneas.

Algunos profesionales añaden símbolos a las líneas cada pocos centímetros para distinguir mejor las diferentes clases. Yo no estoy tan a favor de que se 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.

A falta de otras orientaciones, propongo utilizar para las líneas los mismos colores recomendados para los polígonos en colorbrewer2.org, y multiplicar el ancho de la línea por 2,5 para las líneas dibujadas con colores menos brillantes/densos. Estoy creando una función de R que establece esto. Además de los colores de color brewer creo que haré que los primeros 2 colores sean negro sólido (fino) y escala de grises (grueso) aunque se podría argumentar que deberían ser negro sólido fino y azul fino.

Las funciones de R pueden encontrarse en http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Una vez definida la función colBrew puedes ver cómo funcionan los ajustes escribiendo

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

Una función latticeSet también se da, para establecer lattice los parámetros gráficos a la nueva configuración. Las mejoras de los algoritmos son bienvenidas.

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

2 votos

Yo habría pensado que un número limitado de tipos de línea sería muy útil. Otra opción que no parece haber sido mencionada aún, es el uso de marcadores de puntos para medidas individuales, por ejemplo, cruces, ceros, asteriscos, etc.

2 votos

Para mí, los marcadores de puntos no son del todo eficaces cuando las curvas se entrecruzan. Pero he visto varios ejemplos en los que funcionan muy bien.

23voto

Nick Cox Puntos 22819

Intentaré ser provocador y me preguntaré si la ausencia de tales directrices se debe a que se trata de un problema casi insoluble. Personas de campos muy diferentes parecen coincidir en hablar a menudo de los "spaghetti plots" y de los problemas que plantean para distinguir las distintas series.

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

La pregunta, sin embargo, entiendo que se trata de distinguir todas las series temporales individuales cuando tienen identidades que te interesan.

Si tiene, digamos, 2 o 3 series, distinguir las series no suele ser demasiado difícil, y yo tendería a utilizar líneas sólidas en dos o tres de rojo, azul o negro. También he jugado con el naranja y el azul, tal y como utilizan Hastie y sus amigos (véase la respuesta de @user31264).

Variar el patrón de las líneas (sólidas, discontinuas, punteadas, etc.) me ha parecido de escaso valor. Las líneas punteadas tienden a desvanecerse física y mentalmente, y las combinaciones más sutiles de puntos y rayas son demasiado sutiles (es decir, ligeras) en cuanto al contraste para tener éxito en la práctica.

Yo diría que el problema pica mucho antes de tener 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 la gente entiende perfectamente el principio de que las diferentes series están indicadas por diferentes colores y o simbolismo, 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 se debe a menudo al uso de una leyenda (o clave). Es controvertido, pero yo trataría de etiquetar las diferentes series en el gráfico siempre que fuera posible. Mi lema en este caso es "Pierde la leyenda, o mata la clave, si puedes".

Me he aficionado a un enfoque diferente para mostrar múltiples series temporales, en el que todas las diferentes series temporales se muestran repetidamente en varios paneles, pero se destaca una diferente en cada uno. Se trata de una fusión de una vieja idea (a) los pequeños múltiplos (como los llama Edward Tufte) y otra vieja idea (b) destacar una serie de interés particular. A su vez, es posible que se trate de otra vieja idea redescubierta, pero hasta ahora sólo he encontrado referencias recientes. Más en este hilo en Statalist .

En cuanto a los colores, soy partidario de utilizar los grises para las series temporales que son el telón de fondo de lo que se está enfatizando. Eso parece ser coherente con la mayoría de las revistas en las que vale la pena publicar.

He aquí un experimento. Los datos son rendimientos de grano de 17 parcelas en los campos de Broadbalk en Rothamsted 1852-1925 y vienen de Andrews, D.F. y Herzberg, A.M. (Eds) 1985. Datos: Una colección de problemas de muchos campos para el estudiante y el investigador . Nueva York: Springer, cuadro 5.1 y descargable en varios lugares (por ejemplo introduzca aquí la descripción del enlace . (Detalle: Los datos vienen en bloques de 4 líneas para cada año; la tercera y la cuarta línea son para el rendimiento de paja, no representadas aquí. Los identificadores de las parcelas no son explícitos en esa tabla).

No tengo ninguna experiencia específica en este tipo de datos; sólo quería una serie temporal múltiple que no pudiera descartarse (fácilmente) por ser trivialmente pequeña en términos de longitud de la serie o número de paneles. (Si tiene cientos, miles, ... de paneles, este enfoque 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 comunes y no comunes aquí y obtener ideas e información de ese modo.

enter image description here

Evidentemente, esta receta podría utilizarse 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 la ordenación de los paneles según alguna medida o criterio interesante o útil (por ejemplo, por la mediana o el percentil 90 o la DE); y para los resultados del modelo, así como para los datos brutos.

2 votos

Estoy muy impresionado por el subsetplot. ¿Podrías incluir algunas imágenes de salida de muestra directamente en tu post? 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

0 votos

@Silverfish Gracias por los ánimos. Un experimento ahora añadido.

1 votos

Nick estoy totalmente de acuerdo con "perder la etiqueta" - minimizar las leyendas remotas - y con el uso de resaltar una curva a la vez, dejando que las otras se atenúen como tú lo hiciste [puedes ser casi igual de efectivo usando negro sólido para la curva resaltada]. Creo que esta es una gran idea para las presentaciones, pero no es tan óptima para la publicación de un documento debido a las limitaciones de espacio.

15voto

Judioo Puntos 625

Las preguntas 2 y 3 las has respondido tú mismo: las paletas de colores de los cerveceros son adecuadas. La pregunta difícil es la 1, pero al igual que Nick me temo que se basa en una falsa esperanza. El color de las líneas no es lo que hace que uno sea capaz de distinguir entre las líneas fácilmente, se basa en la continuidad y en lo tortuosas que son las líneas. Por lo tanto, hay opciones basadas en el diseño, aparte del color o el patrón de guiones de las líneas, que ayudarán a que la trama sea más fácil de interpretar.

Voy a robar uno de los diagramas de Frank que muestra la flexibilidad de las splines para aproximar muchas funciones de formas diferentes en un dominio limitado como ejemplo.

#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:(nk−1)){
  xx[,i]<-(xx[,i]−min(xx[,i]))/
  (max(xx[,i])−min(xx[,i]))
for(i in 1:20){
  beta<-2∗runif(nk−1)−1
  xbeta<-xx%∗%beta+2∗runif(1)−1
  xbeta<-(xbeta−min(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)

Esto produce una maraña de 20 líneas, un reto difícil de visualizar.

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

Mess of Lines

Aquí está la misma parcela en pequeños múltiplos, al mismo tamaño, utilizando 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

All 20 Panels

Un punto que Stephen Kosslyn hace en sus libros es que no es el número de líneas diferentes lo que hace que la trama sea complicada, sino cuántos tipos diferentes de formas pueden tomar las líneas. Si 20 paneles acaban siendo demasiado pequeños, con frecuencia se puede reducir el conjunto a trayectorias similares para colocarlas en el mismo panel. Sigue siendo difícil distinguir entre las líneas dentro de los paneles, por definición estarán cerca unas de otras y se solapará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 la ventaja añadida de que el etiquetado directo de las líneas es más sencillo, 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

Reduced Panels

Hay una frase general que es aplicable a la situación, si te centras en todo te centras en nada . En el caso de sólo diez líneas, tiene (10*9)/2=45 posibles pares de líneas para comparar. Probablemente no nos interesen las 45 comparaciones en la mayoría de las circunstancias, sino que nos interese comparar líneas específicas entre sí o comparar una línea con la distribución del resto. La respuesta de Nick muestra muy bien esto último. Dibujar las líneas de fondo finas, 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úrate de dibujar la línea de primer plano encima de las otras líneas).

Es mucho más difícil crear una estratificación en la que cada línea individual pueda distinguirse 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, (véase este artículo 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 a tener en cuenta, como que las líneas grises claras pueden ser engañosas si las trayectorias no son suaves. Por ejemplo, puedes tener dos trayectorias en forma de X, o dos en forma de V invertida y derecha. Si las dibujas del mismo color no podrás trazar las líneas, y por eso algunos sugieren dibujar parcelas de coordenadas paralelas usando líneas suaves o desplazando/desplazando los puntos ( Graham y Kennedy, 2003 ; Dang y otros, 2010 ).

Así que los consejos de diseño pueden cambiar dependiendo del objetivo final y de 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 múltiplos pequeños hace que los gráficos sean mucho más fáciles de interpretar en una amplia variedad de circunstancias. Creo que esto es generalmente más productivo que cualquier combinación de colores/guiones en gráficos complicados. Los gráficos de un solo panel en muchos artículos son mucho más grandes de lo necesario, y la división en 4 paneles suele ser posible dentro de las limitaciones de la página sin mucha pérdida.

3 votos

Andy esto es maravilloso. Creo que para este ejemplo particular de la curva spline sería tan eficaz, o incluso más eficaz, para asignar 5 colores a las 20 líneas para que las curvas que están más cerca se asignan diferentes colores. No hay una métrica de distancia que funcione siempre, pero suele haber una métrica que funciona para una situación determinada. Como has dicho, todo depende de la suavidad y la tortuosidad.

5voto

user31264 Puntos 751

De "The Elements of Statistical Learning", de Trevor Hastie y otros:

"Nuestra primera edición era poco amigable para los lectores daltónicos; en particular, tendíamos a favorecer los contrastes rojo/verde, que son especialmente problemáticos. En esta edición hemos cambiado en gran medida la paleta de colores, sustituyendo lo anterior por un contraste naranja/azul."

Quizás quieras mirar sus gráficos.

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

4voto

bdeonovic Puntos 2807

He visto que se presta muy poca atención al "grosor de las líneas" en lo que respecta a la visualización adecuada de los datos. Tal vez 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 un soporte página web
  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 sobre gráficos en la obra de Thomas Lumley Curso de introducción a la informática para bioestadística
  2. Ross Ihaka's curso de postgrado sobre análisis de datos y gráficos computacionales
  3. Ross Ihaka's curso de grado sobre visualización de la información
  4. Deborah Nolan curso de licenciatura Conceptos de computación con datos
  5. Hadley Wickham's Curso de visualización de datos

7 votos

Es una gran lista de recursos. Sin embargo, ¿hay alguna recomendación específica que conozca -de uno o varios de ellos- relacionada con la pregunta (grosor de la línea, con líneas de color, donde puede haber muchas líneas), que pueda mencionar brevemente?

0 votos

Me he tomado la libertad de formatear tu post. Creo que así es más fácil ver la estructura. Si no te gusta, retíralo con mis disculpas.

2voto

chuse Puntos 453

Aunque estoy de acuerdo en que no hay una solución única para el problema, me sirve la recomendación de este blog:

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

Las entradas sobre el color abordan los problemas del daltonismo y de la impresión en escala de grises y ofrecen un ejemplo de escala de colores que resuelve ambos problemas.

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

Un buen conjunto de colores para este fin es el azul y el naranja (¡un clásico!). Puedes hacer una prueba, aplicando filtros de daltonismo y gris y ver si todavía se nota la diferencia.

En cuanto al grosor de las líneas, algunos de los temas del blog mencionados anteriormente tratan este punto. Las líneas, si son muchas, deben tener el mismo grosor, es decir, "finas". Utilice líneas gruesas sólo si quiere llamar la atención sobre ese objeto.

1 votos

No estoy del todo de acuerdo con lo de "Usar sólo líneas gruesas...". Las líneas gruesas en escala de grises claros pueden ser muy eficaces en muchos casos.

1 votos

Seguramente puede serlo. Sólo quería decir que si se utiliza un estilo llamativo, debe usarse con un propósito.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X