1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カラーマップ拡張ライブラリ palettable の紹介

Last updated at Posted at 2020-07-06

カラーマップ拡張ライブラリ palettable

matplotlibで描画する際,「もっといろんなカラーマップ(またはカラーサイクル)があれば良いのになぁ」なんて思ったことはありませんか?
ここでは,そんなお悩みを解決する便利な拡張ライブラリを紹介します。
それが, palettable です。なんとそこには1599個ものカラーマップが用意されています。
matplotlibの標準カラーマップは79個なので,なんと約20倍!!。

なお,matplotlibのカラーマップは様々な方法で編集・自作することができるため,実のところ拡張ライブラリに頼る必要は無いとも言えます。palettableはそうやって作った沢山のカラーマップがアーカイブされているに過ぎません。

ですので,この記事は**「もっと他のカラーマップを使いたいけど,いろいろ調べて自分で作るのはめんどくさい。簡単に使える拡張ライブラリがあるならそれを使っちゃおう!」**という方向けです。

palettableのカラーマップ一覧は,**こちら**の記事にまとめています(あまりに多いので切り分けました)。
本家HP(英語)はこちら

インストール

pipコマンドで簡単にインストール可能です。

pip install palettable

palettableの使い方(カラーサイクル編)

matplotlibは,プロットを描画するときにデフォルトのカラーサイクルに従います。
例えばこんな感じで,デフォルトでは10個で一周し,11個目で元の色に戻ります。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100) 
fig, ax = plt.subplots()

for i in range(11):
    y = np.sin(x)+i
    ax.plot(x, y)
plt.show()

fig1.png
この時使われたカラーサイクルは,matplotlibにおけるデフォルトのtab10でした:
tab10.png
それではこれを,palettableのカラーサイクルに変えてみます。今回はpalettable.scientific.sequential.Tokyo_10を使ってみます。palettableのカラーサイクルはpalettable.scientific.sequential.Tokyo_10.mpl_colors
取得できます(末尾に.mpl_colorsが付いただけ)。
Tokyo_10.png

カラーサイクルを変えるには, ax.set_prop_cycle()を使います:

import numpy as np
import matplotlib.pyplot as plt
import palettable # 追加

x = np.linspace(0, 2*np.pi, 100) 
fig, ax = plt.subplots()
# 次の行を追加
ax.set_prop_cycle('color', palettable.scientific.sequential.Tokyo_10.mpl_colors)

for i in range(11):
    y = np.sin(x)+i
    ax.plot(x, y)
plt.show()

結果はこうなります。指定したカラーサイクルになっていて,10個で一周しています。
fig2.png

ここで,ax.set_prop_cycle()に渡したpalettable.scientific.sequential.Tokyo_10.mpl_colorsは,単なるPythonのlistオブジェクトに過ぎません。
中身はこんな感じ。規格化された10行3列のRGB配列ですね:

>>> palettable.scientific.sequential.Tokyo_10.mpl_colors                                          
[(0.10196078431372549, 0.054901960784313725, 0.20392156862745098),
 (0.27058823529411763, 0.12549019607843137, 0.2980392156862745),
 (0.43137254901960786, 0.24313725490196078, 0.403921568627451),
 (0.5215686274509804, 0.3686274509803922, 0.47058823529411764),
 (0.5529411764705883, 0.4745098039215686, 0.5098039215686274),
 (0.5725490196078431, 0.5803921568627451, 0.5372549019607843),
 (0.592156862745098, 0.6823529411764706, 0.5686274509803921),
 (0.6549019607843137, 0.807843137254902, 0.615686274509804),
 (0.8352941176470589, 0.9490196078431372, 0.7372549019607844),
 (0.996078431372549, 0.996078431372549, 0.8470588235294118)]

また,何個で一周するかは,palettable.scientific.sequential.Tokyo_10の最後の数字で決まっていて,指定できる数字はカラーコードによって異なります。例えばpalettable.scientific.sequential.Tokyo_では,から20まで指定できます。
例えば11個で一周するようにpalettable.scientific.sequential.Tokyo_11を使ってみると,次のようになります:
Tokyo_11.png
fig3.png
ちょうど11個で一周しました。

palettableの使い方(カラーマップ編)

いよいよカラーマップです。実は,こっちの方が簡単に使えます。
まずは簡単なサンプルコードで2次元プロットをしてみます。

import numpy as np
import matplotlib.pyplot as plt

xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)

fig, ax = plt.subplots()
mp = ax.imshow(zz, cmap="Blues") # この行でcolormapを指定する
fig.colorbar(mp)

fig4.png
では,このカラーマップを先程と同じpalettable.scientific.sequential.Tokyo_10に変えてみます。
palettableのカラーマップはpalettable.scientific.sequential.Tokyo_10.mpl_colormap
取得できます(末尾に.mpl_colormapが付いただけ)。

import numpy as np
import matplotlib.pyplot as plt
import palettable # 追加

xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)

fig, ax = plt.subplots()
# 次の行のcmapオプションを変更
mp = ax.imshow(zz, cmap=palettable.scientific.sequential.Tokyo_10.mpl_colormap)
fig.colorbar(mp)

fig5.png
随分と雰囲気が違って見えますね。

なお,cmapオプションに与えたpalettable.scientific.sequential.Tokyo_10.mpl_colormapの中身は,matplotlib.colorsLinearSegmentedColormapオブジェクトになっています:

>>> palettable.scientific.sequential.Tokyo_10.mpl_colormap
<matplotlib.colors.LinearSegmentedColormap at 0x7fb05793f0d0>

また,palettableのカラーマップを使う場合,カラーサイクルのサイクル数を示していた最後の数字(_10の部分)と同様に,色の分解能を表します。試しに_3_20を比べてみます:
fig6.png
見た目が結構変わりますね。表現したい変動幅に合わせて色の分解能を変化させると良いでしょう。

さいごに

palettableカラーマップ一覧は,**こちら**の記事にまとめました。
最後まで読んでいただきありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?