データ配列ができたら,データの操作と可視化をしてみましょう. これには matplotlib を使います. すでに matplotlib.pyplot が plt として import されていることを 仮定します.
多分,``ipython –pylab`` をコマンドラインに与えて立ち上げるのが簡単な方法です.
$ ipython --pylab
In [0]:
この状態では, matplotlib.pyplot のメソッドが,名前空間の 一番の大元の名前空間に展開されるので,以下で用いているの plt. から始まる 部分はつけても付けなくてもよいです. つまり,ipython を --pylab オプションつきで立ち上げると
>>> from pylab import *
>>> from matplotlib.pyplot import *
>>> import numpy as np
>>> import matplotlib.pyplot as plt
的なことをしてくれています.(他にもいろいろやってるけど)
たとえば,横軸を \(y = x^2\) のグラフを書いてみましょう. グラフの横軸の範囲を 0 〜 19 とします. この時は,横軸に a 縦軸に a**2 の点をデータとして生成して それをプロットすることになります.
In [6]: a = np.arange(20)
In [7]: plt.plot(a, a**2) # 線の描画
Out[7]: [<matplotlib.lines.Line2D object at 0x95abd0c>]
グラフのウィンドウを一旦閉じて,サンプル点や, x 軸とか y 軸のラベルを貼りこむには,下のようにします.
In [9]: plt.plot(a, a**2, 'o' ) # 線を描画 とサンプル点描画
In [10]: plt.grid() # グリッド描画
In [11]: plt.xlabel( 'x' ) # x軸のラベル
In [12]: plt.ylabel( 'y' ) # y 軸のラベル
In [13]: plt.clf() # 画像の消去 clear figure
次に画像を扱ってみましょう.画像は2次元の行列状の配列として 扱えます.行列の各要素にに色の情報を載せれば(ピクセル)として 扱えます.
例えば \(3\times 3\) 程度の単位行列を可視化してみると こんな感じになります.
In [48]: e = np.eye( 3 ) # 単位行列の生成
In [49]: plt.imshow( e )
Out[49]: <matplotlib.image.AxesImage at 0x8616269d0>
とすれば,おそらくこんな画像が得られます.
ただし,pyplot のイメージ表示は,行列で記述した画像が自然に見えるように かなりぼやかして表現してしまいます. それが嫌な人は plt.imshow() 関数の interpolation 引数に ‘Nearest’ もしくは ‘none’ を与えてください.
In [52]: plt.clf()
In [53]: plt.imshow( e, interpolation='none' )
Out[53]: <matplotlib.image.AxesImage at 0x8616269d0>
こうすれば,下の画像が得られます.
さらにもう少し大きな行列 \(32\times 32\) くらいを生成し, 各要素をランダムな値に設定して表示させてみます. その上で,色のテーブルを,グレイスケールや,``hot`` と呼ばれるテーブルを使って表示させると, こんな感じになります.
In [69]: img = np.random.rand(32,32)
In [70]: plt.imshow(img)
Out[70]: <matplotlib.image.AxesImage object at 0x9e954ac>
In [71]: plt.gray()
In [72]: plt.hot()
複数のグラフを同時表示させるには subplot() を使います. 例えば,上記のランダムなグラフを3つ並べて色の違いを調べたいような場合には 以下のようにします.
In [6]: img = np.random.rand(32,32)
In [7]: plt.subplot( 131 ) # 表示区画を1行3列に設定し,その1番目に描画
In [8]: plt.imshow( img )
In [9]: plt.subplot( 132 ) # 表示区画の2番目を指定
In [10]: plt.imshow( img )
In [11]: plt.gray()
In [12]: plt.subplot( 133 ) # 表示区画の3番目を指定
In [13]: plt.imshow( img )
In [14]: plt.hot()
matplotlib には他にも多くの機能があります:
等の機能が用意されています.
より多くの情報は:
- matplotlib documentation http://matplotlib.sourceforge.net/contents.html
- an example gallery with corresponding sourcecode http://matplotlib.sourceforge.net/gallery.html
を参照してみてください.