matplotlib入門

Numpy との連携

numpy とは

numpy は、Pythonの数値計算モジュールです。 Python 標準の計算機能よりも豊富な数学関数があり、かつ高速に実行されます。

matplotlib のドキュメントには Numpy が必須であるように書いているものが多いですが、実際はなくても使えます。 しかし、Numpy を使うと様々な処理がより簡単に実行できます。

たとえば、リスト [1,2,3] の各要素に1を足したいという場合、 通常の python では以下のように、まず数値に1を加算する関数 addone() を用意し、 map() 関数でそれを各関数に適用します。 (リスト内包表記という、これまた頭を使う方法もあります)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def addone(n):
       return n+1

data1 = [1,2,3]
data2 = map(addone, data1) # [2,3,4]

一方 numpy の配列を使うと、以下のように配列に直接1を足すことができます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

data1 = np.array([1,2,3])
data2 = data1 + 1 # [2,3,4]

numpy の細かい使い方についてはこのページなどを参照してください。 http://blog.yubais.net/16.html

numpy の配列を matplotlib でプロットする

numpy とは要するに 多次元配列を作って、それを操作するライブラリ です。 したがって、データはすべて多次元 (1次元も含む) の配列となります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

# 1次元、9要素の配列を作成
data = np.array([3,1,4,1,5,9,2,6,5])

1次元の配列は、pythonの通常のリストと同様に plt.plot() でプロットすることができます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

# 1次元、9要素の配列を作成
data = np.array([3,1,4,1,5,9,2,6,5])

# 配列 data をプロット
plt.plot(data)
plt.show()
_images/introduction-1.png

数学関数のプロット

numpy の応用例として、数学関数をプロットしてみます。

数学関数 y=f(x) のプロットとは、要するに大量の x の値と それに対応する y の値を用意し、それらの散布図を描くことに相当します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

# 0 から 10 まで 0.01 ずつ変化させた配列を生成
X = np.arange(0, 10, 0.01) # [0, 0.01, 0.02, ... 10.0]

# X の各要素に sin() 関数を適用
Y = np.sin(X)

# X, Y の散布図をプロット
plt.plot(X, Y)
plt.show()
_images/numpy-sin.png

テキストファイルを読み込んでプロット

numpy の関数 loadtxt() を使うと、読み込んだデータをプロットできます。 まず以下のようなテキストファイルを用意します。

$ cat data.txt
3
1
4
1
5

これを読んでグラフにするコードは以下のとおりです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

# data.txt からデータを読み込んで配列にする
data = np.loadtxt("data.txt")

plt.plot(data)
plt.show()
_images/numpy-loadtxt.png