[matplotlib] 16. 疑似カラーマップ

matplotlib

はじめに

pcolor, pcolormesh, pcolorfast, imshowなどを用いて疑似カラーマップを作成する方法について説明する。

コード

解説

モジュールのインポート

データの生成

xとyはnp.meshgridによりデータを生成した。x,yはそれぞれnp.arange()でdx, dy刻みのデータを生成しているので、dx,dyを小さくすることで解像度を上げることができる。z は関数 f(x, y)で生成した。

x,yの値は境界の値で、zはその境界内部のデータになるため、zのデータ数を1つ削減する必要がある。

z_min, z_maxはカラーマップの表示範囲を設定する必要があるので -np.abs(z).max()と np.abs(z).max()でそれぞれ求めている。

図の生成

plt.subplots(2, 2,figsize=(8,6))で2行2列の図を作成。

左上の図(pcolor)

c = ax.pcolor(x, y, z, cmap=’GnBu’, vmin=z_min, vmax=z_max)でカラーマップを表示することができる。cmapは色の設定で、vmin,vmaxでカラーマップの表示範囲を設定している。

fig.colorbar(c, ax=ax)でカラーバーを表示できる。

右上の図(pcolormesh)

pcolormeshはpcolorよりも描写が速いカラーマップである。pcolor同様、c = ax.pcolormesh(x, y, z, cmap=’GnBu’, vmin=z_min, vmax=z_max)とすることでカラーマップを表示できる。

左下の図(imshow)

imshow()でもカラーマップを表示することができる。imshowをpcolorなどと同じように表示したい場合には、extentをx,yデータに合わせることと、originをlowerにすることが必要である。

右下の図(pcolorfast)

pcolorfastはpcolormeshよりも高速なカラーマップ表示方法であり、pcolor, pcolormeshと同様のカラーマップを得ることができる。

境界線の表示

pcolormeshはpcolorよりも速いことが売りだが、境界線の表示では不具合がある。
pcolorfastは境界線の表示ができない。

描写速度の比較

最も速いのがimshowでその後に、pcolormesh, pcolor, pcolorfastの順となっている。これは低解像度であるためだと考えられる。

本来は、pcolorfast, pcolormesh, pcolor, imshowの順であると思い、解像度を上げて描写した結果、下のように、pcolorfastのほうが、pcolormeshよりも速くなった。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

matplotlib.pyplot.pcolor — Matplotlib 3.9.3 documentation

コメント