matplotlib入門

とりあえず描く

1次元のリストをグラフ化

「なんでもいいからとりあえずグラフ出してみろ」 という情緒の欠片もないような人は、以下のコードを書きましょう。

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

import matplotlib.pyplot as plt

plt.plot( [3,1,4,1,5,9,2,6,5] )
plt.show()
_images/introduction-1.png

グラフ作成に使うのは matplotlib の pyplot ですが、plt という名前でインポートするのが慣例です。 plt.plot() でリストをグラフとして描写し、 plt.show() で画面に出力します。

複数のリストを同時にグラフ化

plt.plot() を複数回実行してから plt.show() をすると、複数のリストを並べてグラフ化することができます。

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

import matplotlib.pyplot as plt

plt.plot( [3,1,4,1,5,9,2,6,5] )
plt.plot( [3,5,8,9,7,9,3,2,3] )
plt.plot( [8,4,6,2,6,4,3,3,8] )
plt.show()
_images/introduction-2.png

プロット方式を変更

plt.plot() に第2引数として、プロット方式を指定することができます。 種類は「これでもか」というくらい沢山あります。

plt.plot( [1,2,3], '-')  # 折れ線
plt.plot( [1,2,3], '--') # 破線
plt.plot( [1,2,3], '-.') # 一点破線
plt.plot( [1,2,3], ':')  # 点線
plt.plot( [1,2,3], '.')  # 点
plt.plot( [1,2,3], ',')  # ドット
plt.plot( [1,2,3], 'o')  # 円
plt.plot( [1,2,3], 'v')  # 下向き三角
plt.plot( [1,2,3], '^')  # 上向き三角
plt.plot( [1,2,3], '<')  # 左向き三角
plt.plot( [1,2,3], '>')  # 右向き三角
plt.plot( [1,2,3], 's')  # 正方形
plt.plot( [1,2,3], 'p')  # 五角形
plt.plot( [1,2,3], 'h')  # 六角形 (縦)
plt.plot( [1,2,3], 'H')  # 六角形 (横)
plt.plot( [1,2,3], '+')  # 十字
plt.plot( [1,2,3], 'x')  # バツ
plt.plot( [1,2,3], 'd')  # 菱形
plt.plot( [1,2,3], 'D')  # 正方形 (斜め)
plt.plot( [1,2,3], '|')  # 縦線
plt.plot( [1,2,3], '_')  # 横線

# 合わせ技
plt.plot( [1,2,3], '-o')   # 折れ線 + 円
plt.plot( [1,2,3], '--o')  # 破線 + 円
_images/introduction-3.png

色の指定

プロット方式と同様の方法で、色も指定できます。

plt.plot( [1,2,3], 'b') # 青
plt.plot( [1,2,3], 'g') # 緑
plt.plot( [1,2,3], 'r') # 赤
plt.plot( [1,2,3], 'c') # シアン
plt.plot( [1,2,3], 'm') # マゼンタ
plt.plot( [1,2,3], 'y') # イエロー
plt.plot( [1,2,3], 'b') # 黒
plt.plot( [1,2,3], 'w') # 白

# プロット方式と同時指定
plt.plot( [1,2,3], '--b') # 破線 + 青

グラフを画像として保存

画面に出力されたグラフを Ctrl+S で保存できますが、 Pythonコード内で保存したい場合は plt.show() の代わりに plt.savefig() を使います。

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

import matplotlib.pyplot as plt

plt.plot( [3,1,4,1,5,9,2,6,5] )
plt.savefig("graph.png")

指定可能なファイル形式は emf, eps, jpeg, jpg, pdf, png, ps, raw, rgba, svg, svgz, tif, tiff です。拡張子を指定すると勝手に判断されます。

画像のサイズは dpi で指定することができます。

なお、SSHリモートログイン等の、GUIのない環境でこのコードを動かすと、以下のようなエラーが出ると思います。

Error

_tkinter.TclError: no display name and no $DISPLAY environment variable

この場合、 matplotlib.pyplot をインポートする前に、以下の2行を追加しておきます。

import matplotlib
matplotlib.use("Agg")

全体としてこのようなコードになります。

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

import matplotlib
matplotlib.use("Agg")

import matplotlib.pyplot as plt

plt.plot( [3,1,4,1,5,9,2,6,5] )
plt.savefig("graph.png")

散布図

plt.plot() の引数に2つのリストを入力すると、 片方をX軸、もう片方をY軸とした散布図を生成します。

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

import matplotlib.pyplot as plt

X = [0.7, 1.8, 3.6]
Y = [3.3, 0.7, 4.8]

plt.plot(X, Y, 'o')
plt.show()
_images/introduction-scatter.png

X軸とY軸の要素数が異なるとエラーになります。