Recomendações de cor e espessura da linha para plotagens de linha

31

Muito foi escrito sobre as opções de cores compatíveis com daltônicos para mapas, polígonos e regiões sombreadas em geral (veja, por exemplo, http://colorbrewer2.org ). Não consegui encontrar recomendações para cores de linha e espessura de linha variável para gráficos de linha. Os objetivos são:

  1. distinguir facilmente linhas, mesmo quando elas se entrelaçam
  2. As linhas são fáceis de distinguir por indivíduos com as formas mais comuns de daltonismo
  3. linhas (menos importantes) são compatíveis com a impressora (consulte Color Brewer acima)

No contexto das linhas em preto e cinza, achei muito eficaz ter linhas finas em preto e linhas mais espessas em escala de cinza. Eu apreciaria recomendações específicas que incluem cores variadas, grau de escala de cinza e espessura da linha. Não gosto tanto de tipos de linha variáveis ​​(sólido / pontilhado / tracejado), mas poderia ser excluído dessa opinião.

Seria preferível ter recomendações para até 10 curvas em um gráfico. Ainda melhor seria fazer como o Color Brewer: permitir que as recomendações para m linhas não sejam um subconjunto de recomendações para n linhas onde n> m e varie m de 1 a 10.

Observe : eu também gostaria de receber orientações que abordem apenas a parte de coloração da pergunta.

Alguns praticantes adicionam símbolos às linhas a cada poucos centímetros para distinguir melhor as diferentes classes. Não sou tão favorável a favor que exige mais de um recurso (por exemplo, cor + tipo de símbolo) para distinguir as classes e, às vezes, gostaria de reservar símbolos para indicar informações diferentes.

Na ausência de outras orientações, proponho usar as mesmas cores recomendadas para polígonos no colorbrewer2.org para linhas e multiplicar a largura da linha por 2,5 para linhas desenhadas com cores menos brilhantes / densas. Estou criando uma função R que configura isso. Além das cores do fabricante de cerveja, acho que as duas primeiras cores serão preto sólido (fino) e escala de cinza (grosso), embora se possa argumentar que eles devem ser preto sólido fino e azul fino.

As funções R podem ser encontradas em http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Depois de definir a função, colBrewvocê pode ver como as configurações funcionam digitando

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

Também latticeSeté fornecida uma função para definir os latticeparâmetros gráficos para as novas configurações. Melhorias nos algoritmos são bem-vindas.

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

Frank Harrell
fonte
2
Eu pensaria que um número limitado de tipos de linha seria muito útil. Uma outra opção que não parece ter sido ainda mencionado, é o uso de marcadores de ponto para medições individuais, por exemplo, cruzamentos, zeros, asteriscos, etc.
Robert Jones
1
Para mim, os marcadores de ponto não são totalmente eficazes quando as curvas se entrelaçam. Mas eu já vi vários exemplos em que eles funcionam muito bem.
Frank Harrell

Respostas:

21

Tentarei ser provocativo aqui e me pergunto se a ausência de tais diretrizes surge porque esse é um problema quase insolúvel. Pessoas de áreas bastante diferentes parecem concordar em falar frequentemente de "parcelas de espaguete" e dos problemas que apresentam ao distinguir séries diferentes.

Concretamente, uma massa de linhas para várias séries temporais individuais pode transmitir coletivamente padrões gerais e, às vezes, séries individuais que variam de qualquer padrão.

A questão, no entanto, é a de distinguir todas as séries temporais individuais quando elas têm identidades com as quais você se importa.

Se você disser 2 ou 3 séries, as séries distintas geralmente não são muito difíceis e eu tenderia a usar linhas sólidas em dois ou três de vermelho, azul ou preto. Também brinquei com laranja e azul, como Hastie e seus amigos (veja a resposta em @ user31264).

Variando o padrão de linha (sólido, tracejado, pontilhado etc.), encontrei apenas um valor limitado. As linhas pontilhadas tendem a ser desbotadas física e mentalmente e as combinações mais sutis de pontos e traços são muito sutis (significando discretas) em contraste para serem bem-sucedidas na prática.

Eu diria que o problema está muito antes de você ter 10 séries. A menos que sejam muito diferentes, 5 ou mais séries podem ser muito difíceis de distinguir. A psicologia comum parece ser que as pessoas entendem perfeitamente o princípio de que séries diferentes são indicadas por cores e / ou simbolismos diferentes, mas não têm a tendência de trabalhar duro para traçar as linhas individuais e tentar manter uma história sobre suas semelhanças e diferenças em suas cabeças. . Parte disso geralmente resulta do uso de uma legenda (ou chave). É controverso, mas eu tentaria rotular séries diferentes no gráfico sempre que possível. Meu lema aqui é "perder a lenda, ou matar a chave, se você puder".

Eu me apaixonei por uma abordagem diferente para mostrar várias séries temporais, nas quais todas as séries temporais diferentes são mostradas repetidamente em vários painéis, mas uma diferente é destacada em cada uma. É uma fusão de uma velha idéia (a) pequenos múltiplos (como Edward Tufte os chama) e outra velha idéia (b) destacando uma série de interesse particular. Por sua vez, pode ser apenas mais uma velha idéia redescoberta, mas até agora só consigo encontrar referências recentes. Mais neste tópico sobre Statalist .

Em termos de cores, sou positivo em usar cinzas para séries temporais que são o pano de fundo para o que está sendo enfatizado. Isso parece ser consistente com a maioria dos periódicos que valem a pena publicar.

Aqui está um experimento. Os dados são rendimentos de grãos de 17 parcelas nos campos Broadbalk em Rothamsted 1852-1925 e vêm de Andrews, DF e Herzberg, AM (Eds) 1985. Dados: Uma coleção de problemas de muitos campos para o estudante e o pesquisador . Nova York: Springer, Tabela 5.1 e pode ser baixada de vários lugares (por exemplo, insira a descrição do link aqui . (Detalhe: os dados são fornecidos em blocos de 4 linhas por ano; a terceira e a quarta linhas são para produção de palha, não plotadas aqui. identificadores de plotagem não são explícitos nessa tabela.)

Não tenho conhecimentos específicos sobre este tipo de dados; Eu só queria uma série temporal múltipla que não pudesse (facilmente) ser descartada como trivialmente pequena em termos de comprimento de série ou número de painéis. (Se você tem centenas, milhares, ... de painéis, essa abordagem não pode ajudar muito.) O que estou imaginando é que um analista de dados, talvez conversando com um especialista no assunto, possa identificar uma variedade de comportamentos incomuns aqui e obtenha insights e informações com isso.

insira a descrição da imagem aqui

Evidentemente, esta receita pode ser usada para muitos outros tipos de gráficos (por exemplo, gráficos de dispersão ou histogramas, com cada subconjunto destacado por vez); juntamente com os painéis de pedidos de acordo com alguma medida ou critério interessante ou útil (por exemplo, mediana ou percentil 90 ou DP); e para resultados do modelo, bem como dados brutos.

Nick Cox
fonte
2
Estou muito impressionado com o subconjunto. Você poderia incluir algumas imagens de saída de amostra diretamente em sua postagem? Estou curioso para saber como ele funciona, pois o número de linhas varia, mas essa é definitivamente a solução mais satisfatória que já vi para ~ 10 linhas.
Silverfish
@ Silverfish Obrigado pelo incentivo. Um experimento agora adicionado.
Nick Cox
1
Nick: Eu concordo plenamente com "perder o rótulo" - minimizando legendas remotas - e com o uso de destacar uma curva de cada vez, deixando as outras escurecerem como você [você pode ser quase tão eficaz quanto usar preto sólido na curva destacada] . Eu acho que essa é uma ótima idéia para apresentações, mas não é tão ideal para publicar um artigo devido a limitações de espaço.
Frank Harrell
Talvez os gráficos de interação em breve se tornem um padrão na publicação e poderemos passar o mouse sobre as linhas nos gráficos e obter mais informações (faça com que toda a linha seja destacada ou mostre uma dica para fornecer mais informações, etc.).
bdeonovic 5/12/14
1
@Frank Harrell A questão das mordidas espaciais (1) se os painéis gráficos individuais se tornarem pequenos demais para serem legíveis; nesse caso, os méritos do design são duvidosos; (2) se os periódicos ou os editores de livros não puderem ser persuadidos a atribuir mais espaço a uma figura maior que o normal, se parecer valer a pena. (Talvez você teve outros pontos em mente.)
Nick Cox
14

Perguntas 2 e 3, você respondeu a si mesmo - as paletas de cores do cervejeiro são adequadas. A pergunta difícil é 1, mas, como Nick, receio que seja baseada em uma falsa esperança. A cor das linhas não é o que faz com que seja possível distinguir facilmente as linhas, é baseada na continuidade e no quão tortuosas são as linhas. Portanto, existem opções baseadas em design, além do padrão de cor ou traço das linhas, que ajudarão a facilitar a interpretação da plotagem.

Vou roubar um dos diagramas de Frank, mostrando a flexibilidade dos splines para aproximar muitas funções de formas diferentes em um domínio limitado, como exemplo.

#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)

Agora, isso produz uma confusão emaranhada de 20 linhas, um desafio difícil de visualizar.

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

Bagunça de linhas

Aqui está o mesmo gráfico em múltiplos pequenos, do mesmo tamanho, usando painéis embrulhados. É um pouco mais difícil fazer comparações entre painéis, mas mesmo no espaço reduzido, é muito mais fácil visualizar a forma das linhas.

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

Todos os 20 painéis

Um ponto que Stephen Kosslyn destaca em seus livros é que não é quantas linhas diferentes complicam o enredo, mas quantos tipos diferentes de formas as linhas podem assumir. Se 20 painéis acabarem sendo muito pequenos, você poderá reduzir frequentemente o conjunto para trajetórias semelhantes para colocar no mesmo painel. Ainda é difícil distinguir as linhas dentro dos painéis, por definição elas estarão próximas umas das outras e se sobrepõem com frequência, mas reduz bastante a complexidade de fazer comparações entre painéis. Aqui reduzi arbitrariamente as 20 linhas em 4 grupos separados. Isso tem o benefício adicional de que a rotulagem direta de linhas é mais simples, há mais espaço dentro dos painéis.

###############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

Painéis Reduzidos

Há uma frase geral que é aplicável à situação, se você se concentrar em tudo, em nada . No caso de apenas dez linhas, você (10*9)/2=45pode comparar pares de linhas possíveis. Provavelmente, não estamos interessados ​​em todas as 45 comparações na maioria das circunstâncias, ou estamos interessados ​​em comparar linhas específicas entre si ou em comparar uma linha com a distribuição do restante. A resposta de Nick mostra bem este último. Desenhar as linhas de fundo finas, de cor clara e semitransparentes e, em seguida, desenhar a linha de primeiro plano em qualquer cor brilhante e mais espessa será suficiente. (Também para o dispositivo, desenhe a linha do primeiro plano em cima das outras linhas!)

É muito mais difícil criar uma camada em que cada linha individual possa ser facilmente distinguida no emaranhado. Uma maneira de obter diferenciação de primeiro plano em segundo plano na cartografia é o uso de sombras (veja este artigo de Dan Carr para um bom exemplo). Isso não aumenta em 10 linhas, mas pode ajudar em 2 ou 3 linhas. Aqui está um exemplo para as trajetórias no Painel 1 usando o Excel!

Sombra do Excel

Há outros pontos a serem destacados, como as linhas cinza claro podem ser enganosas se você tiver trajetórias que não sejam suaves. Por exemplo, você pode ter duas trajetórias na forma de um X ou duas na forma de um lado direito para cima e de cabeça para baixo V. Desenhando-as da mesma cor, você não seria capaz de traçar as linhas, e é por isso que alguns sugerem desenho de gráficos de coordenadas paralelas usando linhas suaves ou tremulação / compensação dos pontos ( Graham e Kennedy, 2003 ; Dang et al., 2010 ).

Portanto, o conselho de design pode mudar dependendo do objetivo final e da natureza dos dados. Mas quando é interessante fazer comparações bivariadas entre as trajetórias, acho que o agrupamento de trajetórias semelhantes e o uso de pequenos múltiplos facilita muito a interpretação das parcelas em uma ampla variedade de circunstâncias. Eu acho que isso geralmente é mais produtivo do que qualquer combinação de traços de cores / linhas em gráficos complicados. As plotagens de painéis únicos em muitos artigos são muito maiores do que precisam e a divisão em quatro painéis é normalmente possível dentro das restrições da página sem muita perda.

Andy W
fonte
3
Andy isso é maravilhoso. Eu acho que, para esse exemplo específico de curva spline, seria igualmente eficaz, ou ainda mais eficaz, atribuir 5 cores às 20 linhas, para que as curvas mais próximas recebam cores diferentes. Não existe uma métrica de distância que funcione sempre, mas geralmente existe uma métrica que funciona para uma determinada situação. Como você disse, tudo isso depende de suavidade e tortuosidade.
Frank Harrell
5

De "Os elementos da aprendizagem estatística", de Trevor Hastie et al. :

"Nossa primeira edição foi hostil para os leitores daltônicos; em particular, tendíamos a favorecer contrastes vermelho / verde que são particularmente problemáticos. Alteramos a paleta de cores nesta edição em grande parte, substituindo as anteriores por um contraste laranja / azul. "

Você pode querer olhar para os gráficos deles.

Você também pode usar linhas tracejadas, pontilhadas, etc.

user31264
fonte
4

Vi pouca atenção à "espessura da linha" em relação à visualização adequada dos dados. Talvez a capacidade de discernir diferentes espessuras de linha não seja tão variável quanto a capacidade de discernir cores.

Alguns recursos:

  1. Hadley Wickham (2009), ggplot: Gráficos elegantes para análise de dados , Springer; tem uma página da web de suporte
  2. 8 recursos sugeridos para livros sobre visualização de dados: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

Alguns cursos:

  1. Palestra Gráfica no Curso Introdutório de Informática para Bioestatística de Thomas Lumley
  2. Curso de graduação de Ross Ihaka em análise de dados e gráficos computacionais
  3. Curso de graduação de Ross Ihaka sobre visualização de informações
  4. Deborah Nolan, graduação em Conceitos em computação com dados
  5. Curso de visualização de dados de Hadley Wickham
bdeonovic
fonte
7
Essa é uma ótima lista de recursos. No entanto, existem recomendações específicas das quais você conhece - de uma ou mais delas - relacionadas à pergunta (espessura da linha, com linhas coloridas, onde pode haver muitas linhas), que você poderia mencionar brevemente?
Glen_b -Reinstala Monica
Tomei a liberdade de formatar sua postagem. Eu acho que torna mais fácil ver a estrutura. Se você não gostar, reverta-o com minhas desculpas.
gung - Restabelece Monica
2

Embora eu concorde que não há uma solução exclusiva para o problema, eu uso a recomendação deste blog:

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

As publicações sobre cores abordam os problemas de daltonismo e impressão em escala de cinza e fornece um exemplo de escala de cores que resolve esses dois problemas.

Nos mesmos artigos são analisadas também as escalas de cores contínuas, que muitos usos para gráficos de calor e assim por diante. É recomendável não usar o arco-íris, devido a algumas transições nítidas (como a zona amarela, muito menor que a vermelha). Em vez disso, é possível fazer transições entre outros pares de cores.

Um bom conjunto de cores para esse fim é azul e laranja (um clássico!). Você pode fazer um teste aplicando filtros daltônicos e cinza e veja se ainda percebe a diferença.

Para a espessura das linhas, algumas das questões do blog mencionadas antes tratam desse ponto. As linhas, se você tiver muitas, devem ter a mesma espessura, que é "fina". Use linhas grossas apenas se desejar chamar atenção para esse objeto.

chuse
fonte
1
Não concordo plenamente com o "Use apenas linhas grossas ...". Linhas espessas de escala de cinza clara podem ser muito eficazes em muitos casos.
23716 Frank Harrell
1
Pode ser certamente. Eu só quis dizer que se você usa um estilo atraente, ele deve ser usado com um propósito.
chuse