Python

Matplotlib での色指定のTips ~デフォルト色の指定~

この記事でやること

  • Matplotlib のグラフ描画で色が鮮やかになりすぎないデフォルト色を指定するための Tips を紹介します。

 

色指定しない方法

Matplotlib は、Python でさまざまなグラフを描画するためのライブラリで、データサイエンティストには必須のツールです。

Matplotlib で描画されるグラフの色は、描画用の関数が呼び出されるたびに自動で割り当てられます。

test_results = {
    '国語': 68,
    '算数': 88,
    '理科': 90,
    '社会': 73,
}

例えば上記のような教科ごとのテストの点数を色分けして棒グラフにするコードは以下の通りです。

import matplotlib.pyplot as plt
import japanize_matplotlib

for subject, score in test_results.items():
    # 科目ごとに plt.bar() を呼び出すとそのたびに色が変わる
    plt.bar(subject, score)
plt.title('test results')
plt.show()

これにより以下の棒グラフが得られます。

出力結果

 

色指定する方法

色指定をしない場合、上記のように呼び出される色は「青→オレンジ→緑→赤→…」といった固定の順序になります。

ただ、私の個人的なイメージとして国語は赤、算数は青、理科は緑、社会はオレンジ、といったものがあります。この色彩感覚が皆さんに共感してもらえるかどうかは置いておいて、呼び出される色の順序を指定したい場合があります。

Matplotlib では、グラフを描画する関数で color の引数を使うことで色指定ができます。

mport matplotlib.pyplot as plt
import japanize_matplotlib

# 色の順序情報
color = ['red', 'blue', 'green', 'orange'] 

for c, (subject, score) in zip(color, test_results.items()):
    plt.bar(subject, score, color=c)
plt.title('test results')
plt.show()
出力結果

しかしこのグラフにおける違和感、お気づきでしょうか。

実は先程のグラフと微妙に色合いが異なっていて、どの色も鮮やかすぎるように見えます。

color で指定できる ‘red’ や ‘blue’ などの色はそれぞれ含まれる色の成分が最大な「原色」となっていますが、指定しないデフォルトの色たちはそれよりも柔らかく目に痛くない色となっているのです。

 

デフォルト色を指定する方法

では、デフォルトの色を好きな順番で呼び出したい時にはどうすればいいのでしょうか。各色をカラーコードで指定すればできますが、少し面倒です。

答えは以下の公式ドキュメントにありました。

Specifying Colors — Matplotlib 3.5.1 documentation

簡潔に言うと、色名のテキストを ‘tab:〇〇’ にするだけです。

import matplotlib.pyplot as plt
import japanize_matplotlib

# デフォルト色の指定
color = ['tab:red', 'tab:blue', 'tab:green', 'tab:orange']

for c, (subject, score) in zip(color, test_results.items()):
    plt.bar(subject, score, color=c)
plt.title('test results')
plt.show()

これにより欲しかった色順序での目に痛くないグラフを得ることができました。

出力結果
kai
アナリティクス&デベロップメント所属。 平日に大きなデータを扱い、週末は大きな楽器を扱う