キャンバスしたい(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などでグラフを描く方法もあります。
個人的にはこちらのsubplots、subplot_mosaicを使う方法がオススメです。
figureのオプションはsubplotsでも使えます。
ヒント
不正確な部分がありますが、matplotlibの構成要素は以下のようになっています。
Figure: キャンバス全体
|-- Axes: グラフ領域
|-- Axis: 軸
| |-- Tick: 目盛り
| | |-- Line2D: 目盛り線
| | |-- Line2D: グリッド線
| | |-- Text: 目盛りラベル
| |-- Label: 軸ラベル
|-- Line2D: 線
|-- PathCollection: 散布図の点
|-- Patch: 図形
|-- Text: テキスト
| |-- Title: タイトル
|-- Legend: 凡例
FigureとAxesの関係を理解することが重要です。
分割したい(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"オプションをつけるとよいです。
余白の大きさをもっと詰めたい場合は、好みに応じてcompressed、tightを選択してください。
解像度したい(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で枠を非表示にできます。