Misakichi’s ログblog

好きなものを紹介したり備忘録のため

python-matplotlib で二次元マッピング

matplotlibでは、パッケージpylabのmeshgrid関数を利用して二次元マッピング像を生成できる。
meshgrid関数は、1次元データのx,yリストから2次元平面リストを生成する関数で、
(x,y)=(10.0,20.2)のようなxy座標を大量に作り出す。
それぞれをZ=f(x,y)に代入して、二次元マッピングを行うという仕組みである。
meshgrid関数については、たとえば以下のブログで丁寧に解説されている。
d.hatena.ne.jp

具体例

以下のようなコードを作ると

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#used packages
import numpy as np
import matplotlib.pyplot as plt
import pylab

x = np.arange(0, 10, 0.1)
y = np.arange(10,0, -0.1)

X, Y =pylab.meshgrid(x, y) 
Z = np.cos(X) + np.cos(Y)

fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)

im=plt.imshow(Z,extent=(0,10,0,10))
plt.colorbar(im)
ax.set_xlabel(r"x",fontsize=20)
ax.set_ylabel(r"y",fontsize=20)
ax.tick_params(axis='x', labelsize=20)
ax.tick_params(axis='y', labelsize=20)

plt.show()

こういう画像が生成される。
f:id:Misaki_yuyyuyu:20170821104912p:plain

注意点

デフォの設定?だとy座標の始点が画像左上なので注意。
うっかり以下のようなコードを書くと上下反転する

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#used packages
import numpy as np
import matplotlib.pyplot as plt
import pylab

x = np.arange(0, 10, 0.1)
y = np.arange(0,10, 0.1)

X, Y =pylab.meshgrid(x, y) 
Z = np.cos(X) + np.cos(Y)

fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)

im=plt.imshow(Z,extent=(0,10,0,10))
plt.colorbar(im)
ax.set_xlabel(r"x",fontsize=20)
ax.set_ylabel(r"y",fontsize=20)
ax.tick_params(axis='x', labelsize=20)
ax.tick_params(axis='y', labelsize=20)

plt.show()

f:id:Misaki_yuyyuyu:20170821105216p:plain
y=0上にZ=2の極大値が現れてないことから、間違った図だとわかる
y = np.arange(0,10, 0.1)の部分を、y = np.arange(10,0, -0.1)とすれば先ほどの正しい図となる