Matplotlibの使い方

Explicit vs Implicit Interfaces

Explicit interfaceはオブジェクト指向的な使い方(OO-style)で、axes.Axesオブジェクトに対して設定する方法です。 Implicit interfaceはMATLAB的な使い方(pyplot-style)で、pyplotモジュールのグローバルなオブジェクト(?)に対して設定する方法です。

注釈

公式で推奨しているように、MATLABユーザーでないかぎり、OO-styleを使えばよいと思います。 また、意図せずに混合して使うのは避けた方がよいと思います。

Axes and Figure

matplotlibの用語として把握しておくべきなのはAxesFigureです。 Axesは独立した図オブジェクト単体を指します。 Figureは最終的に保存する描画オブジェクトを指し、複数のAxesオブジェクトを含むことができます。

Figureオブジェクトの構成要素は Parts of a Figureの図と説明を参照してください。

ヒント

ROOTを使ってるひとは、 FigureオブジェクトはTCanvasオブジェクト相当、 AxesオブジェクトはTCanvas::Divideしたエリア相当、 とイメージするとよいと思います。

 1# OO-styleの基本形
 2import matplotlib.pyplot as plt
 3
 4# データオブジェクト(辞書型 or データフレーム)
 5# sample_data: dict | pd.DataFrame
 6
 7fig, ax = plt.subplots()
 8ax.scatter(
 9    data=sample_data,
10    x="X軸のカラム名",
11    y="Y軸のカラム名",
12    c="マーカーの色のカラム名",
13    marker="マーカーの種類")
14ax.set_title("散布図のタイトル")
15ax_set_xlabel("X軸のタイトル")
16ax_set_ylabel("Y軸のタイトル")

OO-styleの基本的な形として、 matplotlib.pyplot.subplotsで描画オブジェクト(FigureオブジェクトとAxesオブジェクト)を作成し、 matplotlib.axes.Axes.plotを使ってグラフを作成&詳細設定します。

ヒント

pandas.DataFrameなどのデータフレームからグラフを作成する場合に、 X軸とY軸の値をnumpy.arrayなどに変換しているサンプルを見かけますが、 dataオプションでデータフレームを指定し、 X軸とY軸にカラム名を指定すればよいと思います。

ImplicitからExplicitに変換したい

1# Current Figure を取得する
2fig = plt.gcf()
3
4# Current Axesを取得する
5ax = plt.gca()

plt.gcfplt.gcaimplicit interfaceで使われているグローバルオブジェクトをexplicit interfaceとして使えるようにできます。