Raccomandazioni su colore e spessore delle linee per i grafici a linee


31

Molto è stato scritto in merito alle scelte cromatiche compatibili con i non vedenti per mappe, poligoni e regioni ombreggiate in generale (vedere ad esempio http://colorbrewer2.org ). Non sono stato in grado di trovare consigli per i colori delle linee e lo spessore delle linee variabili per i grafici a linee. Gli obiettivi sono:

  1. distinguere facilmente le linee anche quando si intrecciano
  2. le linee sono facili da distinguere dagli individui con le forme più comuni di daltonismo
  3. le linee (meno importanti) sono facili da stampare (vedere Color Brewer sopra)

Nel contesto delle linee di scala nere e grigie ho trovato molto efficace avere linee nere sottili e linee di scala grigia più spesse. Gradirei raccomandazioni specifiche che includono vari colori, grado di scala dei grigi e spessore della linea. Non mi piacciono i vari tipi di linea (solido / punteggiato / tratteggiato) ma potrei essere escluso da quell'opinione.

Sarebbe preferibile avere raccomandazioni per un massimo di 10 curve su un grafico. Ancora meglio sarebbe fare come fa Color Brewer: consentire ai consigli per le m line di non essere un sottoinsieme di consigli per n linee dove n> m, e di variare m da 1 a 10.

Nota : apprezzerei anche la guida che affronta solo la parte di colorazione della linea della domanda.

Alcuni praticanti aggiungono simboli alle linee ogni pochi centimetri per distinguere meglio le diverse classi. Non sono molto favorevole che richiede più di una funzione (ad esempio, colore + tipo di simbolo) per distinguere le classi e a volte vorrei riservare simboli per indicare informazioni diverse.

In assenza di altre indicazioni, propongo di utilizzare gli stessi colori consigliati per i poligoni in colorbrewer2.org per le linee e di moltiplicare la larghezza della linea per 2,5 per le linee disegnate con colori meno luminosi / densi. Sto creando una funzione R che lo imposta. Oltre ai colori del produttore di birra, penso che farò diventare i primi 2 colori nero solido (sottile) e scala di grigi (spesso) anche se si potrebbe sostenere che dovrebbero essere neri solidi sottili e blu sottili.

Le funzioni R sono disponibili all'indirizzo http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Dopo aver definito la funzione colBrew, puoi vedere come funzionano le impostazioni digitando

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

Viene latticeSetinoltre fornita una funzione per impostare i latticeparametri grafici sulle nuove impostazioni. I miglioramenti agli algoritmi sono i benvenuti.

Per esplorare : dichromatpacchetto R : http://cran.r-project.org/web/packages/dichromat/


2
Avrei pensato che un numero limitato di tipi di linea sarebbe stato molto utile. Un'altra opzione che non sembra essere stata ancora menzionata, è l'uso di marcatori di punti per misurazioni individuali, ad esempio croci, zeri, asterischi, ecc.
Robert Jones,

1
Per me, i marker dei punti non sono completamente efficaci quando le curve si intrecciano. Ma ho visto diversi esempi in cui funzionano molto bene.
Frank Harrell,

Risposte:


21

Cercherò di essere provocatorio qui e mi chiederò se l'assenza di tali linee guida insorga perché questo è un problema quasi insolubile. Le persone in campi abbastanza diversi sembrano concordare nel parlare spesso di "trame di spaghetti" e dei problemi che pongono nel distinguere le diverse serie.

Concretamente, una massa di linee per diverse serie storiche individuali può trasmettere collettivamente schemi generali e talvolta singole serie che variano da tali schemi.

La domanda, tuttavia, mi permetto di distinguere tutte le singole serie temporali quando hanno identità a cui tieni.

Se hai detto 2 o 3 serie, distinguere le serie di solito non è troppo difficile e tenderei a usare linee continue in due o tre di rosso, blu o nero. Ho anche giocato con l'arancione e il blu usati da Hastie e dai suoi amici (vedi la risposta di @ user31264).

Variando il modello di linea (solido, trattino, punteggiato, ecc.) Ho riscontrato un valore limitato. Le linee tratteggiate tendono ad essere sbiadite fisicamente e mentalmente e le combinazioni più sottili di punti e trattini sono semplicemente troppo sottili (significato, leggero) in contrasto per avere successo nella pratica.

Direi che il problema morde molto prima che tu abbia 10 serie. A meno che non siano molto diversi, 5 o così serie possono essere troppo come un duro lavoro per distinguere. La psicologia comune sembra essere che le persone capiscano perfettamente il principio secondo cui diverse serie sono indicate da colori e / o simbolismi diversi, ma non hanno la tendenza a lavorare sodo per tracciare le singole linee e cercare di tenere una storia sulle loro somiglianze e differenze nella loro testa . Parte di ciò deriva spesso dall'uso di una legenda (o chiave). È controverso, ma proverei a etichettare diverse serie sul grafico ove possibile. Il mio motto qui è "Perdi la leggenda, o uccidi la chiave, se puoi".

Sono diventato più affezionato a un approccio diverso per mostrare più serie temporali, in cui tutte le diverse serie temporali sono mostrate ripetutamente in più pannelli, ma ne viene evidenziata una diversa in ciascuna. È una fusione di una vecchia idea (a) piccoli multipli (come li chiama Edward Tufte) e un'altra vecchia idea (b) che evidenzia una serie di particolare interesse. A sua volta potrebbe essere solo un'altra vecchia idea riscoperta, ma finora posso trovare solo riferimenti recenti. Altro in questa discussione su Statalist .

In termini di colori, sono positivo sull'uso dei grigi per le serie storiche che fanno da sfondo a tutto ciò che viene enfatizzato. Ciò sembra essere coerente con la maggior parte delle riviste in cui vale la pena pubblicare.

Ecco un esperimento. I dati sono raccolti da 17 trame sui campi Broadbalk a Rothamsted 1852-1925 e provengono da Andrews, DF e Herzberg, AM (Eds) 1985. Dati: una raccolta di problemi provenienti da molti campi per lo studente e il ricercatore . New York: Springer, Tabella 5.1 e scaricabile da vari luoghi (ad esempio, inserire qui la descrizione del collegamento . (Dettaglio: i dati vengono forniti in blocchi di 4 righe per ogni anno; la terza e la quarta riga sono per la resa della paglia, non tracciate qui. gli identificatori di trama non sono espliciti in quella tabella.)

Non ho competenze specifiche su questo tipo di dati; Volevo solo una serie temporale multipla che non potesse (facilmente) essere considerata banalmente piccola in termini di lunghezza della serie o numero di pannelli. (Se hai centinaia, migliaia, ... di pannelli, questo approccio non può davvero aiutare molto.) Quello che sto immaginando è che un analista di dati, magari parlando con un esperto in materia, potrebbe identificare una varietà di comportamenti non comuni qui e ottenere quindi intuizioni e informazioni.

inserisci qui la descrizione dell'immagine

Evidentemente questa ricetta potrebbe essere utilizzata per molti altri tipi di grafici (ad esempio grafici a dispersione o istogrammi con ciascun sottoinsieme evidenziato a turno); insieme a pannelli di ordinazione secondo una misura o un criterio interessante o utile (ad es. per mediana o 90 ° percentile o SD); e per i risultati del modello e per i dati non elaborati.


2
Sono molto colpito dal subsetplot. Potresti includere alcune immagini di output di esempio direttamente nel tuo post? Sono curioso di sapere quanto funzioni al variare del numero di righe, ma questa è sicuramente la soluzione più soddisfacente che abbia mai visto per ~ 10 righe
Silverfish,

@Silverfish Grazie per l'incoraggiamento. Un esperimento ora aggiunto.
Nick Cox,

1
Nick, sono pienamente d'accordo con "perdere l'etichetta" - minimizzare le leggende remote - e con l'uso dell'evidenziazione di una curva alla volta, lasciando che gli altri si oscurino come hai fatto [puoi essere altrettanto efficace usando il nero solido per la curva evidenziata] . Penso che questa sia un'ottima idea per le presentazioni, ma non è ottimale per la pubblicazione di un articolo a causa delle limitazioni di spazio.
Frank Harrell,

Forse i grafici interattivi diventeranno presto più uno standard nella pubblicazione e saremo in grado di passare il mouse sopra le linee nei grafici e ottenere più informazioni (avere l'intera linea evidenziata o mostrare una descrizione comando per darti maggiori informazioni ecc.).
bdeonovic,

1
@Frank Harrell La questione dei morsi spaziali (1) se i singoli pannelli grafici diventano troppo piccoli per essere leggibili, nel qual caso i pregi del design sono dubbi; (2) se riviste o editori di libri non possono essere persuasi ad assegnare più spazio a una figura più grande del normale se sembra utile. (Forse avevi in ​​mente altri punti.)
Nick Cox il

14

Alle domande 2 e 3 hai risposto tu stesso: le tavolozze dei produttori di colori sono adatte. La domanda difficile è 1, ma come Nick temo sia basata su una falsa speranza. Il colore delle linee non è ciò che rende in grado di distinguere facilmente le linee, si basa sulla continuità e su quanto siano tortuose le linee. Quindi ci sono scelte basate sul design, oltre al colore o alla trama delle linee, che aiuteranno a rendere la trama più facile da interpretare.

Ruberò uno dei diagrammi di Frank che mostrano come esempio la flessibilità delle spline per approssimare molte funzioni di forma diversa su un dominio limitato.

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

Ora, questo produce un pasticcio piuttosto intricato di 20 linee, una sfida difficile da visualizzare.

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

Pasticcio di linee

Ecco la stessa trama in piccoli multipli, della stessa dimensione, usando pannelli avvolti. È leggermente più difficile fare confronti tra pannelli, ma anche nello spazio ristretto è molto più facile visualizzare la forma delle linee.

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

Tutti i 20 pannelli

Un punto che Stephen Kosslyn sottolinea nei suoi libri è che non è quante linee diverse rendono complicata la trama, è quante forme diverse possono assumere le linee. Se 20 pannelli finiscono per essere troppo piccoli, è spesso possibile ridurre il set a traiettorie simili da posizionare nello stesso pannello. È ancora difficile distinguere tra le linee all'interno dei pannelli, per definizione saranno vicine ciascuna e si sovrapporranno frequentemente, ma riduce abbastanza la complessità del confronto tra i pannelli. Qui ho arbitrariamente ridotto le 20 linee in 4 raggruppamenti separati. Questo ha l'ulteriore vantaggio che l'etichettatura diretta delle linee è più semplice, c'è più spazio all'interno dei pannelli.

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

Pannelli ridotti

C'è una frase generale che è applicabile alla situazione, se ti concentri su tutto ciò su cui non ti concentri su nulla . Nel caso con solo dieci righe, è (10*9)/2=45possibile confrontare coppie di righe. Probabilmente non siamo interessati a tutti e 45 i confronti nella maggior parte dei casi, o siamo interessati a confrontare linee specifiche tra loro o confrontare una linea con la distribuzione del resto. La risposta di Nick mostra bene quest'ultima. Disegnare le linee di sfondo sottili, di colore chiaro e semitrasparenti, quindi sarà sufficiente disegnare la linea di primo piano con qualsiasi colore brillante e più spesso. (Anche per il dispositivo assicurati di disegnare la linea di primo piano sopra le altre linee!)

È molto più difficile creare una stratificazione in cui ogni singola linea può essere facilmente distinta nel groviglio. Un modo per ottenere la differenziazione dello sfondo in primo piano nella cartografia è l'uso delle ombre (vedi un articolo di Dan Carr per un buon esempio). Questo non ridimensionerà fino a 10 righe, ma può aiutare per 2 o 3 righe. Ecco un esempio per le traiettorie nel Pannello 1 usando Excel!

Excel Shadow

Ci sono altri punti da sottolineare, come le linee di colore grigio chiaro che possono essere fuorvianti se si hanno traiettorie non lisce. Ad esempio potresti avere due traiettorie a forma di X, o due a forma di lato destro capovolto e capovolto V. Disegnandole dello stesso colore non saresti in grado di tracciare le linee, ed è per questo che alcuni suggeriscono tracciare grafici di coordinate parallele usando linee morbide o jitter / off-setting dei punti ( Graham e Kennedy, 2003 ; Dang et al., 2010 ).

Pertanto, i consigli di progettazione possono cambiare in base all'obiettivo finale e alla natura dei dati. Ma quando è interessante fare confronti bivariati tra le traiettorie, penso che il raggruppamento di traiettorie simili e l'uso di piccoli multipli renda le trame molto più facili da interpretare in un'ampia varietà di circostanze. Ritengo che questo sia generalmente più produttivo di qualsiasi combinazione di colori / trattini di linea sarà in trame complicate. I grafici a pannelli singoli in molti articoli sono molto più grandi di quanto debbano essere e la suddivisione in 4 pannelli è in genere possibile all'interno di vincoli di pagina senza troppe perdite.


3
Andy questo è meraviglioso. Penso che per questo particolare esempio di curva spline sarebbe altrettanto efficace, o anche più efficace, assegnare 5 colori alle 20 linee in modo che alle curve più vicine tra loro vengano assegnati colori diversi. Non esiste una metrica di distanza che funzioni sempre, ma di solito esiste una metrica che funziona per una determinata situazione. Come hai detto, tutto ciò dipende dalla scorrevolezza e dalla tortuosità.
Frank Harrell,

5

Da "Gli elementi dell'apprendimento statistico" di Trevor Hastie et al. :

"La nostra prima edizione è stata ostile ai lettori daltonici; in particolare, tendevamo a favorire i contrasti rosso / verde che sono particolarmente problematici. Abbiamo modificato la tavolozza dei colori in questa edizione in larga misura, sostituendo quanto sopra con un contrasto arancione / blu. "

Potresti voler guardare i loro grafici.

Puoi anche usare linee tratteggiate, tratteggiate ecc.


4

Ho visto poca attenzione allo "spessore della linea" per quanto riguarda la corretta visualizzazione dei dati. Forse la capacità di discernere spessori di linea diversi non è variabile come la capacità di discernere il colore.

Alcune risorse:

  1. Hadley Wickham (2009), ggplot: Grafica elegante per analisi dei dati , Springer; ha una pagina Web di supporto
  2. 8 risorse di libri suggeriti sulla visualizzazione dei dati: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

Alcuni corsi:

  1. Lezione di grafica nel corso di Informatica introduttiva di Thomas Lumley per il corso di biostatistica
  2. Ross Ihaka: corso di laurea in analisi dei dati computazionali e grafica
  3. Il corso di laurea di Ross Ihaka sulla visualizzazione delle informazioni
  4. Concetti del corso di laurea di Deborah Nolan in Informatica con dati
  5. Corso di visualizzazione dei dati di Hadley Wickham

7
È un ottimo elenco di risorse. Tuttavia, ci sono consigli specifici di cui sei a conoscenza - da uno o più di essi - che si riferiscono alla domanda (spessore della linea, con linee colorate, dove potrebbero esserci molte linee), che potresti citare brevemente?
Glen_b

Mi sono preso la libertà di formattare il tuo post. Penso che sia più facile vedere la struttura. Se non ti piace, torna indietro con le mie scuse.
gung - Ripristina Monica

2

Pur concordando sul fatto che non esiste una soluzione unica al problema, utilizzo la raccomandazione di questo blog:

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

I post sul colore affrontano i problemi del daltonismo e della stampa in scala di grigi e forniscono un esempio di scala dei colori che risolve entrambi i problemi.

Negli stessi articoli vengono analizzate anche le scale di colore continue, che molti usi per diagrammi di calore e così via. Si consiglia di non utilizzare l'arcobaleno, a causa di alcune transizioni nitide (come la zona gialla, molto più piccola del rosso). Invece, è possibile effettuare transizioni tra altre coppie di colori.

Un buon set di colori per questo scopo è il blu e l'arancione (un classico!). Puoi fare un test, applicando i filtri daltonici e grigi e vedi se riesci ancora a notare la differenza.

Per lo spessore delle linee, alcuni dei problemi del blog menzionati prima trattano questo punto. Le linee, se ne hai molte, dovrebbero avere lo stesso spessore, cioè "sottile". Usa linee spesse solo se vuoi attirare l'attenzione su quell'oggetto.


1
Non sono pienamente d'accordo con "Usa solo linee spesse ...". Linee spesse in scala di grigi chiari possono essere molto efficaci in molti casi.
Frank Harrell,

1
Può essere sicuramente. Volevo solo dire che se usi uno stile accattivante, dovrebbe essere usato con uno scopo.
scegli il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.