【日本語で解説】matplotlibチュートリアル(前編)

こんにちは、管理人のウノケンです。

今回は、Pythonによるプロットの基礎として、matplotlibのチュートリアルを活用した学習について前後編に分けて解説していきます。

matplotlib.pyplotを使うと、MATLABのようにグラフをプロットすることができます。有料ソフトウェアであるMATLABのような機能をPythonのライブラリとして使用できるのはとてもありがたいですよね。

とはいえ、matplotlibには膨大な機能があり、うまく使いこなせていない方も多いのではないかと思います。

matplotlibの基礎は、公式のmatplotlibチュートリアルを参考にした学習がおすすめです。とはいえ英語で記載されていたり、そのままのコードで実行してもうまくいかない部分があるため、解説や修正を加えながら日本語で解説していきます。

とにかく簡単にプロットしたい!という方は【具体例で説明】Pythonでなるべく簡単にプロットする方法をご覧ください。

それでは見ていきましょう!



日本語で解説!matplotlibチュートリアル(前編)

ライブラリのインポート

matplotlib.pyplotとnumpyをインポートします。

import matplotlib.pyplot as plt
import numpy as np

基本的な可視化

リストが1つあれば折れ線グラフとして簡単に可視化できます。
x軸の値は明示しなくても自動で生成されます。

plt.plot([1,5,3,7])
plt.show()          

x軸の値を明示する場合、xベクトル、yベクトルの長さが一致するように注意しましょう。

plt.plot([1,2,3,4],[1,5,3,7])
plt.show()

プロットのスタイル(点の種類・色)の変更

plt.plotは第3の引数をとることもでき、これはプロットのスタイルを変更するのに使用できます。
プロットの色とスタイルを文字列(アルファベットの組み合わせ)で指定します。例えば、’g–‘とすると、これは「緑色の破線」でプロットすることを意味します。

また、plt.axis([xmin, xmax, ymin, ymax])で軸の範囲を指定できます。

plt.plot([1,2,3,4],[1,5,3,7],'g--')
plt.axis([0,10,0,20])
plt.show()

numpy配列のプロット

Pythonで数値データを扱う際には、リスト操作よりもnumpy配列を使うことが多いでしょう。もちろんmatplotlibではリストだけでなく、numpy配列をプロットすることができます。実際、内部的にはリストであってもnumpy配列に変換されているそうです。

次の例では、numpy配列データをプロットします。
また、plot関数では1行で複数の線をプロットできます。複数の線には異なるスタイルを指定でき、ここではその例を示します。

# 0から10の間を0.5ずつサンプリングします。
x = np.arange(0., 10., 0.5)
# 赤●, 青×, 緑◆でプロットします。
plt.plot(x, x, 'ro', x, x**2, 'bx', x, x**3, 'gD')
plt.show()

キーワード文字列を使用したプロット

PandasのDataFrameオブジェクトのように、文字列を使用して特定の変数にアクセスできる形式のデータは、データキーワード引数を使用してプロットすることができます。

次の例では、辞書型の変数dataを定義し、そのkeyである文字列を介してデータをプロットしています。’a’が横軸、’b’が縦軸、’c’が色、’d’がサイズ(s)に指定されています。data引数への指定を忘れないようにしましょう。

data = {'a': np.arange(30),
        'c': np.random.randint(0, 50, 30),
        'd': np.random.randn(30)}
data['b'] = data['a'] + 10 * np.random.randn(30)
data['d'] = np.abs(data['d']) * 100

plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()



カテゴリ変数を使用したプロット

matplotlibでは、数値データだけでなくカテゴリ変数を直接プロット関数に渡せる場合が多いです。
次の例では、棒グラフと散布図、折れ線グラフのそれぞれにおいて、カテゴリ変数を使用してプロットを行っています。

names = ['group_a', 'group_b', 'group_c']
values = [5, 1, 10]

plt.figure(figsize=(9, 3))

plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting')
plt.show()

ラインプロパティの設定

matplotlibの折れ線グラフでは、線幅をはじめ、様々なプロパティを設定できます。

次の例では、キーワード引数lineweidthを使用して線幅を設定しています。

x = np.arange(0., 10., 0.5)
y=x**2
plt.plot(x, y, linewidth=10.0)
plt.savefig('./mat07.png')

Line2Dインスタンスのsetterメソッドを使用することもできます。

line, = plt.plot(x, y, '-')
line.set_linewidth(10)

plt.setp()を使用することも可能です。

x1 = np.arange(0., 10., 0.5)
y1 = x**2
x2 = np.arange(0., 10., 0.5)
y2 = x**3
lines = plt.plot(x1, y1, x2, y2)
# キーワード引数を使用する方法
# plt.setp(lines, color='r', linewidth=2.0)
# MATLABライクに文字列と値のペアで指定することもできます。
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

設定可能なプロパティのリストはlineあるいはlinesを引数とすることで取得できます

plt.setp(line)
# agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array
#   alpha: float
#   animated: bool
#   antialiased or aa: bool
#   clip_box: `.Bbox`
# (以下略)



まとめ

今回はPythonによるプロットの基礎として、matplotlibのチュートリアルを活用した学習(前編)について解説してきました。前編では、基礎的なプロットの仕方やスタイルの変更方法について知ることができたのではないかと思います。

後編でも引き続きmatplotlibチュートリアルを解説していきます。

チュートリアルを越えてより詳しく学びたいという方は、下記の参考書などを使った学習もおすすめです。

参考書学習は…

matplotlibのみを扱った参考書は少ないですが、numpyやpandasを含めて、データサイエンスに必要なライブラリを詳しく解説する以下の書籍がおすすめです。

また、どんなグラフを作ると効果的なのかわからず、雰囲気でグラフを作っていた方は、以下の書籍で効果的なグラフの選択について学ぶのも良いでしょう。

参考

matplotlibチュートリアル