6.1. Matplotlib#

Matplotlib は、グラフや図の作成に最も広く使われている基本的な可視化ライブラリです。学術論文用のグラフからデータ分析やプレゼンテーション資料まで、さまざまな用途に対応しています。また、Matplotlib は NumPy や Pandas といった数値計算・データ処理ライブラリと相性が良く、科学技術計算や機械学習の分野でも頻繁に利用されています。さらに、Seaborn や Pandas など、Matplotlib を土台とした可視化ライブラリも多数存在し、Python における可視化の中心的な存在となっています。

6.1.1. Matplotlib ライブラリー#

Matplotlib でグラフを描く際には、主に pyplot モジュールを使います。以下のようにインポートして利用します。

import matplotlib.pyplot as plt

なお、本書ではグラフを見やすくするため、Matplotlib の表示設定を変更しています。そのため、本書のコードをそのまま実行しても同じ見た目のグラフが描かれない場合があります。本書と同じスタイルのグラフを描きたい場合は、Matplotlib をインポートした直後に以下のコードを一度だけ実行してください。これにより、以降描かれるグラフは本書のスタイルに統一されます。

import matplotlib.pyplot as plt

plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = [16, 12]
plt.rcParams['figure.dpi'] = 300
plt.rcParams['legend.fontsize'] = 28
plt.rcParams['lines.markersize'] = 18
plt.rcParams['lines.linewidth'] = 3
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=['#666666', '#E69F00', '#56B4E9', '#009E73',
                                                    '#F0E442', '#0072B2', '#D55E00', '#CC79A7'])
plt.rcParams['font.family'] = 'Helvetica Neue' 
plt.rcParams['font.size'] = 32

6.1.2. インターフェース#

Matplotlib でグラフを描く方法には、大きく分けて2通りあります。一つは、オブジェクト指向的に操作する object-oriented interface、もう一つは MATLAB や R で使われているような state-based interface です。どちらも同じグラフを描けますが、操作の仕方が異なります。

object-oriented interface では、まずグラフの描画領域(Figure)や座標軸(Axes)といったオブジェクトを作成し、それらを使って描画します。例えば、散布図を描く場合は次のようになります。

x = [2.27, 1.98, 2.08, 2.18, 2.20, 2.19, 2.16, 2.20, 2.26, 2.35]
y = [5.55, 4.62, 5.05, 5.44, 5.60, 4.83, 5.55, 5.13, 6.03, 7.41]

fig = plt.figure()
ax = fig.add_subplot()
ax.scatter(x, y)

plt.show()
Hide code cell output
../_images/cbe345dfb4cbb0faf514d997a340100b090d5220d47a486da3cf651c67689962.png

一方、state-based interface は、オブジェクトを意識せず、直接関数を呼び出して描くスタイルです。object-oriented interface に比べると簡潔に書けるのが特徴的です。

plt.scatter(x, y)
plt.show()
Hide code cell output
../_images/cbe345dfb4cbb0faf514d997a340100b090d5220d47a486da3cf651c67689962.png

MATLAB や R に慣れている人には state-based interface の方が直感的で扱いやすいかもしれません。

Python では、さまざまな場面でオブジェクト指向の考え方に触れることになります。そのため、本節ではオブジェクト指向に基づいた object-oriented interface を中心に解説します。なお、インターネット上にある Matplotlib のサンプルコードでは、object-oriented interface と state-based interface の両方が混在して使われていることがあります。コードを参考にする際には、「どちらのインタフェースで書かれているか」を意識して読むと、混乱を避けることができます。

6.1.3. グラフの保存方法#

Pythonで描いたグラフは、変数と同様に、明示的に表示する命令がなければ画面には表示されず、pyplot モジュール(plt)内に保持されます。グラフを画面に表示するには、pyplot モジュールの show メソッドを使います。たとえば、前述の例ではグラフを描いたあとに plt.show() を実行しており、これによってグラフが画面上に表示されます。

一方、グラフをファイルとして保存したい場合は、show の代わりに savefig メソッドを使います。たとえば、PNG 形式で保存する場合は、次のように指定します。なお、保存フォーマットは PNG のほかに PDF、PS、EPS、SVG なども選択可能です。

plt.scatter(x, y)
plt.savefig('kunugi_weights_heights.png', format='png')

show メソッドを実行すると、グラフが画面に表示された後に、plt 内のグラフデータが自動的に削除されます。そのため、グラフの保存と表示の両方を行いたい場合は、必ず savefig を先に実行してください。