pcolormeshのカラーマップにレベルを設定して等高線風に表示
コード
解説
モジュールのインポート
データの生成
xとyはnp.meshgridによりデータを生成した。x,yはそれぞれslice()でdx, dy刻みのデータを生成しているので、dx,dyを小さくすることで解像度を上げることができる。z は関数 f(x, y)で生成した。
x,yの値は境界の値で、zはその境界内部のデータになるため、zのデータ数を1つ削減する必要がある。
カラーマップの設定
レベルの設定
MaxNLocator(nbins=15).tick_values(z.min(), z.max())でz.min()からz.max()を15個にわけたときの目盛の配列を返す。
カラーマップの種類と正規化
plt.get_cmap(‘PuOr’)で紫からオレンジに変化するカラーマップが得られる。
BoundaryNorm(levels, ncolors=cmap.N, clip=True)で、cmapの色の数(cmap.N(=256))をlevelの配列に従って分割したカラーマップが作成される。
図の生成
上の図(pcolormesh)
pcolormeshでx, y, zを指定し、設定したカラーマップ(cmap)と正規化の設定(norm)を適用することで、等高線風の疑似カラーマップが得られる。
fig.colorbar(im, ax=ax0)でカラーバーの表示が可能。
下の図(contourf)
等高線プロットはx,y,zが同じサイズである必要があるので、x,yのデータを一つ削減し、+dy/2, +dx/2することで中点へと移動している。
zがランダムデータの場合
zがランダムなデータの場合、pcolormeshとcontourfでは、見た目が大きく異なる。離散的なデータに対して、安易にcontourfを使うと誤解が生じる可能性があると考えられる。
参考
matplotlib.colors.BoundaryNorm — Matplotlib 3.9.2 documentation
https://matplotlib.org/api/ticker_api.html
matplotlib.axes.Axes.pcolormesh — Matplotlib 3.9.2 documentation
matplotlib.pyplot.contourf — Matplotlib 3.9.2 documentation
コメント