今回は、Pythonで平面分布図を作成する際の色合いや、凡例の設定、また凡例の範囲外の色の設定について解説したいと思います。
1.平面分布図の色合いの設定
平面分布図には、色合いを設定するカラーマップというものが存在します。ここでは、そのカラーマップの種類と、その使い方について解説します。
1.色合い(カラーマップ)の種類
まずここでは、2次元の平面分布図を作る際に、その色合いを設定する方法について解説します。
matplotlibには、cmap(Colormaps)というカラーマップが用意されています。カラーマップとは、色合いのセットをあらかじめ用意したものです。
色合いには下のようなものがあります。
(個人的には、miscellaneousの「jet」がおすすめです。)
(matplotlib公式サイト参照:https://matplotlib.org/tutorials/colors/colormaps.html)
Sequencial (連続)
小さい値から大きいへ、連続的に変化するような分布を作成するのに適したカラーマップです。
Diverging (発散)
中心の値から、正または負の方向にどれくらい離れているかを表すのに適したカラーマップです。
Cyclic (周期)
色が周期的に変化するため、周期的性質を持つデータの図化に適したカラーマップです。
miscellaneous(雑多)
いろいろな種類の色合いが存在するカラーマップです。個人的には、青色から赤色に変化する「jet」が、小さい値と大きい値が分かりやすく、使いやすいと思います。
Qualitative (定性)
ばらばらの色合いのカラーマップなので、円グラフのような関連性の無いデータの図化に適したカラーマップです。
2.カラーマップの使い方
では、上で説明したカラーマップを実際に使用してみましょう!
今回は「jet」を使ってみようと思います。下のコードを実行してください。
import numpy as np import matplotlib.pyplot as plt img = np.arange(100).reshape(10,10) x = np.array([2,3,5,7,8,9,10,11,14,15]) y = np.array([1,3,6,7,9,10,12,15,16,18]) xx, yy = np.meshgrid(x, y) plt.contourf(xx, yy, img, cmap="jet") plt.show()
すると、下のような図ができたと思います。
基本的な2次元分布の作り方は、「Pythonで2次元の平面分布図を作成しよう」で解説していますので、今回は省略します。
カラーマップの指定方法は、contourfで図を書くときに「cmap=”カラーマップ名”」と書くことで指定できます!
ちなみに、カラーマップは、「_r」を付けることで色合いを反転させることができます。
import numpy as np import matplotlib.pyplot as plt img = np.arange(100).reshape(10,10) x = np.array([2,3,5,7,8,9,10,11,14,15]) y = np.array([1,3,6,7,9,10,12,15,16,18]) xx, yy = np.meshgrid(x, y) plt.contourf(xx, yy, img, cmap="jet_r") plt.show()
「jet_r」とすることで、先ほど作った図と色合いの反転した図を作成できました。
- カラーマップの指定方法は、contourfで図を書くときに「cmap=”カラーマップ名”」と書く
- カラーマップは、「_r」を付けることで色合いを反転させることができる
2.平面分布図の凡例の設定
次に、平面分布図を作成した際の凡例の設定方法について解説します。
まずは下のコードを実行してみてください。
import numpy as np import matplotlib.pyplot as plt img = np.arange(100).reshape(10,10) x = np.array([2,3,5,7,8,9,10,11,14,15]) y = np.array([1,3,6,7,9,10,12,15,16,18]) xx, yy = np.meshgrid(x, y) cont = plt.contourf(xx, yy, img, cmap="jet") plt.colorbar(cont) plt.show()
すると、下のように凡例を追加することができました。
ポイントは、「plt.contourf()」を「cont」という変数(オブジェクト)に入れ、「plt.colorbar(cont)」で凡例を描画するというところです。
ちなみに、凡例の幅を変えたい場合は
cont = plt.contourf(xx, yy, img, 20, cmap="jet")
のように、plt.contourf(X, Y, Z, 分割数, cmap=”カラーマップ”)と、分割数を設定すると凡例の幅を変えることができます。
実用的には、最大値、最小値、分割数を変数として設定し、下のように設定すると使いやすいです。
import numpy as np import matplotlib.pyplot as plt cb_min, cb_max = 0, 100 cb_div = 10 interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1) img = np.arange(100).reshape(10,10) x = np.array([2,3,5,7,8,9,10,11,14,15]) y = np.array([1,3,6,7,9,10,12,15,16,18]) xx, yy = np.meshgrid(x, y) cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet") CB = plt.colorbar(cont) plt.show()
ポイントは、下のコードで最初に変数として最大値、最小値、分割数を設定します(cb_min, cb_max,cb_div)。
cb_min, cb_max = 0, 100 cb_div = 10
そして、そのあとの下のコードで凡例の配列を作成することで、自由に凡例を設定することができます。
interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1)
上の「interval_of_cf」は、numpyのlinspaceを使い、最小値から最大値まで、分割数で等分割した「list」を作る、という処理を行っています。
つまり、実は「分割数」の部分は「配列(list)」に置き換えることで、直接凡例の数字を与えることができるのです!
- 「plt.contourf()」を「cont」という変数に入れ、「plt.colorbar(cont)」で凡例を描画する
- 凡例の幅を変えたい場合は、plt.contourf(X, Y, Z, 分割数, cmap=”カラーマップ”)と、分割数を設定する
- 「分割数」は、「list」に置き換えることで直接凡例を指定できる
3.平面分布図における凡例範囲外の色の設定
「2.平面分布図の凡例の設定」では、凡例の最大値と最小値、分割数を変数として設定することで、凡例の幅や範囲を自由に変える方法を解説しました。
ただし、実はこのままでは、設定した凡例の範囲外は空白になってしまします。
実際に見てみましょう。下のコードを実行してください。
import numpy as np import matplotlib.pyplot as plt cb_min, cb_max = 20, 80 cb_div = 10 interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1) img = np.arange(100).reshape(10,10) x = np.array([2,3,5,7,8,9,10,11,14,15]) y = np.array([1,3,6,7,9,10,12,15,16,18]) xx, yy = np.meshgrid(x, y) cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet") CB = plt.colorbar(cont) plt.show()
すると、上のように範囲外の部分が空白になってしましました。
そこで「contourf」でグラフを書く際に、「extend=”both”」と追記することで、範囲外を一番端の色で埋めることができます。
では、10行目を下のコードに置き換え、もう一度実行してください。
cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet", extend="both")
すると、下のように、範囲外もしっかりと色を付けることができました!
凡例の形が上下に尖った形になりましたね。
これで、凡例の範囲外まで図化することができました。
- 設定した凡例の範囲外は空白になってしまう
- 「contourf」でグラフを書く際に、「extend=”both”」と追記することで、範囲外を一番端の色で埋めることができる
4.まとめ
今回は、平面分布図を作成する際の色合いや、凡例の設定、また凡例の範囲外の色の設定について解説しました。
「matplotlib」での作図は、できることが多いため、逆にやりたいことを見つけるのに苦労したりします。
このサイトで皆さんの疑問が少しでも解決出来たら幸いです。
なお、このサイトでは初心者の方向けに「Python初心者入門講座」という講座を作成していますので、気になった方はそちらもご覧ください。
コメント