pcolor, pcolorfast, pcolormesh

2次元データの描画で、それぞれの格子点の値に対応した色塗りをするのが、これらの関数だ。contourf, contourは空間補間を行うが、pcolorシリーズは行わない。そのためpcolorシリーズは、格子での値自体を知りたい場合、そして、データに欠損があって空間補間を行うと欠損と隣接している地点の情報が分からないことを防ぎたいという場合に、使うとよい。pcolorはどうも描画が遅いようで、pcolorfast, pcolormeshは速いようだ。またpcolorとpcolormeshは図は一緒でも返されるobjectが違うようだが、そこまで使いこなしていないのでその優劣は不明だ。pcolorfastかpcolormeshを使っておけばよいのではないかと思う。

なお、pcolor, pcolormeshはplt.pcolorのように使うのだが、pcolorfastはaxisに対してaxis.pcolorfastのように使うようだ。

pcolorとcontourfを使う上での重要な違いは,contourfではデータの中心座標をデータと同じ数与えるのに対して,pcolorではデータの左下の座標をデータよりもx-方向,y-方向とも1つづつ多く与えることだ.この点については,pcolorの本家説明の図が分かりやすい.

下のサンプルで座標の与え方の違いと,欠損がどのように図に反映されるかを理解することができるだろう.

from matplotlib import pyplot as plt

import numpy as np

nx=4

ny=3

# z=np.random.randn(ny,nx)

z=np.ones([ny,nx])

for y in range(ny):

for x in range(nx):

z[y,x]=x+y

z[:,1:2]=np.nan

z[ny-1,nx-1]=np.nan

plt.ion()

x_c=np.arange(1,nx+1)

y_c=np.arange(1,ny+1)

x_sw=np.arange(0.5,nx+1)

y_sw=np.arange(0.5,ny+1)

plt.subplot(1,2,1)

plt.contourf(x_c,y_c,z)

plt.axis([0.5,nx+0.5,0.5,ny+0.5])

plt.title('contourf')

plt.subplot(1,2,2)

plt.pcolor(x_sw,y_sw,z)

plt.axis([0.5,nx+0.5,0.5,ny+0.5])

plt.title('pcolor')