等高線図を描きたい(1)

http://matplotlib.sourceforge.net/goals.htmlの中をいろいろ調べる。
[Tutorial]には、2次元等高線図の例はなかったので、[Examples (zip)]からデモコードをいくつか調べる。
wxPythonのデモを参考にしたときと比べると、Matplotlibのデモは使いにくい。ファイルを一つ一つ実行しなければ、何をやっているかわからない。使い方が悪いのか?

image_interp.pyというデモでは、以下の処理をおこなっていた。まずはこれを足掛かりにしてライブラリ関数の使い方を確認する。

from pylab import *
A = rand(5,5)
figure(1)
imshow(A, interpolation='nearest') # 
savefig('test_figure')
grid(True)
show()
  • rand(5,5) --- 0以上1以下の乱数を5x5個、生成する。そのリストがarray()に入っている?

      type(A)で調べると、型はnumpy.ndaarray。なんだこれ。

  • figure(1) --- 表示するウィンドウの番号らしい。figure(2)としても結果は変わらず。

      たぶん2枚以上の描画ウィンドウを開くときに必要。

  • imshow --- これで等高線を描いているのはわかるが、Aをどのような形で定義するか。
  • savefig --- 描画した図を画像ファイルに保存する。format=でファイル形式を指定。
  • grid(True) --- グリッド線を点線で表示する。
  • show() --- 描画ウィンドウを表示する。

imshow(A, ...)のAをどう定義するかが問題だ。

さらなる例を、pcolor_demo2.pyで見つける。

from pylab import *

def func3(x,y):
    return x*y

dx, dy = 0.2, 0.2
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X, Y = meshgrid(x, y)

Z = func3(X, Y)
figure(1)
im = imshow(Z, interpolation='nearest')
show()

ここではmeshgridの役割が不明だが、関数func3の形を変えれば大抵の図はこのとおりにすれば描けそうだ。さらに確認する点としては、

  • カラーレンジの変え方、指定方法
  • カラーバーを表示したい
  • y軸の向きがこのままだと逆

http://toranekosan.blogspot.com/2007/10/pythonmatplotlib.htmlを参考にさせていただいて、修正する。

from pylab import *

def func3(x,y):
    return x*y

dx, dy = 0.2, 0.2
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X, Y = meshgrid(x, y)

Z = func3(X, Y)
figure(1)
im = imshow(Z, origin='lower', interpolation='nearest')
colorbar(im)
show()