【python】matplotlibでグラフに色を指定する方法【カラーマップ】

Eye catch image for matplotlib color artcle matplotlib

matplotlibで作成したグラフに色を設定する方法を紹介します。

  • matplotlibでのグラフの作成方法についてはこちらの記事を参照ください。

グラフの色を変更する:ax.plot(color='')

名称で色を指定する

plotメソッドで作成するグラフの色を指定するには、引数colorに表示したい色を指定します。
実際に設定した結果を見てみます。左が色指定無し、右が色指定有りのグラフです。

import numpy as np
import matplotlib.pyplot as plt

# データ
tt = np.linspace(0,1,100)*2*np.pi
xx = np.sin(tt)

# グラフ表示
fig, ax = plt.subplots(1,2,figsize=(10,4))
ax[0].plot(tt, xx, label='default') # グラフ
ax[1].plot(tt, xx, label='forestgreen', color='forestgreen') # 色を設定したグラフ

# 凡例表示
ax[0].legend() 
ax[1].legend() 

plt.show()

color引数で指定できる色の一覧

color引数で指定できる色の一覧は公式リファレンスから確認できます。

  • Base Colorsの8種(青, 緑, 赤, シアン, マゼンタ, 黄, 黒, 白)は使いやすいよう、アルファベット1文字で指定できる
  • Tableau Paletteでは分析ツールTableauで使われている色が指定できる
  • CSS Colorsでは細かく色を設定できる。

plotのcolor引数にここから選んだ名前を指定することで、所望の色でグラフを表示できます。

import numpy as np
import matplotlib.pyplot as plt

# データ
tt = np.linspace(0,1,100)*2*np.pi
xx = np.sin(tt)
clrs = ['c', 'tab:orange', 'forestgreen'] # 表示する色(シアン、tableau orange, forestgreen)

# グラフ表示
fig, ax = plt.subplots(1,3,figsize=(16,4))
for i in range(len(clrs)):
    ax[i].plot(tt, xx, label=clrs[i], color=clrs[i]) # グラフ
    ax[i].legend() # 凡例

plt.show()

RGB, RGBA形式で色を指定する

color引数にはRGBもしくはRGBA形式で色を指定することができます。
RGB形式で指定する場合は、赤、緑、青の強度を0〜1の範囲のタプル形式で指定します。
RGBA形式で指定する場合は、透明度A(=alpha)を同じく0〜1の範囲で後ろに追加します。

# RGB形式で赤を指定
clr_rgb = (1,0,0)

# RGBA形式で指定(alpha=0.5)
clr_rgba = (1,0,0,0.5)

RGBA形式で指定することで透明度alphaを調整してグラフを作成できます。

# RGB, RGBA形式で指定
tt = np.linspace(0,1,100)*2*np.pi
xx = np.sin(tt)
clrs_rgb = [(1,0,0), (0,1,0),(0,0,1)] 
clrs_rgba = [(1,0,0,0.2), (0,1,0,0.5),(0,0,1,0.7)] 

# グラフ表示
fig, ax = plt.subplots(1,3,figsize=(16,4))
for i in range(len(clrs)):
    ax[i].plot(tt, xx, label='RGB='+str(clrs_rgb[i]), color=clrs_rgb[i]) # グラフ
    ax[i].plot(tt, xx*1.5, label='RGBA='+str(clrs_rgba[i]), color=clrs_rgba[i]) # グラフ    ax[i].legend() # 凡例
    ax[i].legend() # 凡例

カラーコードで色を指定する

RGB形式、RGBA形式は16進数のカラーコードで指定することもできます。
この場合は、#から始まる文字列として、R,G,B,Aの値を0~255までの16進数で指定します。

# 16進数のRGB形式で赤を指定
clrs_rgb = ['#ff0000'] 
# 16進数のRGBA形式で赤を指定(alpha=0.5)
clrs_rgba = ['#ff000080'] 

ここで紹介した以外の指定方法についてはこちらのリファレンスを参照ください。

見栄えの良いカラーセットを使用する:カラーマップ

matplotlibには色合わせの良い組み合わせを、カラーマップとして使用できます。カラーマップを使用すればこのようなグラデーションも表現できます。

カラーマップには大きく4つの分類があり、

  • Sequential: 色の明るさや、色相が段階的に変化するカラーマップで、順番を表現するケースに適しています。
  • Diverging: 明度や彩度が真ん中で切り替わるカラーマップ。中心に重要な値がある場合に適しています。例えば、地形データやゼロ付近で値が逸れるデータなど。
  • Cyclic: 明度が両端で合うようなカラーマップ。角度や風向きといった、端点で値が一周するようなケースに適しています。
  • Qualitative: 様々な色を寄せ集めたカラーマップ。順序や関連がない情報を表現するのに適しています。

の4つの分類があります。

こちらのカラーマップはリファレンスからの抜粋ですので、全てを確認したい方はこちらのリファレンスを参照ください。

カラーマップを用いた色の指定方法

カラーマップを用いて色を指定するには、plt.get_cmap("利用するカラーマップ")とします。
得られたカラーマップはnotebookで出力すると、中身を確認できます。

# カラーマップを取得
cmap = plt.get_cmap("Blues")
cmap

カラーマップが何段階に分割されているかは、N属性で確認できます。Qualitative カラーマップ以外は大体が256段階です。
そして、カラーマップの引数に0〜1の小数もしくは、0〜(段階数−1)の整数で指定すると、RGBA形式で指定の色が取得できます。

cmap = plt.get_cmap("Blues") # カラーマップ"Blues"を取得
cmap.N # 256段階

# カラーマップ"Blues"の100番目のRGBA形式
cmap(100) # (0.592156862745098, 0.7770857362552864, 0.8764321414840446, 1.0)

グラデーションするグラフの作成

このカラーマップによる色の取得ができれば、章の頭に表示したグラデーションのグラフが再現できます。

# 表示する波形
tt = np.linspace(0,1,100)*np.pi
xx = np.sin(tt)

# カラーマップの指定
cmap = plt.get_cmap('Blues')
num = 20 # グラデーションの数

# グラフ表示
fig,ax = plt.subplots()
for i in range(num):
    ind = i / num
    ax.plot(tt, ind*xx, color=cmap(ind)) # indの代わりに、int(ind*cmap.N)でも同様

おわりに

matplotlibで作成したグラフの色を指定する方法と、見栄えの良いカラーマップを取得する方法を紹介しました。
既にお気づきかもしれませんが、カラーマップではRGBA形式のタプルで色を取得するため、matplotlib以外にも、例えばopencvで図形を描画する際の色指定にも用いることができます。
matplotlibを用いたグラフ作成については、過去にも記事を書いておりますので気になる方は、こちらのリンクからアクセスしてください。

コメント

タイトルとURLをコピーしました