同じプロットに複数のシリーズを表示するために使用するのに最適な色のセットは何ですか?でデフォルトを使用しましたが、matplotlib
すべて明るい原色なので少し幼稚に見えます。
同じプロットに複数のシリーズを表示するために使用するのに最適な色のセットは何ですか?でデフォルトを使用しましたが、matplotlib
すべて明るい原色なので少し幼稚に見えます。
回答:
カラーパレットを選択するための一般的なリファレンスは、ColorBrewerでのCynthia Brewerの作業です。色は、コロプレスマップの知覚パターンに基づいて選択されましたが、ほとんどの同じアドバイスは、データパターンを区別するためにあらゆるタイプのプロットで色を使用する場合に適用されます。色が異なる行を区別するためだけのものである場合、定性的なパレットが適切です。
多くの場合、数本の線だけのラインプロットでは色は必要なく、異なるポイントシンボルやダッシュパターンで十分に効果的です。ラインプロットのより一般的な問題は、ラインが頻繁に重なる場合、使用するシンボルや色に関係なく、異なるパターンを区別することが困難になることです。Stephen Kosslynは、プロットに4行しかないという一般的な経験則を推奨しています。さらに線を一連の小さな複数のプロットに分割することを検討している場合。ここに推奨事項を示す例があります
色は不要で、ラベルは十分です。
他の回答では非常に優れたアドバイスですが、ここでは、学生に対する低レベルのアドバイスからいくつかの追加ポイントを示します。これは、当然のことながら、重要な質問を考えて考えるための単なるアドバイスです:グラフの目的は何ですか?これらのデータで何が理にかなっていますか?読者は誰ですか?グラフ内で色が期待することは何ですか?他の誰かのドグマに関係なく、グラフはうまく機能しますか?
さらに、色の重要性はグラフごとに大きく異なります。コロプレスまたはパッチマップの場合、実際には異なる領域が色付けされているか、少なくとも異なった陰影が付けられているという考えの場合、グラフの成功はそのカラースキームの成功と結びついています。他の種類のグラフの場合、色は不要な場合や迷惑になる場合があります。
あなたの色はすべて必要ですか?たとえば、さまざまな変数またはグループがグラフのさまざまな領域のテキストラベルによって明確に区別されている場合、別々の色もしばしば過剰になります。フルーツサラダまたはテクニカラードリームコートの効果に注意してください。たとえば、スライス上またはスライスごとにラベルが付けられた円グラフの場合、色は追加情報を伝えません。(円グラフがキーまたは凡例に依存している場合、間違った種類のグラフを試している可能性があります。)
多くの人がこれらの色を区別するのに苦労しているため、赤と緑のコントラストに頼らないでください。
レインボーシーケンス(ROYGBIVまたは赤、オレンジ、黄、緑、青、インディゴバイオレット)は、物理的な理由でアピールする場合がありますが、実際にはうまく機能しません。たとえば、通常黄色は弱い色ですが、オレンジと緑は通常強いので、印象は単調なシーケンスではありません。
強い色の大きなパッチの結果となるカラースキームを避けてください。
順序付けられたシーケンスが必要な場合、濃い赤から濃い青までのシーケンスが適切に機能します。白が(いつものように)背景色である場合、それを使用せず、淡い赤から淡い青にスキップします。[2018年3月1日追加]下線を引くにはあまりにも明白かもしれません。赤は多くの人にとって否定的および/または危険を意味します。下線を引くのはあまりにも明白ですが、私はそれを何とかします。赤と青には多くの国で政治的な意味合いがあります。
青とオレンジは相性がいい(ここでHastie、Tibshirani、Friedmanに感謝の意を表する:http ://web.stanford.edu/~hastie/local.ftp/Springer/OLD/ESLII_print4.pdf )[2018年3月1日追加]視覚化の入門書では、オレンジ、青、グレーを基本パレットとして使用するようになりました。オレンジおよび/または青を気にかけ、グレーを背景に使用します。
淡いグレーから濃いグレーまでのグレースケールはうまく機能し、色の再現が問題にならない場合に適しています。(これはグレースケールで公平なbashを作成できないお粗末なプリンターです。)(好みに応じてグレー。海を越えて好みが変わるようです。色と色のように。)
[2016年8月5日追加]かなり一般的な原則は、多くの場合、2色が多くの場合よりもはるかに優れていることです。2つのグループの両方に関心がある場合は、同様に強い色(赤またはオレンジと青など)を選択します。1つのグループが複数の中で特に関心がある場合は、青またはオレンジにし、他のグループを灰色にします。原則として7つのグループに7色を使用することで情報が得られますが、他の複数のグループとの競争があるときに一度に1つの色に集中することさえ困難です。複数のグループの場合、マルチカラープロットよりも小さな倍数の方が適しています。
実際、近年、これに関する多くの研究が行われています。
大きなポイントは「セマンティック共鳴」です。これは基本的に「それらが表すものに対応する色」を意味します。例えば、少なくとも米国の聴衆にとっては、お金の時系列は緑色にすべきです。これにより、理解度が明らかに向上します。このテーマに関する非常に興味深い論文の1つは、Lin他(2013)によるものです:http : //vis.stanford.edu/papers/semantically-resonant-colors
http://tools.medialab.sciences-po.fr/iwanthue/には非常に優れたiWantHueカラージェネレーターもあり、他のタブには多くの情報があります。
リン、シャロン、ジュリー・フォーチュナ、チンメイ・クルカルニ、モーリーン・ストーン、ジェフリー・ヒーア。(2013)。データ視覚化のための意味的に共鳴する色の選択。コンピューターグラフィックスフォーラム(Proc。EuroVis)、2013
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サイトで彼の一連の投稿を参照してください。
上colorbrewer2.orgあなたは見つけることができる定性的な、シーケンシャルおよび発散カラースキームを。定性は、連続する色の違いを最大化します。これが私がgnuplotで使用しているものです。このサイトの美しさは、色の16進コードを簡単にコピーできるため、簡単にインポートできることです。例として、次の8色セットを使用しています。
#e41a1c
#377eb8
#4daf4a
#984ea3
#ff7f00
#ffff33
#a65628
#f781bf
それはかなり快適で、明確な結果を生み出します。
補足として、中央値との違いを強調する必要がある場合(たとえば、山の高さや海の深さ)に滑らかな勾配と発散が必要な場合は、順次が使用されます。これらの配色の詳細については、こちらをご覧ください。
カラーパレットの選択専用のWebサイトがたくさんあります。客観的に最適な特定の色のセットがあることはわかりません。視聴者と作品のトーンに基づいて選択する必要があります。
開始するには、http://www.colourlovers.com/palettesまたはhttp://design-seeds.com/index.php/searchをチェックしてください。それらのいくつかは、異なるグループを表示するために2つに近い色を持っていますが、他のものはより広い範囲で補色を提供します。
Matplotlibでデフォルト以外の定義済みカラーセットをチェックアウトすることもできます。
散布図用のcolorbrewerのDark2パレットが好きです。私たちは、ggobiブックでこれを使用し、www.ggobi.org/book。ただし、それ以外の場合、カラーパレットはデータプロットではなく地理的領域を対象としています。適切な色の選択は、ポイントベースのプロットでは依然として問題です。
Rパッケージcolorspace
とdichromat
は便利です。colorspace
ホイールの周りの色を選択できます。数時間/数日かけて微調整できます。dichromat
色覚異常のチェックに役立ちます。
ggplot2
一般に良いデフォルトがありますが、必ずしも色覚異常ではありません。
赤から青への分岐スキームは、コンピューター上では適切に見えますが、うまく投影されません。
ラインをプロットするときは、緑と黄色に注意する必要がありますが、これらはプロジェクターではうまく表示されません。私は最終的に私のプロットのほとんどをプレゼンテーションで再利用するため、元の意図がスクリーンまたは紙での出版であっても、これらの色を避けています。
高コントラストを維持するために、黒、赤、青、マゼンタ、シアンが残り、本当に必要な場合はグレーを使用します。実際、これらのほとんどは明るい、原色または二次色です。審美的な観点からは最適ではないかもしれないことは知っていますが、私が提示しているものの明快さにもっと興味があります。一方で、限られたパレットから同じ色を一貫して再利用することは、美的には良いことです。
6本以上の線を使用している場合は、より多くのスペースを埋めて、色のブロックのプロットに向かっています。これらの種類のプロットでは、各ケースを個別に検討する必要があると思います。極端なものを目立たせたいですか、それともゼロクロッシングをしたいですか?データは周期的ですか(たとえば、0と2πは同じ色を使用する必要があります)?温度の青/赤などの標準に類似していますか?白はデータなしのNaNを表しますか、それともハイライトとして使用されますか?などなど
色覚異常のある視聴者向けに、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