出版品質のプロットでシリーズを区別するために使用する「ベスト」シリーズの色


89

同じプロットに複数のシリーズを表示するために使用するのに最適な色のセットは何ですか?でデフォルトを使用しましたが、matplotlibすべて明るい原色なので少し幼稚に見えます。


28
これはあなたの質問には答えませんが、言及することは重要だと思います。可能な場合は常に、選択した配色に異なる記号または線のスタイルを追加して、プロットを白黒で印刷しても理解しやすいようにする必要があります。あまりにも多くの場合、作者は色だけに頼り、色盲の人やあなたの紙の白黒印刷版を読むことを好む人には役に立たないようにしています。プロットは、可能な場合は常に白黒で動作し、カラーで「より良く」動作する必要があります。
WetlabStudent 14年

11
MHHに+1。スヌーカーに関するテレビの伝説的な解説は、間接的に同じことを言っています。「スティーブはピンクのボールを狙っています。白黒で見ている人にとっては、ピンクはグリーンの隣にあります。」若い読者への説明:それは、カラーテレビを買う余裕のある人もいれば、安価な白黒テレビを買わなければならなかった時代から来ています。
ニックコックス14年

5
どんな目的に「最高」ですか?これは些細な問題でも、軽微な問題でもありません。インターネットフォーラムの読者に感銘を与えるために、私は色なしで機能するグラフィカルシンボルを使用し、それらを虹色で装飾します(意味があるかもしれませんが、主に注意を引き、「品質」の感覚を与えるためにあります)。データを送信することを目的とするプロットの場合、別のカラースキームを選択できますが、探索的な方法で作成され、予想外のパターンを(視覚的なゲシュタルトで)明らかにするプロットの場合、スキームは目的に依存する必要があります:差別化、集約、選択、その他?
whuberの

2
@whuber:あなたは要点を述べます。科学文献への掲載を意図していることを明記すべきであり、一般に、集計、​​選択、分化などの各カテゴリへの回答を求めるつもりでした。実際、集計と分化はしばしば別々の目標ではありません。私の論文の1つ(dx.doi.org/10.1063/1.4864755)から、両方が必要でした(そして、私はそれを非常にうまくやったとは思いません)。(アカデミックキャンパスにいない皆さん、ごめんなさい。一般公開のリンクを近日中に公開する予定です)
デビッドホルマン14年

回答:


53

カラーパレットを選択するための一般的なリファレンスは、ColorBrewerでのCynthia Brewerの作業です。色は、コロプレスマップの知覚パターンに基づいて選択されましたが、ほとんどの同じアドバイスは、データパターンを区別するためにあらゆるタイプのプロットで色を使用する場合に適用されます。色が異なる行を区別するためだけのものである場合、定性的なパレットが適切です。

多くの場合、数本の線だけのラインプロットでは色は必要なく、異なるポイントシンボルやダッシュパターンで十分に効果的です。ラインプロットのより一般的な問題は、ラインが頻繁に重なる場合、使用するシンボルや色に関係なく、異なるパターンを区別することが困難になることです。Stephen Kosslynは、プロットに4行しかないという一般的な経験則を推奨しています。さらに線を一連の小さな複数のプロットに分割することを検討している場合。ここに推奨事項を示す例があります

色は不要で、ラベルは十分です。


4
ColorBrewerの「Dark2」パレットが大好きです。
ギムリスト14年

5
ColorBrewerの推薦をありがとう!それは私が探していた種類のものです。
デビッドホルマン14年

中間のどこかに同じ値を持つ2つのシリーズがある場合(2つのシリーズはそのポイントを超えて遡ることはできません)、または最後にある場合(ラベルは区別できません)、グレースケールイメージは機能しませんシリーズはどれですか)。それは...しかし働くとき、それは素晴らしいことだ
naught101

中央の@ naught101に同意します(両端が一致するのは、端の前のどこかにラベルを置くだけです)。実際にポイント間の線形補間を使用せず、ある種のスプラインを使用する理由の1つです。その場合、スプラインは異なる方向に湾曲します。これは、密な平行座標プロットではかなり多く発生します。(ジッターは、低整数カウントデータなど、多くの関係を持つデータにも役立ちます。)
Andy W

1
データのレビュー。アマゾンの本はすごい。有難うございます。
アンディW

40

他の回答では非常に優れたアドバイスですが、ここでは、学生に対する低レベルのアドバイスからいくつかの追加ポイントを示します。これは、当然のことながら、重要な質問を考えて考えるための単なるアドバイスです:グラフの目的は何ですか?これらのデータで何が理にかなっていますか?読者は誰ですか?グラフ内で色が期待することは何ですか?他の誰かのドグマに関係なく、グラフはうまく機能しますか?

さらに、色の重要性はグラフごとに大きく異なります。コロプレスまたはパッチマップの場合、実際には異なる領域が色付けされているか、少なくとも異なった陰影が付けられているという考えの場合、グラフの成功はそのカラースキームの成功と結びついています。他の種類のグラフの場合、色は不要な場合や迷惑になる場合があります。

  1. あなたの色はすべて必要ですか?たとえば、さまざまな変数またはグループがグラフのさまざまな領域のテキストラベルによって明確に区別されている場合、別々の色もしばしば過剰になります。フルーツサラダまたはテクニカラードリームコートの効果に注意してください。たとえば、スライス上またはスライスごとにラベルが付けられた円グラフの場合、色は追加情報を伝えません。(円グラフがキーまたは凡例に依存している場合、間違った種類のグラフを試している可能性があります。)

  2. 多くの人がこれらの色を区別するのに苦労しているため、赤と緑のコントラストに頼らないでください。

  3. レインボーシーケンス(ROYGBIVまたは赤、オレンジ、黄、緑、青、インディゴバイオレット)は、物理的な理由でアピールする場合がありますが、実際にはうまく機能しません。たとえば、通常黄色は弱い色ですが、オレンジと緑は通常強いので、印象は単調なシーケンスではありません。

  4. 強い色の大きなパッチの結果となるカラースキームを避けてください。

  5. 順序付けられたシーケンスが必要な場合、濃い赤から濃い青までのシーケンスが適切に機能します。白が(いつものように)背景色である場合、それを使用せず、淡い赤から淡い青にスキップします。[2018年3月1日追加]下線を引くにはあまりにも明白かもしれません。赤は多くの人にとって否定的および/または危険を意味します。下線を引くのはあまりにも明白ですが、私はそれを何とかします。赤と青には多くの国で政治的な意味合いがあります。

  6. 青とオレンジは相性がいい(ここでHastie、Tibshirani、Friedmanに感謝の意を表する:http ://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf )[2018年3月1日追加]視覚化の入門書では、オレンジ、青、グレーを基本パレットとして使用するようになりました。オレンジおよび/または青を気にかけ、グレーを背景に使用します。

  7. 淡いグレーから濃いグレーまでのグレースケールはうまく機能し、色の再現が問題にならない場合に適しています。(これはグレースケールで公平なbashを作成できないお粗末なプリンターです。)(好みに応じてグレー。海を越えて好みが変わるようです。色と色のように。)

  8. [2016年8月5日追加]かなり一般的な原則は、多くの場合、2色が多くの場合よりもはるかに優れていることです。2つのグループの両方に関心がある場合は、同様に強い色(赤またはオレンジと青など)を選択します。1つのグループが複数の中で特に関心がある場合は、青またはオレンジにし、他のグループを灰色にします。原則として7つのグループに7色を使用することで情報が得られますが、他の複数のグループとの競争があるときに一度に1つの色に集中することさえ困難です。複数のグループの場合、マルチカラープロットよりも小さな倍数の方が適しています。


1
弱い色と強い色について非常に良い点
シャドウトーカー14年

2
ポイント2は非常に重要です。私の統計教師の一人は色盲で、チャートで「明るい黄色」と「明るい緑色の黄色」を喜んで使用していました。色は私たちとほぼ同じでしたが、彼にとっては簡単に区別できました。
クリスチャンザウアー14年

1
ヒント、特に#2をありがとう。プロットを振り返ると、matplotlibが常に選択する最初の2色は赤と緑であることがわかりました。それはそれほど素晴らしいことではありません。
デビッドホルマン14年

それはドープのデフォルトのようです。
ニックコックス14年

27

実際、近年、これに関する多くの研究が行われています。

大きなポイントは「セマンティック共鳴」です。これは基本的に「それらが表すものに対応する色」を意味します。例えば、少なくとも米国の聴衆にとっては、お金の時系列は緑色にすべきです。これにより、理解度が明らかに向上します。このテーマに関する非常に興味深い論文の1つは、Lin他(2013)によるものです:http : //vis.stanford.edu/papers/semantically-resonant-colors

http://tools.medialab.sciences-po.fr/iwanthue/には非常に優れたiWantHueカラージェネレーターもあり、他のタブには多くの情報があります。

参照資料

リン、シャロン、ジュリー・フォーチュナ、チンメイ・クルカルニ、モーリーン・ストーン、ジェフリー・ヒーア。(2013)。データ視覚化のための意味的に共鳴する色の選択。コンピューターグラフィックスフォーラム(Proc。EuroVis)、2013


13
+1 ...ただし、お金の例など、いくつかのことは普遍的ではありません。お金は、米国では緑色(-ish)かもしれません。それはどこでも緑ではなく、色との関連は国ごとに異なる可能性があります(たとえば、ドイツの誰かは青をお金と関連付ける可能性が高いかもしれませんが、今日ではさまざまな色で来る傾向があります)。
Glen_b 14年

@Glen_bの良い点
shadowtalker 14年

1
最高のアドレス:-)質問の最初の三つの言葉引用論文のための1
デビッドHollman

22

Paul Tolは、色の違い(すなわち、カテゴリーまたは定性データ)および色盲の視覚に最適化された配色を彼のWebサイトに提供し、詳細にリンクされた「technote」(PDFファイル)で提供します。彼は言い​​ます:

科学的な結果のグラフィックをできるだけ明確にするには、次のような色のパレットを用意すると便利です。

  • 色覚異常の読者を含む、すべての人々にとって明確な。
  • 白黒とは異なります。
  • 画面と紙で区別されます。そして
  • まだよく一致しています。

私は彼の「パレット1」から最も明確な9色の配色を取り、それを以下のmatplotlibrcファイルに配置しましたaxes.color_cycle

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

次に、Joe Kington's answerから借用して、次のようにプロットされるデフォルトの行を使用します。

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

結果:

ここに画像の説明を入力してください

カラーマップの発散(たとえば、スカラー値を表す)については、Kenneth Morelandの論文「科学的な視覚化のためのカラーマップの発散」を参照してください。彼は、レインボースキームに代わるクールウォームスキームを開発し、「ユーザーが独自のカスタマイズされたカラーマップを簡単に生成できるアルゴリズムを提示します」。

科学的な視覚化における色の使用に関する情報のもう1つの有用な情報源は、NASAの「青い大理石」画像を作成したロバートシモンから来ています。Earth Observatory Webサイトで彼の一連の投稿を参照してください。


6
「最高の色」についての質問に答えて実際に表示する 9つの回答のうち、1つだけ(!)に+1します。
アメーバ14年

@amoeba:よくありません:-)

20

colorbrewer2.orgあなたは見つけることができる定性的なシーケンシャルおよび発散カラースキームを。定性は、連続する色の違いを最大化します。これが私がgnuplotで使用しているものです。このサイトの美しさは、色の16進コードを簡単にコピーできるため、簡単にインポートできることです。例として、次の8色セットを使用しています。

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

それはかなり快適で、明確な結果を生み出します。

補足として、中央値との違いを強調する必要がある場合(たとえば、山の高さや海の深さ)に滑らかな勾配と発散が必要な場合は、順次が使用されます。これらの配色の詳細については、こちらをご覧ください


1
個人的に明るい黄色がプロットの明確な色であるとは思わない
菱形十二面体

11

カラーパレットの選択専用のWebサイトがたくさんあります。客観的に最適な特定の色のセットがあることはわかりません。視聴者と作品のトーンに基づいて選択する必要があります。

開始するには、http://www.colourlovers.com/palettesまたはhttp://design-seeds.com/index.php/searchをチェックしてください。それらのいくつかは、異なるグループを表示するために2つに近い色を持っていますが、他のものはより広い範囲で補色を提供します。

Matplotlibでデフォルト以外の定義済みカラーセットをチェックアウトすることもできます


5

散布図用のcolorbrewerのDark2パレットが好きです。私たちは、ggobiブックでこれを使用し、www.ggobi.org/book。ただし、それ以外の場合、カラーパレットはデータプロットではなく地理的領域を対象としています。適切な色の選択は、ポイントベースのプロットでは依然として問題です。

Rパッケージcolorspacedichromatは便利です。colorspaceホイールの周りの色を選択できます。数時間/数日かけて微調整できます。dichromat色覚異常のチェックに役立ちます。

ggplot2 一般に良いデフォルトがありますが、必ずしも色覚異常ではありません。

赤から青への分岐スキームは、コンピューター上では適切に見えますが、うまく投影されません。


3

別の可能性は、a)LABで等距離、b)色覚異常を考慮に入れ、c)sRGB色空間の色域と最も一般的なCMYK空間の色域に収まる色のセットを見つけることです。

最後の要件は、色を選択する方法の必要性だと思います。画面上で色がきれいに見えても、CMYKプロセスで印刷すると混乱する場合、それは何の役にも立ちません。また、OPは「出版品質」を指定しているため、グラフは実際にCMYKで印刷されると想定しています。


3

これは私のお気に入りのスキームです。20(!!!!)の異なる色があり、すべて簡単に区別できます。ただし、色覚異常の人にとってはおそらく失敗するでしょう。

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

2

ラインをプロットするときは、緑と黄色に注意する必要がありますが、これらはプロジェクターではうまく表示されません。私は最終的に私のプロットのほとんどをプレゼンテーションで再利用するため、元の意図がスクリーンまたは紙での出版であっても、これらの色を避けています。

高コントラストを維持するために、黒、赤、青、マゼンタ、シアンが残り、本当に必要な場合はグレーを使用します。実際、これらのほとんどは明るい、原色または二次色です。審美的な観点からは最適ではないかもしれないことは知っていますが、私が提示しているものの明快さにもっと興味があります。一方で、限られたパレットから同じ色を一貫して再利用することは、美的には良いことです。

6本以上の線を使用している場合は、より多くのスペースを埋めて、色のブロックのプロットに向かっています。これらの種類のプロットでは、各ケースを個別に検討する必要があると思います。極端なものを目立たせたいですか、それともゼロクロッシングをしたいですか?データは周期的ですか(たとえば、0と2πは同じ色を使用する必要があります)?温度の青/赤などの標準に類似していますか?白はデータなしのNaNを表しますか、それともハイライトとして使用されますか?などなど


2

色覚異常のある視聴者向けに、CARTOColorsには、Paul Tolの人気のある配色にSafe基づいた定性的な色盲に優しいスキームがあります。このパレットは、簡単に区別できる12色で構成されています。

別の優れた定性的な色盲フレンドリーパレットは、彼らの記事「カラーユニバーサルデザイン(CUD):色盲の人々に優しいフィギュアやプレゼンテーションの作り方」で提案され岡部と伊藤のスキームです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.