Matplotlibで2つの曲線間の領域を塗りつぶして可視化する方法
Matplotlibで描画した2つの曲線の間の領域(面積)を求めたい場合、fill_between()メソッドを使うのが最も簡単な方法です。この記事では、実際のコード例を通じて、2つの曲線間の領域を色やハッチングパターンで塗りつぶして可視化する手順を解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- NumPyを使ってx、c1、c2のデータポイントを作成します。
- plot()メソッドを使用して、(x, c1) と (x, c2) の2つの曲線をプロットします。
- fill_between()メソッドを使い、2つの曲線c1とc2に挟まれた領域をグレー色・ハッチング「|」で塗りつぶします。
- show()メソッドを呼び出して図を表示します。
コード例
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True x = np.linspace(0, 1, 100) c1 = x ** 2 c2 = x plt.plot(x, c1) plt.plot(x, c2) plt.fill_between(x, c1, c2, color="grey", alpha=0.3, hatch='|') plt.show()
コードのポイント解説
np.linspace(0, 1, 100)は、0から1までの範囲を100等分した配列を生成します。ここでは、曲線c1としてy = x²(放物線)、曲線c2としてy = x(直線)を定義しています。0から1の範囲では常にc2がc1より大きいため、両曲線の間に領域が生まれます。
fill_between(x, c1, c2)は、第1引数に共通のx値、第2・第3引数に上下のy値を渡すことで、その間を塗りつぶします。主なオプション引数は以下の通りです。
- color="grey":塗りつぶしの色を指定します。
- alpha=0.3:透明度を指定します(0〜1)。小さいほど薄く表示されます。
- hatch='|':ハッチング(斜線などの模様)パターンを指定します。「|」以外にも「/」「\」「*」「o」「+」などが使えます。
数値的に面積の値そのものが必要な場合は、NumPyのnp.trapz(c2 - c1, x)(台形則による積分)を併用すると、塗りつぶした領域の面積を計算することもできます。
出力結果

上記のコードを実行すると、放物線 y = x² と直線 y = x の間の領域が、半透明のグレーに縦線のハッチングパターンで塗りつぶされたグラフが表示されます。
-
Matplotlibのplt.show()とcv2.imshow()の違いとは?画像表示の差をわかりやすく解説
Pythonで画像を扱う際、MatplotlibとOpenCV(cv2)はどちらも画像を多次元のNumPy配列として読み込みます。しかし、両者には重要な違いがあります。Matplotlibのimreadメソッドは画像を赤(R)・緑(G)・青(B)の順(RGB順)のNumPy配列として読み込み、imshowで画面に表示します。一方、OpenCVのcv2.imreadも同様に多次元NumPy配列として画像を読み込みますが、チャンネルの並びが逆順(BGR順)になっている点が最大の特徴です。この違いを理解せずに使うと、cv2で読み込んだ画像をMatplotlibで表示した際に色が反転して見えるという現
-
Matplotlibで凡例のマーカーとラベルの間隔を調整する方法
Matplotlibで凡例(legend)のマーカーとラベルの間隔を調整したい場合は、legend()メソッドのlabelspacing引数を使用します。この引数に数値を指定することで、凡例内の各行(マーカーとラベル)同士の縦方向のスペースを自由に広げたり狭めたりできます。手順Label 1、Label 2、Label 3というラベルを付けて、3本の線をプロットします。凡例のマーカーとラベルの間隔を調整するための変数spaceを定義します。legend()メソッドの引数にlabelspacing=spaceを指定して呼び出します。図を表示するには、plt.show()メソッドを使用します。サン