Matplotlibの使い方
Explicit vs Implicit Interfaces
Explicit interface
はオブジェクト指向的な使い方(OO-style
)で、axes.Axes
オブジェクトに対して設定する方法です。
Implicit interface
はMATLAB的な使い方(pyplot-style
)で、pyplot
モジュールのグローバルなオブジェクト(?)に対して設定する方法です。
注釈
公式で推奨しているように、MATLABユーザーでないかぎり、OO-style
を使えばよいと思います。
また、意図せずに混合して使うのは避けた方がよいと思います。
Axes and Figure
matplotlib
の用語として把握しておくべきなのはAxes
とFigure
です。
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.gcf
やplt.gca
でimplicit interface
で使われているグローバルオブジェクトをexplicit interface
として使えるようにできます。