ダッシュボード風に複数のグラフを並べたいときは、subplotsとGridSpecを使い分けるのが基本です。本記事では、均等配置から複雑なレイアウトまで、実務でよく使うパターンをサンプル付きでまとめます。
この記事でわかること
- sharex/shareyで軸を共有して比較しやすくする
- subplots(nrows, ncols)での均等グリッド配置
- tight_layout/constrained_layoutで余白を調整
- GridSpecで幅・高さの比率を変えた柔軟レイアウト
- 図全体のタイトル(suptitle)と凡例(fig.legend)
データ分析やレポート作成において、複数のグラフを効果的に配置し、比較することは非常に重要です。しかし、ただグラフを並べるだけでは、情報が読み取りにくくなったり、伝えたいメッセージが曖昧になったりすることがあります。例えば、時系列データの複数の指標を同時に追いたい場合、製品の地域別売上を比較したい場合、あるいは実験結果の異なる側面を一度に示したい場合など、適切に配置された複数グラフは、より深い洞察を促し、説得力のあるプレゼンテーションを可能にします。この記事では、そんな課題を解決するために、Matplotlibで複数のグラフを柔軟に、かつ美しく配置するテクニックを網羅的に解説します。ダッシュボード作成や論文発表など、様々なシーンで役立つ具体的な方法を学ぶことで、あなたのデータ可視化スキルが向上することでしょう。
はじめに:ランダムウォークの折れ線グラフ
複数のグラフを並べて使用したいので、異なるデータを簡単に作成する方法の一つとして、ランダムウォークのデータを使用します。
ここでは、Pythonの強力な数値計算ライブラリであるNumPyを使って、ランダムウォークのデータ(y1, y2, y3, y4)を生成しています。特に、以下の3つの関数が重要です。
-
np.random.seed(シード値): この関数は、乱数(ランダムな数値)を生成する際に、その「出発点」を設定します。同じシード値を指定すると、何度プログラムを実行しても毎回全く同じ乱数の並びが生成されます。これにより、グラフの形が常に同じになり、結果の再現性が保証されます。
-
np.random.normal(loc=平均, scale=標準偏差, size=個数): この関数は、正規分布(釣鐘状の形をした、自然界でよく見られるデータの分布)に従う乱数を指定された個数だけ生成します。 -
loc: 乱数の平均値です。 -
scale: 乱数のばらつき具合(標準偏差)です。この値が大きいほど、乱数のばらつきが大きくなります。 -
size: 生成する乱数の個数です。
ランダムウォークでは、この関数を使って「一歩あたりの変化量」をランダムに決めています。
-
np.cumsum(配列): この関数は、与えられた配列の累積和を計算します。累積和とは、配列の最初の要素から順番に、そこまでの要素をすべて足し合わせた値のことです。ランダムウォークでは、各ステップの変化量を次々に足し合わせることで、現在の位置(累積された値)を計算し、折れ線グラフの線として表現します。
import matplotlib.pyplot as plt
!pip install japanize-matplotlib > /dev/null # Google Colab の機能を使って日本語フォントをインストール・インポート
import japanize_matplotlib
import numpy as np # numpyをインポート(乱数を作成するために使用)
# グラフ1
# 乱数を一定にするためのシード(種)を設定します。42という数字は何でも良いですが、同じ数字にすると
# 毎回同じランダムなデータが生成され、結果を再現しやすくなります。
np.random.seed(42)
# ランダムウォークのデータを生成します。
# x1は、平均(loc)が0、標準偏差(scale)が1の正規分布に従うランダムな数値を100個作成します。
# これが「一歩あたりの変化量」になります。
x1 = np.random.normal(loc=0, scale=1, size=100)
# y1は、x1の累積和を計算します。これにより、各ステップでの変化を積み重ねて、
# ランダムウォークの軌跡(グラフの線)を作成します。
y1 = np.cumsum(x1)
# グラフを描画するための準備をします。
# figは図全体、axは個別のグラフ領域(サブプロット)を指します。
# figsize=(9,6)は、グラフの幅と高さをインチで指定しています。
fig, ax = plt.subplots(figsize=(9,6))
# y1のデータを折れ線グラフとしてプロットします。
ax.plot(y1)
# グラフのタイトルを設定します。
ax.set_title("グラフ1")
# x軸のラベルを設定します。
ax.set_xlabel("ステップ")
# y軸のラベルを設定します。
ax.set_ylabel("累積和")
# グラフにグリッド線を追加します。linestyle=":"で線の種類を点線に、alpha=0.7で透明度を設定します。
ax.grid(True, linestyle=":", alpha=0.7)
# グラフのタイトルやラベルが重ならないように、レイアウトを自動的に調整します。
plt.tight_layout()
# グラフを表示します。
plt.show()
# グラフ2
np.random.seed(2)
x2 = np.random.normal(loc=0, scale=1, size=100)
y2 = np.cumsum(x2)
fig, ax = plt.subplots(figsize=(8,5))
ax.plot(y2, color="C1")
ax.set_title("グラフ2")
ax.set_xlabel("ステップ")
ax.set_ylabel("累積和")
ax.grid(True, linestyle=":", alpha=0.7)
plt.tight_layout()
plt.show()
# グラフ3
np.random.seed(3)
x3 = np.random.normal(loc=0, scale=1, size=100)
y3 = np.cumsum(x3)
fig, ax = plt.subplots(figsize=(7,4))
ax.plot(y3, color="C2")
ax.set_title("グラフ3")
ax.set_xlabel("ステップ")
ax.set_ylabel("累積和")
ax.grid(True, linestyle=":", alpha=0.7)
plt.tight_layout()
plt.show()
# グラフ4
np.random.seed(4)
x4 = np.random.normal(loc=0, scale=1, size=100)
y4 = np.cumsum(x4)
fig, ax = plt.subplots(figsize=(6,3))
ax.plot(y4,color="C1")
ax.set_title("グラフ4")
ax.set_xlabel("ステップ")
ax.set_ylabel("累積和")
ax.grid(True, linestyle=":", alpha=0.7)
plt.tight_layout()
plt.show()
1. sharex/shareyで軸を共有
複数の系列を同じスケールで比較したい場合は、sharex=Trueやsharey=Trueを使います。
import matplotlib.pyplot as plt
import numpy as np # 必要に応じてnumpyもインポート(このコードではデータは既存のものを使用)
# 4行1列のグリッド状に4つのグラフを作成します。
# sharex=Trueを指定することで、全てのサブプロットのX軸(横軸)が共有されます。
# 軸が共有されると、スクロールや拡大縮小が連動し、データ間の比較がしやすくなります。
# constrained_layout=Trueは、タイトルやラベルが自動的に重ならないようにレイアウトを調整してくれます。
fig, axs = plt.subplots(4, 1, sharex=True, figsize=(9, 6), constrained_layout=True)
# 各サブプロットにデータをプロットし、タイトルを設定します。
# axsは1次元配列なので、axs[0]、axs[1]のように直接アクセスできます。
axs[0].plot(y1)
axs[0].set_title("グラフ1")
axs[1].plot(y2,color="C1")
axs[1].set_title("グラフ2")
axs[2].plot(y3,color="C2")
axs[2].set_title("グラフ3")
axs[3].plot(y4,color="C3")
axs[3].set_title("グラフ4")
# forループを使って、全てのサブプロットに共通の設定(グリッド線)を適用します。
# sharex=Trueを設定しているため、X軸のラベルは一番下のグラフにのみ表示されるのが一般的です。
for ax in axs:
ax.grid(True, linestyle=":", alpha=0.5) # 全てのグラフにグリッド線を追加
ax.set_ylabel("累積和") # 各サブプロットにY軸ラベルを設定
# 一番下のサブプロットにのみX軸ラベルを設定することが多いです(共有軸のため)。
axs[-1].set_xlabel("ステップ")
# 全てのグラフを表示します。
plt.show()
2. subplotsの基本:均等グリッド
最も簡単なのはplt.subplots(nrows, ncols)で均等に配置する方法です。
import matplotlib.pyplot as plt
import numpy as np # numpyは既にインポート済みですが、分かりやすさのため再度記述
# 2行2列のグリッド状に4つのグラフ(サブプロット)を作成します。
# figは図全体、axsは4つのサブプロットを格納した配列です。
# figsize=(9,6)で図全体のサイズを指定しています。
fig, axs = plt.subplots(2, 2, figsize=(9, 6))
# axsは通常、[[ax00, ax01], [ax10, ax11]]のような2次元配列で返されます。
# ax.ravel()を使うと、これを[ax00, ax01, ax10, ax11]という1次元の配列に変換でき、
# ループ処理などで扱いやすくなります。
axs = axs.ravel() # 2x2の配列を一次元に平坦化
# 各サブプロットにランダムウォークデータをプロットします。
# y1, y2, y3, y4は、"はじめに"のセクションで作成されたデータです。
axs[0].plot(y1) # 1つ目のサブプロットにy1をプロット
axs[0].set_title("グラフ1") # 1つ目のサブプロットのタイトルを設定
axs[1].plot(y2,color="C1") # 2つ目のサブプロットにy2をプロット
axs[1].set_title("グラフ2") # 2つ目のサブプロットのタイトルを設定
axs[2].plot(y3,color="C2") # 3つ目のサブプロットにy3をプロット
axs[2].set_title("グラフ3") # 3つ目のサブプロットのタイトルを設定
axs[3].plot(y4,color="C3") # 4つ目のサブプロットにy4をプロット
axs[3].set_title("グラフ4") # 4つ目のサブプロットのタイトルを設定
# forループを使って、全てのサブプロットに共通の設定(グリッド線、X軸ラベル、Y軸ラベル)を適用します。
for ax in axs:
ax.grid(True, linestyle=":", alpha=0.5) # グリッド線を追加(点線、半透明)
ax.set_xlabel("ステップ") # 各サブプロットにX軸ラベルを設定
ax.set_ylabel("累積和") # 各サブプロットにY軸ラベルを設定
# 全てのグラフを表示します。グラフが重なる場合は、plt.tight_layout()を使用
plt.show()
3. 余白調整:tight_layout と constrained_layout
テキストや凡例が重なるときは、tight_layout()かconstrained_layout=Trueを使います。後者はFigure作成時に指定するのがポイントです。
# tight_layout の例(後から詰める、シンプルだが注意点あり)
# 2行2列のサブプロットを作成します。figsize=(9,6)で図のサイズを指定。
fig, axs = plt.subplots(2, 2, figsize=(9, 6))
# 各グラフにプロットするデータとタイトルを用意します。
y_data = [y1, y2, y3, y4]
titles = ["グラフ1", "グラフ2", "グラフ3", "グラフ4"]
# axs.ravel()で2次元のaxs配列を1次元に平坦化し、forループで各サブプロットにアクセスします。
for i, ax in enumerate(axs.ravel()):
# 各サブプロットにデータy_data[i]をプロットします。
ax.plot(y_data[i])
# タイトルを設定します。
ax.set_title(titles[i])
# グリッド線を追加します。
ax.grid(True, linestyle=":", alpha=0.7)
# --- tight_layout の詳細 ---
# plt.tight_layout()を呼び出すことで、グラフ間の間隔や余白を自動的に調整し、
# タイトルやラベルが重ならないようにします。これは「描画後に余白を調整する」というアプローチです。
# 手軽で多くの場合に有効ですが、Figureにsuptitle(図全体のタイトル)やfig.legend(図全体の凡例)、
# colorbarsなどを追加した場合、それらが考慮されずにレイアウトが崩れる可能性があるため、
# rect引数で調整が必要になることがあります。シンプルな図には適していますが、複雑な図では手動調整が必要になる場合があります。
plt.tight_layout()
plt.show()
# constrained_layout の例(より賢く、複雑なレイアウトに適応)
# こちらも2行2列のサブプロットを作成しますが、figの作成時にconstrained_layout=Trueを指定します。
# これにより、Matplotlibが「描画前に」最適なレイアウトを計算し、自動で余白を調整してくれます。
# constrained_layoutは、suptitle、fig.legend、colorbarsなど、Figureレベルの要素も考慮に入れて
# レイアウトを構築するため、より複雑な図でも破綻しにくいという利点があります。
# 特にGridSpecなどを使った複雑なレイアウトでは、constrained_layoutの使用が強く推奨されます。
fig, axs = plt.subplots(2, 2, figsize=(9, 6), constrained_layout=True)
# 同様に、各サブプロットにデータをプロットし、タイトル、グリッドを設定します。
for i, ax in enumerate(axs.ravel()):
ax.plot(y_data[i])
ax.set_title(titles[i])
ax.grid(True, linestyle=":", alpha=0.7)
# constrained_layout=Trueを指定しているため、明示的にplt.tight_layout()を呼び出す必要はありません。
plt.show()
4. GridSpec:柔軟レイアウトと比率
「左に縦長、右上に横長、右下に小さめ」のような不均等レイアウトはGridSpecで実現します。width_ratiosとheight_ratiosを指定すると、幅・高さの比率をコントロールできます。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
# 図全体(Figure)を作成します。
fig = plt.figure(figsize=(9, 6))
# GridSpecを定義します。
# 3行2列の仮想グリッドを作成します。
# figure=figで、このGridSpecがどのFigureに紐づくかを指定。
# width_ratios=[3, 2]は、2つの列の幅の比率を「3:1」にすることを意味します。
# つまり、1列目が3の幅、2列目が1の幅になります。左のグラフを大きく見せるため比率を調整。
# height_ratios=[2, 1, 1]は、3つの行の高さの比率を「2:1:1」にすることを意味します。
# これにより、右上のグラフを他の右側のグラフより少し大きく見せます。
gs = gridspec.GridSpec(3, 2, figure=fig, width_ratios=[3, 2], height_ratios=[2, 1, 1])
# fig.add_subplot()を使って、GridSpecで定義した領域にサブプロットを追加します。
# gs[:, 0]は「全ての行の0列目」を意味し、左側に縦長のサブプロットを作成します。
ax_left = fig.add_subplot(gs[:, 0]) # 左縦長グラフ
# gs[0, 1]は「0行目(一番上)の1列目(右側)」を意味し、右上のサブプロットを作成します。
ax_right_top = fig.add_subplot(gs[0, 1]) # 右上グラフ
# gs[1, 1]は「1行目(中央)の1列目(右側)」を意味し、右中央のサブプロットを作成します。
ax_right_middle = fig.add_subplot(gs[1, 1]) # 右中央グラフ
# gs[2, 1]は「2行目(一番下)の1列目(右側)」を意味し、右下のサブプロットを作成します。
ax_right_bottom = fig.add_subplot(gs[2, 1]) # 右下グラフ
# 各サブプロットにデータをプロットし、タイトルやラベルを設定します。
ax_left.plot(y1)
ax_left.set_title("グラフ1 (左縦長、大きく)")
ax_left.set_xlabel("ステップ")
ax_left.set_ylabel("累積和")
ax_left.grid(True, linestyle=":", alpha=0.7)
ax_right_top.plot(y2, color="C1")
ax_right_top.set_title("グラフ2 (右上、やや大きく)")
ax_right_top.set_xlabel("ステップ")
ax_right_top.set_ylabel("累積和")
ax_right_top.grid(True, linestyle=":", alpha=0.7)
ax_right_middle.plot(y3, color="C2")
ax_right_middle.set_title("グラフ3 (右中央)")
ax_right_middle.set_xlabel("ステップ")
ax_right_middle.set_ylabel("累積和")
ax_right_middle.grid(True, linestyle=":", alpha=0.7)
ax_right_bottom.plot(y4, color="C3")
ax_right_bottom.set_title("グラフ4 (右下)")
ax_right_bottom.set_xlabel("ステップ")
ax_right_bottom.set_ylabel("累積和")
ax_right_bottom.grid(True, linestyle=":", alpha=0.7)
# グラフのタイトルやラベルが重ならないように、レイアウトを自動的に調整します。
# constrained_layout=Trueを使うと、suptitleなどのFigureレベルの要素も考慮して
# 賢くレイアウトを調整してくれるため、ここではtight_layoutの代わりに推奨されます。
# ただし、GridSpecではfig作成時にconstrained_layout=Trueを指定できないため、
# fig.set_layout_engine('constrained')を使います。
fig.set_layout_engine('constrained')
# 全てのグラフを表示します。
plt.show()
width_ratiosとheight_ratiosを指定すると、幅・高さの比率をコントロールできます。
5. 図全体タイトルと凡例
「複数のグラフに共通するタイトルや凡例は、各グラフ(Axes)ごとではなく、図全体(Figure)に対して設定することで、まとめて管理できます。」
「全体に共通するタイトルや凡例は、個々のグラフに設定するのではなく、それらをまとめる大きな『図(Figure)』に対して設定することで、効率よく配置・制御できます。」複数のAxesにまたがるタイトルや凡例は、Figure側のAPIを使うと一括制御できます。
# matplotlib.pyplotとnumpyは既にインポート済みであることを前提とします。
# 2行1列のサブプロットを作成します。figsize=(9,6)で図全体のサイズを指定。
# ここではy軸を共有する必要がないので、shareyは指定しません。
fig, axs = plt.subplots(2,1, figsize=(9,6))
# プロットするデータと、各サブプロットのタイトル、凡例のラベルを用意します。
y_data = [y1, y2]
plot_titles = ["グラフ1", "グラフ2"]
subplot_legend_labels = ["系列 1", "系列 2"]
# forループを使って、各サブプロットにデータをプロットし、設定を行います。
for i, ax in enumerate(axs):
# y_data[i]をプロットし、各系列のラベルも設定します(後の全体凡例で利用)。
ax.plot(y_data[i], label=subplot_legend_labels[i])
# 各サブプロットのタイトルを設定します。
ax.set_title(plot_titles[i])
# x軸ラベルとy軸ラベルを設定します。
ax.set_xlabel("ステップ")
ax.set_ylabel("累積和")
# 各サブプロットの凡例をグラフの左上に表示します。
ax.legend(loc="upper left")
# グリッド線を追加します。
ax.grid(True, linestyle=":", alpha=0.7)
# 図全体のタイトルを設定します。
# y=1.03は、タイトルを少し上にずらして配置するための調整です。
# fontsizeでフォントサイズを指定します。
fig.suptitle("ランダムウォークデータの比較", y=1.03, fontsize=16)
# 図全体の凡例を作成します。
# まず、各サブプロットから凡例のハンドル(線の情報)とラベルを取得し、それらを結合します。
handles, overall_lgnd_labels = [], []
for ax in axs:
h, l = ax.get_legend_handles_labels()
handles += h
overall_lgnd_labels += l
# 図全体の凡例をサブプロットの下に配置します。
# loc="lower center"で下中央に配置。
# ncol=4は凡例を4列で表示。
# frameon=Trueは凡例の周りに枠を表示。
# bbox_to_anchor=(0.5, -0.1)は、凡例の位置をより細かく調整するための座標です。
# (0.5, -0.1)は「図の幅の50%位置(中央)、図の高さの-0.1倍(図の下端よりさらに下)」を意味します。
fig.legend(handles, overall_lgnd_labels, loc="lower center", ncol=4, frameon=True,
bbox_to_anchor=(0.5, -0.1))
# タイトルと図全体の凡例のためのスペースを確保するようレイアウトを調整します。
# rect引数は、図の中でグラフが描画される領域を正規化された座標で指定します。
# [left, bottom, right, top]の順で、
# [0, 0.05, 1, 0.95]は「下から5%の場所から、上から5%の場所まで」にグラフ領域を確保し、
# タイトルと凡例が重ならないようにします。
plt.tight_layout(rect=[0, 0.05, 1, 0.95])
# 全てのグラフを表示します。
plt.show()
6. レイアウトのコツ
ここまでの知識を使って、複数のグラフを効果的に配置するためのいくつかの「コツ」をご紹介します。これらのポイントを押さえることで、よりプロフェッショナルで分かりやすい図を作成できます。
- 一貫性:軸のスケールやフォーマットはできるだけ揃える (
sharex/sharey) - 複数のグラフを比較する際、X軸やY軸の範囲がバラバラだと、データの増減や大小を正確に読み取るのが難しくなります。
-
sharex=Trueやsharey=Trueを使うことで、軸の目盛りや範囲が自動的に揃えられ、グラフ間の比較が格段にしやすくなります。
- 余白最適化:
tight_layoutかconstrained_layout、保存時はbbox_inches="tight" - グラフのタイトル、軸ラベル、凡例などが重なってしまうと、見た目が悪く、情報が読み取れません。
-
plt.tight_layout()やconstrained_layout=Trueを使って、自動で適切な余白が確保されるようにしましょう。 - グラフを画像ファイルとして保存する際も、
plt.savefig('ファイル名.png', bbox_inches="tight")と指定すると、余白が適切に調整されてきれいに保存できます。
- 比率設計:重要なグラフを大きく (
GridSpecのwidth_ratios/height_ratios) - 伝えたい情報の中で、特に強調したいグラフは大きく、補足的なグラフは小さく配置するなど、情報の重要度に応じてサイズを調整することが有効です。
-
GridSpecのwidth_ratios(幅の比率)やheight_ratios(高さの比率)を使うことで、このような柔軟なサイズのグラフ配置が可能になります。
- 視線誘導:左上→右下へ流れる自然な並べ方に
- 人間は一般的に左上から右下へと視線を動かして情報を読み取ります。この特性を活かし、最も重要な情報を左上に、次に重要な情報をその右や下に配置するなど、自然な視線の流れに沿ったレイアウトを意識すると、見る人にとって理解しやすい図になります。
まとめ
この記事では、Matplotlibを使って複数のグラフを効果的に表示するための様々なテクニックを学びました。主要なポイントをもう一度確認しておきましょう。
- 比較しやすさ重視なら
sharex/sharey - 複数のグラフでX軸やY軸の範囲を揃えたいときは、
plt.subplots()の引数にsharex=Trueやsharey=Trueを指定しましょう。 - これにより、データ間の相対的な比較が非常にしやすくなります。
- 均等配置は
subplots、不均等はGridSpec -
plt.subplots(nrows, ncols)を使えば、同じサイズのグラフをグリッド状にきれいに並べられます。 - 「左に大きく、右に小さく」といったように、グラフのサイズや位置を自由に組み合わせたい場合は、
GridSpecを使うことで柔軟なレイアウトが可能です。width_ratiosやheight_ratiosで比率も調整できます。
- 余白は
tight_layoutかconstrained_layoutで自動調整 - グラフのタイトル、ラベル、凡例などが重なって見にくくなるのを防ぐため、
plt.tight_layout()を呼び出すか、図の作成時にconstrained_layout=Trueを設定しましょう。 - これにより、グラフ間の適切な余白が自動的に確保され、見栄えが向上します。
- 図全体の見出しや凡例は
suptitle/fig.legendで管理 - 個々のサブプロットではなく、図全体に対してタイトルを付けたい場合は
fig.suptitle()を使います。 - 複数のグラフにまたがる凡例をまとめて表示したい場合は
fig.legend()を使うことで、図全体の情報を整理して提示できます。
これらの機能を使いこなすことで、目的に応じて最適なグラフレイアウトを作成し、データを効果的に伝えることができるようになります。
❓複数グラフを表示するには plt.subplots() と GridSpec のどちらを使えばよいですか?
基本的には plt.subplots() が推奨 です。行列レイアウトが明確で分かりやすく、一般的な 2×2・1×3 などの配置は subplots で十分です。
複雑な比率(例:上段を大きく、下段を細かく分割)を作りたい場合にのみ GridSpec を使う と効率的です。
❓fig, ax = plt.subplots() で得られる ax の扱いがわかりません
ax は Axes オブジェクト(1つのグラフ領域) を指します。
複数グラフを作る場合、ax は NumPy 配列の形になる ため、
1行2列 → ax[0], ax[1]
2行2列 → ax[0,0], ax[0,1], ax[1,0], ax[1,1]
のようにアクセスします。
❓sharex や sharey を使うメリットは何ですか?
軸を共有して比較しやすくなること です。
例えば、複数の折れ線グラフで横軸のスケールを揃えたいときに便利です。plt.subplots(nrows=2, sharex=True) のように設定すると、ズレのない読みやすいグラフになります。
❓複数グラフの余白が詰まって見づらいのですが?
plt.tight_layout() を使うと自動で余白調整できます。
さらに細かく調整したい場合は fig.subplots_adjust(wspace=0.3, hspace=0.4) を使うと、グラフ間隔を任意に設定できます。
❓GridSpec を使うと何ができますか?
GridSpec を使うと、行・列の比率を柔軟に変更できる ため、
上段を大きく、下段を2つに分割
左側に細い縦グラフ、右に大きいメイングラフ
ダッシュボード風の複雑なレイアウト
といった subplots では再現しにくい構造 が簡単に作れます。
❓複数グラフでタイトルが全体にかぶります。どうすればよいですか?
fig.suptitle("タイトル", y=1.02) のように y位置を調整 すると、タイトルが上部に移動して重なりを防げます。
❓画像サイズが揃わないのですが?
figsize=(10, 6) のように Figure 全体のサイズを統一 すると、複数グラフでも見た目が揃います。
ブログや資料での見やすさが大きく改善します。
コメント