Serangkaian warna "Terbaik" untuk digunakan untuk membedakan seri dalam plot berkualitas publikasi

89

Apakah ada penelitian yang telah dilakukan pada set warna apa yang terbaik untuk digunakan untuk menunjukkan beberapa seri pada plot yang sama? Saya baru saja menggunakan default di matplotlib, dan mereka terlihat sedikit kekanak-kanakan karena mereka semua cerah, warna primer.

David Hollman
sumber
28
Ini tidak menjawab pertanyaan Anda, tetapi saya pikir ini penting untuk disebutkan. Jika memungkinkan, skema warna apa pun yang dipilih harus dilengkapi dengan simbol atau gaya garis yang berbeda sehingga ketika plot dicetak dalam warna hitam dan putih masih mudah dipahami. Terlalu sering penulis hanya mengandalkan warna, membuat angka-angka tidak berguna bagi orang buta warna dan mereka yang lebih suka membaca versi cetak hitam-putih dari kertas Anda. Plot harus selalu, jika mungkin, bekerja dalam warna hitam dan putih, dan bekerja dalam warna "lebih baik".
WetlabStudent
11
+1 ke MHH. Sepotong komentar televisi yang legendaris tentang snooker menyatakan hal yang sama secara tidak langsung: "Steve mencari bola merah muda - dan bagi Anda yang menonton hitam putih, merah muda di sebelah hijau." Penjelasan untuk pembaca yang lebih muda: Itu datang dari masa ketika beberapa orang mampu membeli televisi berwarna tetapi yang lain harus menggunakan televisi hitam putih yang lebih murah.
Nick Cox
5
"Terbaik" untuk tujuan apa? Ini bukan pertanyaan sepele atau sembrono. Untuk mengesankan pembaca forum internet, saya menggunakan simbol grafis yang berfungsi tanpa warna dan kemudian menghiasnya dengan warna pelangi (yang mungkin bermakna tetapi ada terutama untuk menarik perhatian dan memberikan rasa "kualitas"). Untuk plot yang dimaksudkan untuk mengirimkan data, skema warna lain mungkin dipilih, sedangkan untuk plot yang dibuat dengan cara eksplorasi untuk mengungkapkan kemungkinan pola yang tidak terduga (dalam gestalt visual ) skema harus tergantung pada tujuan: diferensiasi, agregasi, seleksi, lain?
whuber
2
@whuber: Anda benar. Saya seharusnya menjelaskan bahwa saya bermaksud untuk publikasi dalam literatur ilmiah, dan secara umum saya bermaksud meminta jawaban untuk masing-masing kategori agregasi, seleksi, diferensiasi, dll. Memang, agregasi dan diferensiasi seringkali bukan tujuan yang terpisah: dalam gambar dari salah satu makalah saya ( dx.doi.org/10.1063/1.4864755 ), saya membutuhkan keduanya (dan saya pikir saya tidak melakukannya dengan sangat baik). (Maaf untuk Anda yang tidak berada di kampus akademis; Saya akan segera mencoba membuat tautan publik umum)
David Hollman

Jawaban:

53

Referensi umum untuk memilih palet warna adalah karya Cynthia Brewer di ColorBrewer . Warna dipilih berdasarkan pola perseptual dalam peta choropleth, tetapi sebagian besar saran yang sama berlaku untuk menggunakan warna dalam semua jenis plot untuk membedakan pola data. Jika warna semata-mata untuk membedakan antara garis yang berbeda, maka palet kualitatif adalah dalam urutan.

Seringkali warna tidak diperlukan dalam plot garis dengan hanya beberapa garis, dan simbol titik yang berbeda dan / atau pola tanda hubung cukup efektif. Masalah yang lebih umum dengan plot garis adalah bahwa jika garis sering tumpang tindih akan sulit untuk membedakan pola yang berbeda tidak peduli simbol atau warna apa yang Anda gunakan. Stephen Kosslyn merekomendasikan aturan umum untuk hanya memiliki 4 baris dalam plot. Jika Anda memiliki lebih banyak pertimbangan, pisahkan garis menjadi beberapa plot kecil. Berikut adalah contoh yang menunjukkan rekomendasi

Tidak perlu warna dan label lebih dari cukup.

Andy W
sumber
4
Saya suka palet "Dark2" dari ColorBrewer!
Gimelist
5
Terima kasih atas rekomendasi ColorBrewer! Itulah hal yang saya cari.
David Hollman
Gambar skala abu-abu tidak berfungsi jika ada dua seri dengan nilai yang sama baik di tengah di suatu tempat (dua seri tidak dapat ditelusuri kembali melewati titik itu), atau pada akhirnya (label tidak akan dapat membedakan mana seri adalah yang). Ini bagus ketika bekerja ...
naught101
Setuju @ naught101 untuk bagian tengah (bagian yang bertepatan hanya menempatkan label di suatu tempat sebelum bagian akhir). Ini adalah salah satu alasan untuk tidak menggunakan interpolasi linier di antara titik, tetapi menggunakan beberapa jenis spline. Dalam hal ini spline akan melengkung ke arah yang berbeda. Itu terjadi cukup banyak dalam plot koordinat paralel padat. (Jittering juga dapat membantu data dengan banyak ikatan, seperti data hitung integer rendah.)
Andy W
1
Ulasan Anda tentang data yaitu. buku-buku di Amazon luar biasa. Terima kasih untuk itu.
Andy W
40

Saran yang sangat bagus di jawaban lain, tetapi di sini ada beberapa poin tambahan dari saran tingkat rendah saya sendiri kepada siswa. Ini semua hanya saran, tentu saja, untuk dipikirkan tentang memberikan pertanyaan kunci: Apa yang ingin saya lakukan dengan grafik saya? Apa yang masuk akal dengan data ini? Siapa pembaca? Apa yang saya harapkan warna dilakukan dalam grafik? Apakah grafik berfungsi dengan baik, terlepas dari dogma orang lain?

Selain itu, pentingnya warna sangat bervariasi dari satu grafik ke grafik lainnya. Untuk choropleth atau peta tambalan, di mana idenya memang bahwa area yang berbeda diwarnai atau setidaknya diarsir secara berbeda, keberhasilan grafik terkait dengan keberhasilan skema warnanya. Untuk jenis grafik lainnya, warna dapat diabaikan atau bahkan gangguan.

  1. Apakah semua warna Anda dibutuhkan? Misalnya, jika variabel atau grup yang berbeda dibedakan secara jelas oleh label teks di berbagai wilayah grafik, maka warna yang terpisah juga sering kali terlalu berlebihan. Waspadalah terhadap salad buah atau efek techco dreamcoat. Untuk bagan pai dengan label teks pada atau oleh irisan, warna tidak menyampaikan informasi tambahan, misalnya. (Jika diagram lingkaran Anda bergantung pada kunci atau legenda, Anda cenderung mencoba jenis grafik yang salah.)

  2. Jangan pernah mengandalkan kontras antara merah dan hijau, karena begitu banyak orang berjuang untuk membedakan warna-warna ini.

  3. Urutan pelangi (ROYGBIV atau merah-oranye-kuning-hijau-biru-nila-ungu) mungkin menarik karena alasan fisik, tetapi mereka tidak bekerja dengan baik dalam praktik. Sebagai contoh, kuning biasanya merupakan warna yang lemah sedangkan oranye dan hijau biasanya lebih kuat, sehingga kesan bahkan bukan urutan monoton.

  4. Hindari skema warna apa pun yang memiliki konsekuensi besar bercak warna yang kuat.

  5. Urutan dari merah tua ke biru tua bekerja dengan baik ketika urutan yang dibutuhkan diperlukan. Jika putih (seperti biasa) warna latar belakang di mana saja, jangan gunakan itu, tetapi beralih dari merah pucat ke biru pucat. [ditambahkan 1 Maret 2018] Mungkin terlalu jelas untuk digarisbawahi: merah memiliki konotasi negatif dan / atau bahaya bagi banyak orang, yang dapat membantu, dan biru kemudian dapat berarti positif. Terlalu jelas untuk digarisbawahi, tetapi saya melakukannya dengan cara apa pun: Merah dan biru memang memiliki konotasi politik di banyak negara.

  6. Biru dan oranye cocok bersama (anggukan terima kasih kepada Hastie, Tibshirani, dan Friedman di sini: http://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf ) [ditambahkan 1 Maret 2018] Banyak buku pengantar tentang visualisasi sekarang merekomendasikan oranye, biru dan abu-abu sebagai palet dasar: oranye dan / atau biru untuk apa yang Anda pedulikan dan abu-abu sebagai latar belakang.

  7. Skala abu-abu dari abu-abu pucat ke abu-abu gelap dapat bekerja dengan baik dan merupakan ide yang baik ketika reproduksi warna keluar dari pertanyaan. (Ini adalah printer yang buruk yang tidak dapat membuat bash adil pada skala abu-abu.) (Abu-abu jika Anda suka; preferensi berubah di lautan, tampaknya; sama seperti warna dan warna.)

  8. [ditambahkan 5 Agu 2016] Prinsip yang cukup umum adalah seringkali dua warna bekerja lebih baik daripada banyak. Jika dua kelompok sama-sama menarik, maka pilih warna yang sama kuatnya (mis. Merah atau oranye dan biru). Jika satu kelompok memiliki ketertarikan khusus di antara beberapa kelompok, buat menjadi biru atau oranye, dan biarkan yang lain menjadi abu-abu. Menggunakan tujuh warna untuk tujuh kelompok pada prinsipnya membawa informasi, tetapi sulit bahkan untuk fokus pada satu warna pada saat ada persaingan dari beberapa yang lain. Kelipatan kecil bisa lebih baik untuk beberapa kelompok daripada plot multi-warna.

Nick Cox
sumber
1
Poin yang sangat bagus tentang warna lemah dan kuat
shadowtalker
2
Poin 2 SANGAT penting. Salah satu guru statistik saya buta warna dan dengan senang hati menggunakan "kuning muda" dan "kuning hijau" dalam bagan. Warnanya sebenarnya identik dengan kami, tetapi baginya itu mudah dibedakan.
Christian Sauer
1
Terima kasih atas tipsnya, terutama # 2. Saya melihat kembali plot saya dan menyadari bahwa merah dan hijau adalah dua warna pertama yang selalu dipilih matplotlib. Itu tidak terlalu bagus.
David Hollman
Itu memang kelihatannya standar bodoh.
Nick Cox
27

Sebenarnya ada banyak penelitian tentang ini dalam beberapa tahun terakhir.

Poin besar adalah "resonansi semantik." Ini pada dasarnya berarti "warna yang sesuai dengan apa yang mereka wakili," misalnya deret waktu untuk uang harus berwarna hijau, setidaknya untuk pemirsa di AS. Ini tampaknya meningkatkan pemahaman. Satu makalah yang sangat menarik tentang masalah ini adalah oleh Lin, et al (2013): http://vis.stanford.edu/papers/semantically-resonant-colors

Ada juga generator warna iWantHue yang sangat bagus, di http://tools.medialab.sciences-po.fr/iwanthue/ , dengan banyak info di tab lain.

Referensi

Lin, Sharon, Julie Fortuna, Chinmay Kulkarni, Maureen Stone, dan Jeffrey Heer. (2013). Memilih Warna Semantik-Resonan untuk Visualisasi Data. Forum Grafik Komputer (Proc. EuroVis), 2013

shadowtalker
sumber
13
+1 ... namun, beberapa hal - seperti contoh uang Anda - tidak universal. Uang mungkin berwarna hijau (-ish) di AS. Ini tidak hijau di mana-mana dan asosiasi dengan warna dapat bervariasi dari satu negara ke negara lain (misalnya seseorang di Jerman mungkin lebih cenderung mengaitkan biru dengan uang, meskipun saat ini cenderung datang dalam berbagai warna).
Glen_b
@Glen_b good point
shadowtalker
1
+1 untuk mengutip makalah, yang paling baik menjawab tiga kata pertama dari pertanyaan :-)
David Hollman
22

Paul Tol menyediakan skema warna yang dioptimalkan untuk perbedaan warna (yaitu, data kategoris atau kualitatif) dan penglihatan buta warna di situs webnya , dan secara terperinci dalam "technote" (file PDF) yang terhubung ke sana. Dia menyatakan:

Untuk membuat grafik dengan hasil ilmiah Anda sejelas mungkin, ada gunanya memiliki palet warna yang:

  • berbeda untuk semua orang, termasuk pembaca buta warna;
  • berbeda dari hitam dan putih;
  • berbeda pada layar dan kertas; dan
  • masih cocok satu sama lain.

Saya mengambil skema warna dari "Palette 1" -nya dari 9 warna yang paling berbeda, dan meletakkannya di matplotlibrcfile saya di bawah axes.color_cycle:

axes.color_cycle    : 332288, 88CCEE, 44AA99, 117733, 999933, DDCC77, CC6677, 882255, AA4499

Kemudian, meminjam dari Joe Kington menjawab garis default seperti yang direncanakan oleh:

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

x = np.linspace(0, 20, 100)

fig, axes = plt.subplots(nrows=2)

for i in range(1,10):
    axes[0].plot(x, i * (x - 10)**2)

for i in range(1,10):
    axes[1].plot(x, i * np.cos(x))

plt.show()

menghasilkan:

masukkan deskripsi gambar di sini

Untuk peta warna yang berbeda (misalnya, untuk mewakili nilai skalar), referensi terbaik yang saya lihat adalah makalah oleh Kenneth Moreland yang tersedia di sini " Diverging Peta Warna untuk Visualisasi Ilmiah ". Dia mengembangkan skema keren-hangat untuk menggantikan skema pelangi, dan "menyajikan algoritma yang memungkinkan pengguna untuk dengan mudah menghasilkan peta warna kustom mereka sendiri".

Sumber lain yang berguna untuk informasi tentang penggunaan warna dalam visualisasi ilmiah berasal dari Robert Simmon, pria yang menciptakan gambar "Marmer Biru" untuk NASA. Lihat serangkaian posnya di situs web Observatorium Bumi.

ben yang berbeda
sumber
6
Memberi +1 ke satu-satunya (!) Jawaban dari sembilan yang benar-benar menunjukkan warna sebagai jawaban atas pertanyaan tentang "warna terbaik".
amoeba
@amoeba: baik tidak lagi :-)
Tung
20

Pada colorbrewer2.org Anda dapat menemukan skema warna kualitatif , berurutan dan beragam . Kualitatif memaksimalkan perbedaan antara warna-warna berturut-turut, dan itulah yang saya gunakan di gnuplot. Keindahan situs ini adalah Anda dapat dengan mudah menyalin kode heksadesimal warna sehingga mudah diimpor. Sebagai contoh, saya menggunakan set 8-warna berikut:

#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf

Itu agak menyenangkan dan menghasilkan hasil yang jelas.

Sebagai catatan tambahan, sekuensial digunakan ketika Anda membutuhkan gradien yang halus dan menyimpang ketika Anda perlu menyoroti perbedaan dari nilai pusat (mis. Ketinggian gunung dan kedalaman laut). Anda dapat membaca lebih lanjut tentang skema warna ini di sini .

Joseph D'Arimathea
sumber
1
Saya pribadi tidak menemukan kuning cerah menjadi warna plot yang jelas
rhombidodecahedron
11

Ada banyak situs web yang didedikasikan untuk memilih palet warna. Saya tidak tahu bahwa ada serangkaian warna tertentu yang secara obyektif adalah yang terbaik, Anda harus memilih berdasarkan audiens Anda dan nada pekerjaan Anda.

Lihat http://www.colourlovers.com/palettes atau http://design-seeds.com/index.php/search untuk memulai. Beberapa dari mereka memiliki warna yang hampir menunjukkan kelompok yang berbeda, tetapi yang lain akan memberi Anda warna pelengkap di rentang yang lebih luas.

Anda juga dapat melihat pengaturan warna yang tidak standar di Matplotlib .

Jordan Bentley
sumber
5

Saya suka palet Dark2 dari colorbrewer untuk plot pencar. Kami menggunakan ini di buku ggobi , www.ggobi.org/book . Tetapi sebaliknya palet warna dimaksudkan untuk area geografis daripada plot data. Pilihan warna yang baik masih menjadi masalah untuk plot berbasis titik.

Paket R colorspacedan dichromatberguna. colorspacememungkinkan pemilihan warna di sekitar kemudi: Anda dapat menghabiskan berjam-jam / hari fine tuning. dichromatmembantu memeriksa buta warna.

ggplot2 umumnya memiliki standar yang baik, meskipun tidak harus bukti buta warna.

Skema merah ke biru yang berbeda terlihat bagus di komputer Anda tetapi tidak memproyeksikan dengan baik.

Dianne Cook
sumber
3

Kemungkinan lain adalah untuk menemukan seperangkat warna yang a) sama dalam LAB, b) mempertimbangkan buta warna, dan c) dapat masuk ke dalam gamut dari ruang warna sRGB serta gamut dari ruang CMYK yang paling umum.

Saya pikir persyaratan terakhir adalah keharusan untuk setiap metode memilih warna - itu tidak ada gunanya jika warna terlihat bagus di layar tetapi kacau ketika dicetak dalam proses CMYK. Dan karena OP menetapkan "kualitas publikasi", saya berasumsi bahwa grafik memang akan dicetak dalam CMYK.

JenSCDC
sumber
3

Ini adalah skema favorit saya. Ini memiliki 20 (!!!!) warna berbeda, yang semuanya mudah dibedakan. Mungkin gagal untuk orang buta warna.

#e6194b
#3cb44b
#ffe119
#0082c8
#f58231
#911eb4
#46f0f0
#f032e6
#d2f53c
#fabebe
#008080
#e6beff
#aa6e28
#fffac8
#800000
#aaffc3
#808000
#ffd8b1
#000080
#808080
#ffffff
#000000
Ahli Fisika enigmatic
sumber
2

Saat merencanakan garis, Anda harus waspada terhadap warna hijau dan kuning, yang tidak terlihat bagus pada proyektor. Karena saya akhirnya menggunakan kembali sebagian besar plot saya dalam presentasi, saya menghindari warna-warna ini meskipun maksud awalnya adalah untuk publikasi layar atau kertas.

Demi mempertahankan kontras tinggi, itu membuat saya hitam, merah, biru, magenta, cyan dan jika saya benar-benar membutuhkannya saya menggunakan abu-abu. Memang, sebagian besar adalah warna-warna cerah, primer atau sekunder. Saya tahu itu mungkin tidak optimal dari sudut pandang estetika, tapi saya lebih tertarik pada kejelasan apa yang saya sajikan. Di sisi lain, secara konsisten menggunakan kembali warna yang sama dari palet terbatas bisa menjadi hal yang baik secara estetika.

Jika Anda menggunakan lebih dari 6 baris, Anda mengisi lebih banyak ruang dan bergerak ke arah merencanakan blok warna. Untuk plot semacam ini, saya pikir setiap kasus perlu dipertimbangkan secara terpisah. Apakah Anda ingin yang ekstrem menonjol, atau nol-penyeberangan? Apakah data Anda bersiklus (mis. 0 dan 2π harus menggunakan warna yang sama)? Apakah ada analogi dengan standar seperti biru / merah untuk suhu? Apakah putih mewakili NaN, tidak ada data, atau akan digunakan sebagai highlight? dan sebagainya.

craq
sumber
2

Untuk pemirsa buta warna, CARTOColors memiliki skema ramah warna buta yang disebut Safeberdasarkan skema warna populer Paul Tol . Palet ini terdiri dari 12 warna yang mudah dibedakan.

Palet ramah warna besar lainnya yang sangat bagus adalah skema Okabe dan Ito yang diusulkan dalam artikel mereka "Colour Universal Design (CUD): Cara membuat gambar dan presentasi yang ramah terhadap orang buta warna."

### Example for R users
library(ggplot2)
library(rcartocolor)
library(patchwork)
theme_set(theme_classic(base_size = 14) + theme(panel.background = element_rect(fill = "#ecf0f1")))

set.seed(123)
df <- data.frame(x = rep(1:5, 8), 
                 value = sample(1:100, 40), 
                 variable = rep(paste0("category", 1:8), each = 5))

safe_pal <- carto_pal(12, "Safe")
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", 
                            "#0072B2", "#D55E00", "#CC79A7", "#000000")

# plot
p1 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_line(aes(colour = variable), size = 1) +
  scale_color_manual(values = palette_OkabeIto_black)


p2 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_col(aes(fill = variable)) +
  scale_fill_manual(values = safe_pal)

p1 / p2

Tung
sumber