Rekomendasi warna dan ketebalan garis untuk plot garis

31

Banyak yang telah ditulis tentang pilihan warna ramah buta warna untuk peta, poligon, dan wilayah yang diarsir secara umum (lihat misalnya http://colorbrewer2.org ). Saya belum dapat menemukan rekomendasi untuk warna garis dan ketebalan garis yang bervariasi untuk grafik garis. Sasarannya adalah:

  1. mudah membedakan garis bahkan ketika mereka saling terkait
  2. garis mudah dibedakan oleh individu dengan bentuk buta warna yang paling umum
  3. (kurang penting) baris ramah-printer (lihat Penyeduh Warna di atas)

Dalam konteks garis skala hitam dan abu-abu, saya merasa sangat efektif memiliki garis hitam tipis dan garis abu-abu lebih tebal. Saya akan menghargai rekomendasi spesifik yang mencakup berbagai warna, tingkat skala abu-abu, dan ketebalan garis. Saya tidak suka berbagai jenis garis (padat / putus-putus / putus-putus) tetapi bisa dibantah pendapat itu.

Lebih disukai memiliki rekomendasi hingga 10 kurva pada satu grafik. Yang lebih baik adalah seperti Color Brewer: memungkinkan rekomendasi untuk baris m untuk tidak menjadi subset rekomendasi untuk n baris di mana n> m, dan memvariasikan m dari 1 hingga 10.

Harap dicatat : Saya juga menghargai panduan yang hanya membahas bagian pewarnaan garis dari pertanyaan.

Beberapa praktisi menambahkan simbol ke garis setiap beberapa sentimeter untuk membedakan kelas dengan lebih baik. Saya tidak terlalu menyukai yang membutuhkan lebih dari satu fitur (misalnya, warna + tipe simbol) untuk membedakan kelas, dan kadang-kadang ingin memesan simbol untuk menunjukkan informasi yang berbeda.

Dengan tidak adanya panduan lain, saya mengusulkan untuk menggunakan warna yang sama yang direkomendasikan untuk poligon di colorbrewer2.org untuk garis, dan untuk mengalikan lebar garis dengan 2,5 untuk garis yang digambar dengan warna yang kurang cerah / pekat. Saya membuat fungsi R yang mengatur ini. Selain warna bir warna saya pikir saya akan membuat 2 warna pertama menjadi hitam solid (tipis) dan skala abu-abu (tebal) meskipun orang bisa berpendapat bahwa mereka harus hitam solid tipis dan biru tipis.

Fungsi R dapat ditemukan di http://biostat.mc.vanderbilt.edu/wiki/pub/Main/RConfiguration/Rprofile . Setelah Anda menentukan fungsi, colBrewAnda dapat melihat cara kerja pengaturan dengan mengetik

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

Fungsi latticeSetjuga diberikan, untuk mengatur latticeparameter grafik ke pengaturan baru. Perbaikan algoritma disambut dengan baik.

Untuk menjelajahi : dichromatpaket R : http://cran.r-project.org/web/packages/dichromat/

Frank Harrell
sumber
2
Saya akan berpikir bahwa sejumlah jenis garis akan sangat membantu. Pilihan lain yang tampaknya belum disebutkan, adalah penggunaan penanda titik untuk pengukuran individu, misalnya, salib, nol, tanda bintang, dll.
Robert Jones
1
Bagi saya, penanda titik tidak sepenuhnya efektif ketika kurva saling terkait. Tetapi saya telah melihat beberapa contoh di mana mereka bekerja dengan sangat baik.
Frank Harrell

Jawaban:

21

Saya akan mencoba untuk menjadi provokatif di sini dan bertanya-tanya apakah tidak adanya pedoman seperti itu muncul karena ini adalah masalah yang hampir tidak terpecahkan. Orang-orang di bidang yang sangat berbeda tampaknya setuju untuk sering berbicara tentang "plot spageti" dan masalah yang mereka hadapi dalam membedakan seri yang berbeda.

Secara konkret, kumpulan garis untuk beberapa deret waktu individual dapat secara kolektif menyampaikan pola umum dan terkadang deret individual yang berbeda dari pola tersebut.

Namun, pertanyaan saya adalah tentang membedakan semua rangkaian waktu individu ketika mereka memiliki identitas yang Anda sayangi.

Jika Anda mengatakan seri 2 atau 3, seri pembeda biasanya tidak terlalu sulit, dan saya akan cenderung menggunakan garis padat dalam dua atau tiga warna merah, biru atau hitam. Saya juga bermain dengan oranye dan biru seperti yang digunakan oleh Hastie dan teman-teman (lihat jawaban dari @ user31264).

Memvariasikan pola garis (solid, dash, putus-putus, dll.) Saya hanya menemukan nilai terbatas. Garis putus-putus cenderung tersapu secara fisik dan mental dan kombinasi titik-titik dan garis yang lebih halus terlalu halus (artinya, sedikit) berbeda dengan keberhasilan dalam praktik.

Saya akan mengatakan masalahnya sebelum Anda memiliki 10 seri. Kecuali mereka sangat berbeda, seri 5 atau lebih bisa jadi terlalu sulit untuk dibedakan. Psikologi yang umum tampaknya adalah bahwa orang memahami prinsip bahwa rangkaian yang berbeda ditunjukkan dengan warna yang berbeda dan atau simbolisme dengan sangat baik, tetapi tidak memiliki kecenderungan untuk bekerja keras melacak garis-garis individu dan mencoba untuk mengadakan cerita tentang persamaan dan perbedaan di kepala mereka. . Bagian dari ini sering berasal dari penggunaan legenda (atau kunci). Ini kontroversial, tetapi saya akan mencoba memberi label pada seri yang berbeda pada grafik sedapat mungkin. Moto saya di sini adalah "Kalah legenda, atau bunuh kuncinya, jika Anda bisa".

Saya telah menjadi fonder dari pendekatan yang berbeda untuk menampilkan beberapa seri waktu, di mana semua rangkaian waktu yang berbeda ditampilkan berulang kali di beberapa panel, tetapi yang berbeda disorot di masing-masing. Itu adalah perpaduan dari satu ide lama (a) kelipatan kecil (seperti Edward Tufte menyebutnya) dan ide lama lainnya (b) menyoroti serangkaian minat tertentu. Pada gilirannya itu mungkin hanya ide lama yang ditemukan kembali, tetapi sejauh ini saya hanya dapat menemukan referensi terbaru. Lebih banyak di utas ini tentang Statalist .

Dalam hal warna, saya yakin menggunakan abu-abu untuk deret waktu yang merupakan latar belakang apa pun yang sedang ditekankan. Itu tampaknya konsisten dengan sebagian besar jurnal yang layak diterbitkan.

Inilah satu percobaan. Data adalah hasil biji-bijian dari 17 plot di Broadbalk Fields di Rothamsted 1852-1925 dan berasal dari Andrews, DF dan Herzberg, AM (Eds) 1985. Data: Kumpulan masalah dari berbagai bidang untuk siswa dan pekerja penelitian . New York: Springer, Tabel 5.1 dan dapat diunduh dari berbagai tempat (mis. Masukkan uraian tautan di sini . (Detail: Data ada dalam blok 4 baris untuk setiap tahun; baris ketiga dan keempat adalah untuk hasil jerami, tidak diplot di sini. pengidentifikasi plot tidak eksplisit dalam tabel itu.)

Saya tidak memiliki keahlian khusus tentang data seperti ini; Saya hanya ingin beberapa seri waktu yang tidak dapat (dengan mudah) dianggap kecil karena panjang seri atau jumlah panel. (Jika Anda memiliki ratusan, ribuan, ... panel, pendekatan ini benar-benar tidak banyak membantu.) Yang saya bayangkan adalah bahwa seorang analis data, mungkin berbicara dengan ahli materi pelajaran, dapat mengidentifikasi berbagai kesamaan dan perilaku yang tidak biasa di sini dan dapatkan wawasan dan informasi dengan demikian.

masukkan deskripsi gambar di sini

Jelas resep ini dapat digunakan untuk banyak jenis plot lainnya (misalnya plot pencar atau histogram dengan masing-masing bagian disorot secara bergantian); bersama-sama dengan memesan panel sesuai dengan beberapa ukuran atau kriteria yang menarik atau berguna (misalnya dengan median atau persentil ke-90 atau SD); dan untuk hasil model serta data mentah.

Nick Cox
sumber
2
Saya sangat terkesan dengan subsetplot. Bisakah Anda memasukkan beberapa contoh gambar output langsung ke posting Anda? Saya ingin tahu seberapa baik kerjanya karena jumlah baris bervariasi, tetapi ini jelas merupakan solusi paling memuaskan yang pernah saya lihat untuk ~ 10 baris
Silverfish
@Silverfish Terima kasih atas dorongannya. Satu percobaan sekarang ditambahkan.
Nick Cox
1
Nick Saya sepenuhnya setuju dengan "kehilangan label" - meminimalkan legenda jarak jauh - dan dengan menggunakan menyoroti satu kurva pada suatu waktu, membiarkan yang lain redup seperti yang Anda lakukan [Anda bisa hampir sama efektifnya menggunakan hitam pekat untuk kurva yang disorot] . Saya pikir ini adalah ide yang bagus untuk presentasi tetapi tidak begitu optimal untuk menerbitkan makalah karena keterbatasan ruang.
Frank Harrell
Mungkin plot interaksi akan segera menjadi lebih standar dalam penerbitan dan kami akan dapat mengarahkan baris di plot dan mendapatkan informasi lebih lanjut (seluruh baris disorot atau menunjukkan tooltip untuk memberi Anda info lebih lanjut dll).
bdeonovic
1
@ Frank Harrell Pertanyaan tentang gigitan ruang (1) jika panel grafik individual menjadi terlalu kecil untuk dapat dibaca, dalam hal ini manfaat desainnya meragukan; (2) jika jurnal atau editor buku tidak dapat dibujuk untuk memberikan lebih banyak ruang untuk angka yang lebih besar dari biasanya jika tampaknya bermanfaat. (Mungkin Anda memiliki poin lain dalam pikiran.)
Nick Cox
14

Pertanyaan 2 dan 3 Anda jawab sendiri - palet pembuat bir berwarna cocok. Pertanyaan yang sulit adalah 1, tapi seperti Nick, aku khawatir itu didasarkan pada harapan yang salah. Warna garis bukanlah yang membuat seseorang dapat membedakan antara garis dengan mudah, itu didasarkan pada kontinuitas dan seberapa berliku garis itu. Dengan demikian ada pilihan berdasarkan desain, selain warna atau pola garis putus-putus, yang akan membantu membuat plot lebih mudah untuk ditafsirkan.

Saya akan mencuri salah satu diagram Frank yang menunjukkan fleksibilitas splines untuk memperkirakan berbagai fungsi berbentuk berbeda pada domain terbatas sebagai contoh.

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

Sekarang ini menghasilkan 20 baris yang kusut, tantangan yang sulit untuk divisualisasikan.

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

Mess of Lines

Berikut adalah plot yang sama dalam kelipatan kecil, dengan ukuran yang sama, menggunakan panel yang dibungkus. Sedikit lebih sulit untuk membuat perbandingan antar panel, tetapi bahkan dalam ruang yang menyusut, akan lebih mudah untuk memvisualisasikan bentuk garis.

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

Semua 20 Panel

Satu hal yang Stephen Kosslyn buat dalam buku-bukunya adalah bahwa bukan berapa banyak garis yang berbeda membuat plot menjadi rumit, melainkan berapa banyak jenis bentuk garis yang dapat diambil. Jika 20 panel menjadi terlalu kecil, Anda sering dapat mengurangi set ke lintasan yang sama untuk ditempatkan di panel yang sama. Masih sulit untuk membedakan antara garis-garis dalam panel, menurut definisi mereka akan berdekatan setiap kali dan tumpang tindih, tetapi mengurangi kompleksitas membuat antara perbandingan panel cukup sedikit. Di sini saya sewenang-wenang mengurangi 20 baris menjadi 4 pengelompokan terpisah. Ini memiliki manfaat tambahan bahwa pelabelan garis secara langsung lebih sederhana, ada lebih banyak ruang di dalam panel.

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

Panel yang Dikurangi

Ada ungkapan umum yang berlaku untuk situasi ini, jika Anda fokus pada semua yang Anda fokuskan pada apa pun . Dalam kasus dengan hanya sepuluh garis, Anda memiliki (10*9)/2=45pasangan garis yang memungkinkan untuk dibandingkan. Kami mungkin tidak tertarik pada semua 45 perbandingan di sebagian besar keadaan, kami entah tertarik untuk membandingkan garis tertentu satu sama lain atau membandingkan satu baris dengan distribusi sisanya. Jawaban Nick menunjukkan yang terakhir dengan baik. Menggambar garis latar belakang tipis, berwarna terang, dan semi-transparan, dan kemudian menggambar garis latar depan dengan warna cerah dan lebih tebal akan cukup. (Juga untuk perangkat, pastikan untuk menggambar garis latar depan di atas garis lainnya!)

Jauh lebih sulit untuk membuat layering di mana setiap garis individu dapat dengan mudah dibedakan dalam kusut. Salah satu cara untuk mencapai diferensiasi latar depan-latar belakang dalam kartografi adalah penggunaan bayangan, (lihat makalah ini oleh Dan Carr untuk contoh yang baik). Ini tidak akan menskala hingga 10 baris, tetapi dapat membantu untuk 2 atau 3 baris. Berikut ini adalah contoh untuk lintasan di Panel 1 menggunakan Excel!

Excel Shadow

Ada poin lain yang harus dibuat, seperti garis abu-abu terang bisa menyesatkan jika Anda memiliki lintasan yang tidak mulus. Misalnya Anda dapat memiliki dua lintasan dalam bentuk X, atau dua dalam bentuk satu sisi kanan atas dan ke bawah V. Menggambar mereka dengan warna yang sama Anda tidak akan dapat melacak garis, dan inilah mengapa beberapa orang menyarankan menggambar plot koordinat paralel menggunakan garis halus atau jittering / off-setting titik ( Graham dan Kennedy, 2003 ; Dang et al., 2010 ).

Jadi saran desain dapat berubah tergantung pada tujuan akhir dan sifat data. Tetapi ketika membuat perbandingan bivariat antara lintasan merupakan hal yang menarik, saya pikir pengelompokan lintasan yang sama dan menggunakan kelipatan kecil membuat plot lebih mudah untuk diinterpretasikan dalam berbagai keadaan. Saya merasa ini umumnya lebih produktif daripada kombinasi warna / garis garis akan di plot yang rumit. Plot panel tunggal dalam banyak artikel jauh lebih besar dari yang seharusnya, dan membelah menjadi 4 panel biasanya dimungkinkan dalam batasan halaman tanpa banyak kerugian.

Andy W
sumber
3
Andy ini luar biasa. Saya berpikir bahwa untuk contoh kurva spline khusus ini akan sama efektif, atau bahkan lebih efektif, untuk menetapkan 5 warna ke 20 garis sehingga kurva yang lebih dekat bersama diberi warna yang berbeda. Tidak ada satu metrik jarak yang akan selalu berfungsi tetapi biasanya ada metrik yang berfungsi untuk situasi tertentu. Seperti yang Anda katakan, semua ini tergantung pada kehalusan dan kekasaran.
Frank Harrell
5

Dari "Elemen Pembelajaran Statistik" oleh Trevor Hastie et al. :

"Edisi pertama kami tidak ramah bagi pembaca buta warna; khususnya, kami cenderung menyukai kontras merah / hijau yang sangat menyusahkan. Kami telah mengubah palet warna dalam edisi ini sebagian besar, menggantikan yang di atas dengan kontras oranye / biru. "

Anda mungkin ingin melihat grafiknya.

Anda juga dapat menggunakan garis putus-putus, bertitik dll.

pengguna31264
sumber
4

Saya telah melihat sangat sedikit perhatian diberikan pada "ketebalan garis" dalam hal visualisasi data yang tepat. Mungkin kemampuan untuk membedakan ketebalan garis yang berbeda tidak beragam seperti kemampuan untuk membedakan warna.

Beberapa sumber:

  1. Hadley Wickham (2009), ggplot: Grafik Elegan untuk Analisis Data , Springer; memiliki halaman web pendukung
  2. 8 sumber buku yang disarankan tentang visualisasi data: http://www.tableausoftware.com/about/blog/2013/7/list-books-about-data-visualisation-24182

Beberapa kursus:

  1. Kuliah Grafis dalam komputasi Pengantar Thomas Lumley untuk kursus biostatistik
  2. Kursus pascasarjana Ross Ihaka tentang analisis data komputasi dan grafik
  3. Program sarjana Ross Ihaka tentang visualisasi informasi
  4. Konsep kursus sarjana Deborah Nolan dalam Komputasi dengan Data
  5. Kursus visualisasi data Hadley Wickham
bdeonovic
sumber
7
Itu daftar sumber daya yang bagus. Namun, apakah ada rekomendasi khusus yang Anda ketahui - dari satu atau lebih dari itu - yang berhubungan dengan pertanyaan (ketebalan garis, dengan garis berwarna, di mana mungkin ada banyak garis), yang dapat Anda sebutkan secara singkat?
Glen_b -Reinstate Monica
Saya mengambil kebebasan memformat pos Anda. Saya pikir itu membuatnya lebih mudah untuk melihat strukturnya. Jika Anda tidak suka, putar kembali dengan permintaan maaf saya.
gung - Reinstate Monica
2

Meskipun saya setuju bahwa tidak ada solusi unik untuk masalah ini, saya menggunakan rekomendasi dari blog ini:

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

Posting pada warna mengatasi masalah buta warna dan pencetakan skala abu-abu dan memberikan contoh skala warna yang memecahkan kedua masalah ini.

Dalam artikel yang sama dianalisis juga skala warna kontinu, yang banyak digunakan untuk plot panas dan sebagainya. Dianjurkan untuk tidak menggunakan pelangi, karena beberapa transisi yang tajam (seperti zona kuning, jauh lebih kecil daripada merah). Sebagai gantinya, dimungkinkan untuk melakukan transisi di antara pasangan warna lainnya.

Satu set warna yang bagus untuk tujuan ini adalah biru dan oranye (klasik!). Anda dapat melakukan tes, dengan menerapkan filter buta-warna dan abu-abu dan melihat apakah Anda masih dapat melihat perbedaannya.

Untuk ketebalan garis, beberapa masalah blog yang disebutkan sebelum membahas poin ini. Garis, jika Anda memiliki banyak, harus memiliki ketebalan yang sama, yaitu "tipis". Gunakan garis tebal hanya jika Anda ingin memperhatikan objek itu.

chuse
sumber
1
Saya tidak sepenuhnya setuju dengan "Gunakan garis tebal saja ...". Garis abu-abu tebal yang tebal bisa sangat efektif dalam banyak kasus.
Frank Harrell
1
Pasti bisa. Saya hanya bermaksud bahwa jika Anda menggunakan gaya yang menarik, itu harus digunakan dengan tujuan.
chuse