目次

前のトピックへ

4. Numpy によるデータ行列の取り扱い

次のトピックへ

6. 画像の取扱い

このページ

5. Numpy / Scipy / Matplotlib 連携による簡単な可視化操作

データ配列ができたら,データの操作と可視化をしてみましょう. これには matplotlib を使います. すでに matplotlib.pyplotplt として 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

的なことをしてくれています.(他にもいろいろやってるけど)

5.1. 1 次元データの可視化: グラフ

たとえば,横軸を \(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
_images/plot.png

5.2. 2 次元データの可視化: 画像

次に画像を扱ってみましょう.画像は2次元の行列状の配列として 扱えます.行列の各要素にに色の情報を載せれば(ピクセル)として 扱えます.

例えば \(3\times 3\) 程度の単位行列を可視化してみると こんな感じになります.

In [48]: e = np.eye( 3 )          # 単位行列の生成
In [49]: plt.imshow( e )
Out[49]: <matplotlib.image.AxesImage at 0x8616269d0>

とすれば,おそらくこんな画像が得られます.

_images/eye1.png

ただし,pyplot のイメージ表示は,行列で記述した画像が自然に見えるように かなりぼやかして表現してしまいます. それが嫌な人は plt.imshow() 関数の interpolation 引数に ‘Nearest’ もしくは ‘none’ を与えてください.

In [52]: plt.clf()
In [53]: plt.imshow( e, interpolation='none' )
Out[53]: <matplotlib.image.AxesImage at 0x8616269d0>

こうすれば,下の画像が得られます.

_images/eye2.png

さらにもう少し大きな行列 \(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()
_images/rand32x32col.png _images/rand32x32gray.png _images/rand32x32hot.png

5.3. 複数グラフの同時表示

複数のグラフを同時表示させるには 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()
_images/subplotEx.png

5.4. その他

matplotlib には他にも多くの機能があります:

  • 色の選択
  • マーカーによる注釈
  • LaTeX のフォント
  • 図の取り込み
  • 頻度分布

等の機能が用意されています.

より多くの情報は:

を参照してみてください.