キャンバスしたい(matplotlib.figure.Figure

 1import matplotlib.pyplot as plt
 2
 3# キャンバスを作成
 4fig = plt.figure(
 5  figsize=(6, 4),
 6  dpi=150,
 7  layout="constrained",
 8  facecolor="white",
 9)
10
11# グラフを描く
12ax = fig.add_subplot(1, 1, 1)
13ax.plot([1, 2, 3], [4, 5, 6])
14
15# グラフを表示
16plt.show()
17
18# キャンバスを保存
19fig.savefig("figure.png")

figure.Figure(=pyplot.figure)でキャンバスを作成できます。 figureは、グラフ全体を表すオブジェクトで、グラフ(Axes)を描くときの土台になります。

参考

figure + add_subplotでグラフを描く方法のほかに、pyplot.subplotsなどでグラフを描く方法もあります。

個人的にはこちらのsubplotssubplot_mosaicを使う方法がオススメです。 figureのオプションはsubplotsでも使えます。

ヒント

不正確な部分がありますが、matplotlibの構成要素は以下のようになっています。

Figure: キャンバス全体
|-- Axes: グラフ領域
    |-- Axis: 軸
    |   |-- Tick: 目盛り
    |   |   |-- Line2D: 目盛り線
    |   |   |-- Line2D: グリッド線
    |   |   |-- Text: 目盛りラベル
    |   |-- Label: 軸ラベル
    |-- Line2D: 線
    |-- PathCollection: 散布図の点
    |-- Patch: 図形
    |-- Text: テキスト
    |   |-- Title: タイトル
    |-- Legend: 凡例

FigureAxesの関係を理解することが重要です。

分割したい(add_subplot

1# キャンバスを作成
2fig = plt.figure(figsize=(8, 6))
3
4ax1 = fig.add_subplot(2, 3, 1)    # index=1
5ax4 = fig.add_subplot(nrows=2, ncols=3, index=4)
6ax6 = fig.add_subplot(pos=236)    # index=6

add_subplotメソッドで、キャンバスを分割して複数のグラフを描くことができます。

位置引数には(行の数, 列の数, 場所)tupleで指定したり、 それをまとめてposで指定したりできます。

保存したい(savefig

1fig.savefig("figure.png")

savefigメソッドでキャンパスを保存できます。

注釈

plt.savefigメソッドも存在します。 plt.savefigはMATLAB風のAPIで、現在アクティブなFigureを保存します。 fig.savefigはオブジェクト指向APIで、よりPythonicです。

サイズを変更したい(figsize

1fig = plt.figure(figsize=(4, 3))

figsizeオプションでキャンバス全体のサイズを変更できます。 単位はインチです。 デフォルトはfigsize=(6.4, 4.8)です。

注釈

単位はインチですが、実際の大きさは気にせず、 アスペクト比を指定するくらいの気持ちで使っています。

解像度が不足している場合は、dpiオプションで変更すればよいと思います。 デフォルトはdpi=100です。

レイアウトしたい(layout

1fig = plt.figure(layout="constrained")  # 自動で重なりを回避(recommended)
2fig = plt.figure(layout="compressed")  # constrainedより詰める
3fig = plt.figure(layout="tight")    # さらに詰める
4fig = plt.figure(layout="none")    # 自動調整なし

layoutオプションで、キャンバス内のレイアウトをよしなに設定できます。 デフォルトはlayout=Noneです。

ひとつのキャンバスに複数の図を描くと、タイトルや軸タイトルが重なってしまうことがあります。 そのようなときはlayout="constrained"オプションをつけるとよいです。 余白の大きさをもっと詰めたい場合は、好みに応じてcompressedtightを選択してください。

解像度したい(dpi

1fig = plt.figure(dpi=200)

dpiオプションで画像の解像度を変更できます。 論文や資料用には200〜300、 画面表示用には100(デフォルト)が目安です。

背景色したい(facecolor / edgecolor

1fig = plt.figure(facecolor="lightgray")

facecolorオプションで、キャンバス全体の背景色を変更できます。

フレームしたい(frameon

1fig = plt.figure(frameon=false)

frameonオプションで、キャンバスの枠線を変更できます。 frameon=falseで枠を非表示にできます。

リファレンス