【matplotlib】matplotlibの標準の色を手動で設定する方法[Python]

  • URLをコピーしました!
目次

matplotlib

前回、matplotlibで二つのグラフの間を塗りつぶす「fill_between」の解説をしました。

今回はmatplotlibのグラフで自動で使われる標準的な色を手動で設定する方法を解説していきます。

matplotlibでは複数のデータがある場合、色を自動で設定し、出力してくれます。

例えばこんな感じ。

import matplotlib.pyplot as plt

x1 = range(10)

y1_1 = [1 for _ in x1]
y1_2 = [2 for _ in x1]
y1_3 = [3 for _ in x1]
y1_4 = [4 for _ in x1]
y1_5 = [5 for _ in x1]
y1_6 = [6 for _ in x1]
y1_7 = [7 for _ in x1]
y1_8 = [8 for _ in x1]
y1_9 = [9 for _ in x1]
y1_10 = [10 for _ in x1]

fig = plt.figure()
plt.clf()

plt.plot(x1, y1_1, linewidth=5)
plt.plot(x1, y1_2, linewidth=5)
plt.plot(x1, y1_3, linewidth=5)
plt.plot(x1, y1_4, linewidth=5)
plt.plot(x1, y1_5, linewidth=5)
plt.plot(x1, y1_6, linewidth=5)
plt.plot(x1, y1_7, linewidth=5)
plt.plot(x1, y1_8, linewidth=5)
plt.plot(x1, y1_9, linewidth=5)
plt.plot(x1, y1_10, linewidth=5)

plt.show()

実行結果

このように10個のデータまでなら、色被りせず自動で色を設定してくれます。

11個以上になるとこの色のパターンの繰り返しになります。

ただグラフの作り方によっては色を手動で設定する必要があることがあります。

その際、大体の感覚で色を指定してみても、同じ色にならなくて困ったというのが今回の話の発端です。

例えばこんな感じ。

import matplotlib.pyplot as plt

x1 = range(10)

y1_1 = [1 for _ in x1]
y1_2 = [2 for _ in x1]
y1_3 = [3 for _ in x1]
y1_4 = [4 for _ in x1]
y1_5 = [5 for _ in x1]
y1_6 = [6 for _ in x1]
y1_7 = [7 for _ in x1]
y1_8 = [8 for _ in x1]
y1_9 = [9 for _ in x1]
y1_10 = [10 for _ in x1]

fig = plt.figure()
plt.clf()

plt.plot(x1, y1_1, linewidth=5)
plt.plot(x1, y1_2, linewidth=5)
plt.plot(x1, y1_3, linewidth=5)
plt.plot(x1, y1_4, linewidth=5)
plt.plot(x1, y1_5, linewidth=5)
plt.plot(x1, y1_6, linewidth=5)
plt.plot(x1, y1_7, linewidth=5)
plt.plot(x1, y1_8, linewidth=5)
plt.plot(x1, y1_9, linewidth=5)
plt.plot(x1, y1_10, linewidth=5)

x2 = range(11,20)

y2_1 = [1 for _ in x2]
y2_2 = [2 for _ in x2]
y2_3 = [3 for _ in x2]
y2_4 = [4 for _ in x2]
y2_5 = [5 for _ in x2]
y2_6 = [6 for _ in x2]
y2_7 = [7 for _ in x2]
y2_8 = [8 for _ in x2]
y2_9 = [9 for _ in x2]
y2_10 = [10 for _ in x2]

plt.plot(x2, y2_1, linewidth=5, color='blue')
plt.plot(x2, y2_2, linewidth=5, color='orange')
plt.plot(x2, y2_3, linewidth=5, color='green')
plt.plot(x2, y2_4, linewidth=5, color='red')
plt.plot(x2, y2_5, linewidth=5, color='purple')
plt.plot(x2, y2_6, linewidth=5, color='brown')
plt.plot(x2, y2_7, linewidth=5, color='magenta')
plt.plot(x2, y2_8, linewidth=5, color='gray')
plt.plot(x2, y2_9, linewidth=5, color='yellow')
plt.plot(x2, y2_10, linewidth=5, color='cyan')

plt.show()

実行結果

左側が自動で出力した色、右側は色を名前で指定して出力した色です。

自動で出力した色の方が全体的に落ち着いた色となっているのが分かると思います。

これを出力するにはどうしたらいいかというわけです。

名前で指定する方法

まずは名前で指定する方法です。

名前で指定する場合、「tab:色名」という形で指定するとほとんどの色が自動で出力した色と同じ色になります。

ただ一つ、黄色に関しては「tab:olive」という馴染みにない名前になっています。

import matplotlib.pyplot as plt

x1 = range(10)

y1_1 = [1 for _ in x1]
y1_2 = [2 for _ in x1]
y1_3 = [3 for _ in x1]
y1_4 = [4 for _ in x1]
y1_5 = [5 for _ in x1]
y1_6 = [6 for _ in x1]
y1_7 = [7 for _ in x1]
y1_8 = [8 for _ in x1]
y1_9 = [9 for _ in x1]
y1_10 = [10 for _ in x1]

fig = plt.figure()
plt.clf()

plt.plot(x1, y1_1, linewidth=5)
plt.plot(x1, y1_2, linewidth=5)
plt.plot(x1, y1_3, linewidth=5)
plt.plot(x1, y1_4, linewidth=5)
plt.plot(x1, y1_5, linewidth=5)
plt.plot(x1, y1_6, linewidth=5)
plt.plot(x1, y1_7, linewidth=5)
plt.plot(x1, y1_8, linewidth=5)
plt.plot(x1, y1_9, linewidth=5)
plt.plot(x1, y1_10, linewidth=5)

x2 = range(11,20)

y2_1 = [1 for _ in x2]
y2_2 = [2 for _ in x2]
y2_3 = [3 for _ in x2]
y2_4 = [4 for _ in x2]
y2_5 = [5 for _ in x2]
y2_6 = [6 for _ in x2]
y2_7 = [7 for _ in x2]
y2_8 = [8 for _ in x2]
y2_9 = [9 for _ in x2]
y2_10 = [10 for _ in x2]

plt.plot(x2, y2_1, linewidth=5, color='tab:blue')
plt.plot(x2, y2_2, linewidth=5, color='tab:orange')
plt.plot(x2, y2_3, linewidth=5, color='tab:green')
plt.plot(x2, y2_4, linewidth=5, color='tab:red')
plt.plot(x2, y2_5, linewidth=5, color='tab:purple')
plt.plot(x2, y2_6, linewidth=5, color='tab:brown')
plt.plot(x2, y2_7, linewidth=5, color='tab:pink')
plt.plot(x2, y2_8, linewidth=5, color='tab:gray')
plt.plot(x2, y2_9, linewidth=5, color='tab:olive')
plt.plot(x2, y2_10, linewidth=5, color='tab:cyan')

plt.show()

実行結果

カラーコードで指定する方法

次に「#ffffff」のようなカラーコードで指定する方法です。

後で一覧をまとめますが、とりあえずプログラムはこんな感じ。

import matplotlib.pyplot as plt

x1 = range(10)

y1_1 = [1 for _ in x1]
y1_2 = [2 for _ in x1]
y1_3 = [3 for _ in x1]
y1_4 = [4 for _ in x1]
y1_5 = [5 for _ in x1]
y1_6 = [6 for _ in x1]
y1_7 = [7 for _ in x1]
y1_8 = [8 for _ in x1]
y1_9 = [9 for _ in x1]
y1_10 = [10 for _ in x1]

fig = plt.figure()
plt.clf()

plt.plot(x1, y1_1, linewidth=5)
plt.plot(x1, y1_2, linewidth=5)
plt.plot(x1, y1_3, linewidth=5)
plt.plot(x1, y1_4, linewidth=5)
plt.plot(x1, y1_5, linewidth=5)
plt.plot(x1, y1_6, linewidth=5)
plt.plot(x1, y1_7, linewidth=5)
plt.plot(x1, y1_8, linewidth=5)
plt.plot(x1, y1_9, linewidth=5)
plt.plot(x1, y1_10, linewidth=5)

x2 = range(11,20)

y2_1 = [1 for _ in x2]
y2_2 = [2 for _ in x2]
y2_3 = [3 for _ in x2]
y2_4 = [4 for _ in x2]
y2_5 = [5 for _ in x2]
y2_6 = [6 for _ in x2]
y2_7 = [7 for _ in x2]
y2_8 = [8 for _ in x2]
y2_9 = [9 for _ in x2]
y2_10 = [10 for _ in x2]

plt.plot(x2, y2_1, linewidth=5, color='#1f77b4')
plt.plot(x2, y2_2, linewidth=5, color='#ff7f0e')
plt.plot(x2, y2_3, linewidth=5, color='#2ca02c')
plt.plot(x2, y2_4, linewidth=5, color='#d62728')
plt.plot(x2, y2_5, linewidth=5, color='#9467bd')
plt.plot(x2, y2_6, linewidth=5, color='#8c564b')
plt.plot(x2, y2_7, linewidth=5, color='#e377c2')
plt.plot(x2, y2_8, linewidth=5, color='#7f7f7f')
plt.plot(x2, y2_9, linewidth=5, color='#bcbd22')
plt.plot(x2, y2_10, linewidth=5, color='#17becf')

plt.show()

実行結果

まとめ

一覧にしてみるとこんな感じです。

インデックス色名カラーコード
0tab:blue#1f77b4
1tab:orange#ff7f0e
2tab:green#2ca02c
3tab:red#d62728
4tab:purple#9467bd
5tab:brown#8c564b
6tab:pink#e377c2
7tab:gray#7f7f7f
8tab:olive#bcbd22
9tab:cyan#17becf

これでmatplotlibの標準色を手動で設定できるようになりました。

次回はカラーマップを使って複数のグラフの色を自動で設定する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次