【Matplotlib】ズームインセットにX軸・Y軸それぞれ異なるスケールを設定する方法
Matplotlibでズーム表示用のインセット(挿入グラフ)に、元のグラフとは異なるX軸・Y軸のスケールを設定したい場合、inset_axes()メソッドを活用することで簡単に実現できます。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- NumPyを使ってxとyのデータポイントを作成します。
- 現在の図にサブプロットを追加します。
- plot()メソッドでxとyのデータポイントをプロットします。
- inset_axes()メソッドを使用して、指定した幅と高さのインセット axes を作成します。
- インセット側に、元のグラフとは異なるX軸・Y軸のスケール(表示範囲)を設定します。
- mark_inset()メソッドでボックスを描画し、インセットが表す領域の位置を元のグラフ上に示します。
- show()メソッドで図を表示します。
コード例
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import mark_inset, inset_axes
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(0, 1, 100)
y = x ** 2
ax = plt.subplot(1, 1, 1)
ax.plot(x, y)
axins = inset_axes(ax, 1, 1, loc=2, bbox_to_anchor=(0.2, 0.55),
bbox_transform=ax.figure.transFigure)
axins.plot(x, y)
x1, x2 = .4, .6
y1, y2 = x1 ** 2, x2 ** 2
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
mark_inset(ax, axins, loc1=1, loc2=3, fc="none", ec="0.5")
plt.show()
実行結果

ポイント解説
この例では、y = x²という曲線を全体表示したメイングラフに対し、x = 0.4〜0.6の範囲を拡大したインセットを作成しています。set_xlim()とset_ylim()でX軸・Y軸それぞれ独立した範囲を指定できるため、縦横で異なる倍率のズーム表示が可能です。また、mark_inset()により、拡大対象の領域が元グラフのどこに該当するかが線で結ばれて視覚的に分かりやすくなります。データの局所的な変化を強調したい解析やレポート作成において非常に便利なテクニックです。
-
Python・Matplotlib入門:ループと関数を使って複数のサブプロットにデータを一括描画する方法
Matplotlibで複数のサブプロット(axes)を扱う場合、1つずつ手作業でプロットするのは非効率です。そこで役立つのが「ループ」と「関数」を組み合わせた手法です。この記事では、3行×2列のグリッド状に配置されたサブプロットに対して、ランダムな時系列データを一括で描画する方法を解説します。 実装の手順 図のサイズと余白の設定: plt.rcParams を使ってフィギュアサイズを指定し、figure.autolayout を有効にすることで、サブプロット間や図の外周のパディングを自動調整します。 サブプロットの作成: plt.subplots(3, 2) を呼び出し、行数3・列数2の図と
-
Matplotlibでcontourfプロットとsurface_plotを重ねて表示する方法
Matplotlibでcontourf(塗りつぶし等高線)プロットとsurface_plot(3Dサーフェスプロット)を同じ図上に重ねて表示するには、以下の手順に従います。numpyを使用して、delta、xrange、yrange、x、y の各変数を初期化します。figure()メソッドで新しい図を作成するか、既存の図をアクティブにします。projection=3d を指定して、現在の軸(Axes)を取得します。x と y のデータポイントをもとに、3D等高線プロットを作成します。x と y のデータポイントをもとに、サーフェス(表面)をプロットします。図を表示するには、show()メソッド