Zalecenia dotyczące koloru i grubości linii dla wykresów linii

31

Wiele napisano na temat wyboru kolorów przyjaznych dla ślepych kolorów dla map, wielokątów i ogólnie zacienionych regionów (patrz na przykład http://colorbrewer2.org ). Nie byłem w stanie znaleźć zaleceń dotyczących kolorów linii i różnej grubości linii dla wykresów linii. Cele to:

  1. łatwo rozróżniają linie, nawet gdy się przeplatają
  2. linie są łatwe do rozróżnienia przez osoby z najczęstszymi formami ślepoty na kolory
  3. (mniej ważne) wiersze są przyjazne dla drukarki (patrz Color Brewer powyżej)

W kontekście czarnych i szarych linii skali bardzo skuteczne okazało się posiadanie cienkich czarnych linii i grubszych szarych linii. Byłbym wdzięczny za konkretne zalecenia, które obejmują różne kolory, stopień skali szarości i grubość linii. Nie przepadam za różnymi rodzajami linii (ciągłe / kropkowane / przerywane), ale można by o tym mówić.

Zalecane byłoby posiadanie zaleceń dla maksymalnie 10 krzywych na jednym wykresie. Jeszcze lepiej byłoby zrobić tak, jak robi to Color Brewer: pozwól, aby rekomendacje dla m linii nie były podzbiorem rekomendacji dla n linii, gdzie n> m, i zmieniać m od 1 do 10.

Uwaga : Byłbym wdzięczny za wskazówki, które dotyczą tylko części pytania dotyczącej kolorowania linii.

Niektórzy praktykujący dodają symbole do linii co kilka centymetrów, aby lepiej rozróżnić różne klasy. Nie jestem zwolennikiem, który wymaga więcej niż jednej funkcji (np. Kolor + typ symbolu), aby rozróżnić klasy, i czasami chciałbym zarezerwować symbole, aby oznaczyć różne informacje.

Wobec braku innych wskazówek proponuję zastosować te same kolory, które są zalecane dla wielokątów w colorbrewer2.org dla linii, i pomnożyć szerokość linii przez 2,5 dla linii narysowanych z mniej jaskrawymi / gęstymi kolorami. Tworzę funkcję R, która to konfiguruje. Oprócz kolorów w kolorze piwnym, myślę, że pierwsze 2 kolory będą jednolicie czarne (cienkie) i skali szarości (grube), chociaż można argumentować, że powinny być cienkie jednolicie czarne i cienkie niebieskie.

Funkcje R można znaleźć na stronie http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Po zdefiniowaniu funkcji colBrewmożesz zobaczyć, jak działają ustawienia, pisząc

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

latticeSetPodano także funkcję ustawiania latticeparametrów graficznych na nowe ustawienia. Ulepszenia algorytmów są mile widziane.

Do eksploracji : dichromatPakiet R : http://cran.r-project.org/web/packages/dichromat/

Frank Harrell
źródło
2
Pomyślałbym, że ograniczona liczba rodzajów linii byłaby bardzo pomocna. Inną opcją, która nie została jeszcze wspomniana, jest użycie markerów punktowych do indywidualnych pomiarów, np. Krzyżyk, zera, gwiazdki itp.
Robert Jones
1
Dla mnie markery punktowe nie są w pełni skuteczne, gdy krzywe przeplatają się. Ale widziałem kilka przykładów, w których działają one bardzo dobrze.
Frank Harrell,

Odpowiedzi:

21

Postaram się tutaj prowokować i zastanawiać się, czy nie ma takich wytycznych, ponieważ jest to problem prawie nierozwiązywalny. Ludzie z zupełnie różnych dziedzin wydają się zgadzać, często rozmawiając o „fabułach spaghetti” i problemach, jakie stwarzają przy rozróżnianiu różnych serii.

Konkretnie, masa linii dla kilku indywidualnych szeregów czasowych może zbiorowo przenosić ogólne wzorce, a czasem indywidualne szeregi, które różnią się od dowolnego takiego wzorca.

Pytanie jednak dotyczy rozróżnienia wszystkich indywidualnych szeregów czasowych, gdy mają one tożsamości, na których ci zależy.

Jeśli masz powiedziane 2 lub 3 serie, rozróżnianie serii zwykle nie jest zbyt trudne, a ja chciałbym używać linii ciągłych w dwóch lub trzech kolorach czerwonym, niebieskim lub czarnym. Grałem również w kolorze pomarańczowym i niebieskim, tak jak Hastie i przyjaciele (patrz odpowiedź od @ user31264).

Zmieniając wzór linii (bryła, kreska, kropka itp.) Znalazłem tylko ograniczoną wartość. Kropkowane linie zwykle są wyprane fizycznie i psychicznie, a bardziej subtelne kombinacje kropek i kresek są po prostu zbyt subtelne (co oznacza, nieznaczne) w przeciwieństwie do sukcesu w praktyce.

Powiedziałbym, że problem gryzie na długo przed tym, jak masz 10 serii. Jeśli nie są bardzo różne, 5 lub więcej serii może być zbyt trudnych do rozróżnienia. Powszechna psychologia wydaje się polegać na tym, że ludzie doskonale rozumieją zasadę, że różne serie są doskonale oznaczone różnymi kolorami i / lub symboliką, ale brakuje im ochoty ciężko pracować nad wykreśleniem poszczególnych linii i próbować opowiedzieć o ich podobieństwach i różnicach w głowach . Część tego często wynika z użycia legendy (lub klucza). To kontrowersyjne, ale w miarę możliwości starałbym się oznaczać różne serie na wykresie. Moje motto brzmi: „Zgub legendę lub zabij klucz, jeśli możesz”.

Uwielbiam inne podejście do pokazywania wielu szeregów czasowych, w których wszystkie różne szeregi czasowe są pokazywane wielokrotnie na kilku panelach, ale w każdym z nich jest wyróżniona inna. To połączenie jednego starego pomysłu (a) małych wielokrotności (jak je nazywa Edward Tufte) i innego starego pomysłu (b) podkreślającego serię szczególnych zainteresowań. To z kolei może być kolejnym odkrytym na nowo pomysłem, ale do tej pory mogę znaleźć tylko najnowsze referencje. Więcej w tym wątku na temat Statalist .

Jeśli chodzi o kolory, jestem przekonany, że używam szarości do szeregów czasowych, które są tłem dla wszystkiego, co jest podkreślane. Wydaje się to spójne z większością czasopism, w których warto publikować.

Oto jeden eksperyment. Dane dotyczą plonów ziarna z 17 poletek na polach Broadbalk w Rothamsted 1852-1925 i pochodzą z Andrews, DF i Herzberg, AM (Eds) 1985. Dane: Zbiór problemów z wielu pól dla studenta i pracownika naukowego . New York: Springer, tabela 5.1 i do pobrania z różnych miejsc (np. Wprowadź opis linku . (Szczegóły: dane pojawiają się w blokach po 4 wiersze dla każdego roku; trzeci i czwarty wiersz dotyczą wydajności słomy, nie zostały tu przedstawione). identyfikatory działek nie są jawne w tej tabeli).

Nie mam specjalistycznej wiedzy na temat tego rodzaju danych; Chciałem tylko wielu szeregów czasowych, których nie można (łatwo) uznać za banalnie małe pod względem długości serii lub liczby paneli. (Jeśli masz setki, tysiące ... paneli, takie podejście nie może naprawdę wiele pomóc). Wyobrażam sobie, że analityk danych, być może rozmawiając z ekspertem w danej dziedzinie, może zidentyfikować różne wspólne i nietypowe zachowania tutaj i dzięki temu uzyskać wgląd i informacje.

wprowadź opis zdjęcia tutaj

Oczywiście ten przepis można zastosować do wielu innych rodzajów wykresów (np. Wykresów punktowych lub histogramów z każdym podświetlonym kolejno podzestawem); wraz z układaniem paneli według interesujących lub przydatnych miar lub kryteriów (np. według mediany lub 90 percentyla lub SD); i dla wyników modelu, a także surowych danych.

Nick Cox
źródło
2
Jestem pod wielkim wrażeniem podplanu. Czy możesz zamieścić kilka przykładowych obrazów wyjściowych bezpośrednio w swoim poście? Jestem ciekawy, jak dobrze to działa, ponieważ liczba linii jest różna, ale jest to zdecydowanie najbardziej satysfakcjonujące rozwiązanie, jakie widziałem dla ~ 10 linii
Silverfish
@Silverfish Dzięki za zachętę. Dodano jeden eksperyment.
Nick Cox,
1
Nick W pełni zgadzam się z „stracić etykietę” - minimalizując odległe legendy - i za pomocą podświetlania jednej krzywej naraz, pozwalając innym ściemniać jak ty [możesz być prawie tak samo skuteczny, używając jednolitej czerni dla podświetlonej krzywej] . Myślę, że to świetny pomysł na prezentacje, ale nie jest tak optymalny do publikacji artykułu z powodu ograniczeń miejsca.
Frank Harrell,
Być może wykresy interakcji wkrótce staną się standardem w publikowaniu i będziemy mogli najechać kursorem na linie na wykresach i uzyskać więcej informacji (podświetl całą linię lub pokaż etykietkę, aby uzyskać więcej informacji itp.).
bdeonovic,
1
@Frank Harrell Pytanie o ugryzienia w przestrzeni (1), jeśli poszczególne panele wykresów stają się zbyt małe, aby były czytelne, w takim przypadku zalety projektu są wątpliwe; (2) jeśli nie można przekonać czasopism lub wydawców książek do przydzielenia większej ilości miejsca na większą liczbę niż normalnie, jeśli wydaje się to opłacalne. (Być może miałeś na myśli inne punkty.)
Nick Cox,
14

Na pytania 2 i 3 sam odpowiedziałeś - palety kolorowych browarów są odpowiednie. Trudne pytanie to 1, ale obawiam się, podobnie jak Nick, że ma ono fałszywą nadzieję. Kolor linii nie jest tym, co pozwala łatwo rozróżnić linie, opiera się na ciągłości i krętości linii. Istnieją zatem wybory oparte na projekcie, inne niż kolor lub wzór linii, które ułatwią interpretację wykresu.

Jako przykład ukradnę jeden ze schematów Franka pokazujących elastyczność splajnów w celu przybliżenia wielu funkcji o różnych kształtach w ograniczonej dziedzinie.

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

Teraz tworzy to dość splątany bałagan z 20 liniami, co jest trudnym wyzwaniem do wizualizacji.

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

Bałagan linii

Oto ta sama fabuła w małych wielokrotnościach, w tym samym rozmiarze, przy użyciu owiniętych paneli. Porównania między panelami są nieco trudniejsze, ale nawet w zmniejszonej przestrzeni znacznie łatwiej jest wyobrazić sobie kształt linii.

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

Wszystkie 20 paneli

Jednym ze stwierdzeń Stephena Kosslyna w swoich książkach jest to, że nie tyle różnych linii komplikuje fabułę, ile różnych rodzajów kształtów może przyjmować linia. Jeśli 20 paneli jest zbyt małych, często możesz zredukować zestaw do podobnych trajektorii, aby umieścić go w tym samym panelu. Nadal trudno jest rozróżnić linie w panelach, z definicji będą się one w pobliżu nakładać i często nachodzić na siebie, ale zmniejsza to znacznie złożoność wykonywania porównań między panelami. Tutaj arbitralnie zredukowałem 20 linii do 4 oddzielnych grup. Ma to tę dodatkową zaletę, że bezpośrednie etykietowanie linii jest prostsze, w panelach jest więcej miejsca.

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

Zredukowane panele

Istnieje ogólna fraza, która odnosi się do sytuacji, jeśli skupiasz się na wszystkim, koncentrujesz się na niczym . W przypadku tylko dziesięciu linii możesz (10*9)/2=45porównać pary linii. Prawdopodobnie nie jesteśmy zainteresowani wszystkimi 45 porównaniami w większości przypadków, albo jesteśmy zainteresowani porównaniem konkretnych linii ze sobą lub porównaniem jednej linii z rozkładem pozostałych. Odpowiedź Nicka ładnie pokazuje to drugie. Wystarczy narysować cienkie, jasne i półprzezroczyste linie tła, a następnie narysować linię pierwszego planu w dowolnym jasnym i grubszym kolorze. (Również w przypadku urządzenia należy narysować linię pierwszego planu nad innymi liniami!)

Znacznie trudniej jest utworzyć warstwę, w której każdą pojedynczą linię można łatwo odróżnić w plątaninie. Jednym ze sposobów osiągnięcia różnicowania tła pierwszego planu w kartografii jest użycie cieni ( dobry przykład tego artykułu autorstwa Dana Carra ). To nie będzie skalować do 10 linii, ale może pomóc dla 2 lub 3 linii. Oto przykład trajektorii w Panelu 1 za pomocą Excela!

Excel Shadow

Są jeszcze inne kwestie, na przykład jasnoszare linie, które mogą wprowadzać w błąd, jeśli trajektorie nie są gładkie. Np. Możesz mieć dwie trajektorie w kształcie litery X lub dwie w kształcie jednej prawej strony do góry i do góry nogami V. Rysując je w tym samym kolorze, nie będziesz w stanie prześledzić linii, dlatego niektórzy sugerują rysowanie równoległych wykresów współrzędnych za pomocą gładkich linii lub drżenie / przesunięcie punktów ( Graham i Kennedy, 2003 ; Dang i in., 2010 ).

Tak więc porady projektowe mogą ulec zmianie w zależności od celu końcowego i charakteru danych. Kiedy jednak interesujące są dwuwymiarowe porównania trajektorii, myślę, że grupowanie podobnych trajektorii i stosowanie małych wielokrotności znacznie ułatwia interpretację wykresów w wielu różnych okolicznościach. Wydaje mi się, że jest to na ogół bardziej produktywne niż jakakolwiek kombinacja kolorów / kresek linii na skomplikowanych wykresach. Pojedyncze wykresy paneli w wielu artykułach są znacznie większe niż powinny, a podział na 4 panele jest zazwyczaj możliwy w ramach ograniczeń strony bez większych strat.

Andy W.
źródło
3
Andy, to jest cudowne. Myślę, że dla tego konkretnego przykładu krzywej splajnowej równie skuteczne, a nawet bardziej skuteczne byłoby przypisanie 5 kolorów do 20 linii, tak aby krzywym bliższym razem zostały przypisane różne kolory. Nie ma jednej metryki odległości, która zawsze będzie działać, ale zwykle istnieje metryka, która działa w danej sytuacji. Jak powiedziałeś, wszystko to zależy od gładkości i kruchości.
Frank Harrell,
5

Z „Elementów statystycznego uczenia się” Trevora Hastiego i in. :

„Nasza pierwsza edycja była nieprzyjazna dla czytelników niewidomych dla kolorów; w szczególności preferowaliśmy kontrasty czerwono-zielone, które są szczególnie kłopotliwe. W dużej mierze zmieniliśmy paletę kolorów w tym wydaniu, zastępując powyższy kontrast pomarańczowo-niebieskim. „

Możesz spojrzeć na ich wykresy.

Możesz także użyć linii przerywanych, przerywanych itp.

użytkownik31264
źródło
4

Bardzo mało uwagi poświęcałem „grubości linii” w odniesieniu do właściwej wizualizacji danych. Być może zdolność rozróżniania różnych grubości linii nie jest tak zmienna, jak zdolność rozróżniania kolorów.

Niektóre zasoby:

  1. Hadley Wickham (2009), ggplot: Elegant Graphics for Data Analysis , Springer; ma pomocniczą stronę internetową
  2. 8 sugerowanych zasobów książkowych na temat wizualizacji danych: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualization-24182

Niektóre kursy:

  1. Wykład graficzny w kursie Thomasa Lumleya Wstęp do obliczeń z biostatyki
  2. Absolwent kursu Rossa Ihaki na temat analizy obliczeniowej i grafiki
  3. Kurs Ross Ihaka na temat wizualizacji informacji
  4. Studia licencjackie Deborah Nolan Koncepcje w obliczeniach z danymi
  5. Kurs wizualizacji danych Hadleya Wickhama
bdeonovic
źródło
7
To świetna lista zasobów. Czy są jednak jakieś konkretne zalecenia, które znasz - z jednej lub więcej z nich - dotyczące pytania (grubość linii, kolorowe linie, gdzie może być wiele linii), o których mógłbyś krótko wspomnieć?
Glen_b
Pozwoliłem sobie sformatować twój post. Myślę, że łatwiej jest zobaczyć strukturę. Jeśli ci się nie podoba, cofnij to z moimi przeprosinami.
gung - Przywróć Monikę
2

Chociaż zgadzam się, że nie ma unikalnego rozwiązania problemu, korzystam z rekomendacji tego bloga:

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

Wpisy na temat kolorów dotyczą problemów związanych z ślepotą kolorów i drukowania w skali szarości i podają przykład skali kolorów, która rozwiązuje oba te problemy.

W tych samych artykułach analizowane są również ciągłe skale kolorów, które są wykorzystywane do wielu wykresów ciepła i tak dalej. Nie zaleca się używania tęczy ze względu na ostre przejścia (takie jak strefa żółta, znacznie mniejsza niż czerwona). Zamiast tego możliwe jest przechodzenie między innymi parami kolorów.

Dobry zestaw kolorów do tego celu to niebieski i pomarańczowy (klasyk!). Możesz wykonać test, stosując filtry niewidoczne w kolorze i filtry szare i sprawdzić, czy nadal zauważysz różnicę.

Jeśli chodzi o grubość linii, niektóre ze wspomnianych wcześniej problemów bloga dotyczą tego punktu. Linie, jeśli masz wiele, powinny mieć tę samą grubość, czyli „cienką”. Używaj grubych linii tylko wtedy, gdy chcesz zwrócić uwagę na ten obiekt.

chuse
źródło
1
Nie do końca zgadzam się z „Używaj tylko grubych linii ...”. Grube jasne linie w skali szarości mogą być bardzo skuteczne w wielu przypadkach.
Frank Harrell
1
Z pewnością może być. Chodziło mi tylko o to, że jeśli używasz przyciągającego wzrok stylu, należy go używać do określonego celu.
Chuse