Python
 Computer >> コンピューター >  >> プログラミング >> Python

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)(台形則による積分)を併用すると、塗りつぶした領域の面積を計算することもできます。

出力結果

Matplotlibで2つの曲線間の領域を塗りつぶして可視化する方法

上記のコードを実行すると、放物線 y = x² と直線 y = x の間の領域が、半透明のグレーに縦線のハッチングパターンで塗りつぶされたグラフが表示されます。

  1. 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で表示した際に色が反転して見えるという現

  2. Matplotlibで凡例のマーカーとラベルの間隔を調整する方法

    Matplotlibで凡例(legend)のマーカーとラベルの間隔を調整したい場合は、legend()メソッドのlabelspacing引数を使用します。この引数に数値を指定することで、凡例内の各行(マーカーとラベル)同士の縦方向のスペースを自由に広げたり狭めたりできます。手順Label 1、Label 2、Label 3というラベルを付けて、3本の線をプロットします。凡例のマーカーとラベルの間隔を調整するための変数spaceを定義します。legend()メソッドの引数にlabelspacing=spaceを指定して呼び出します。図を表示するには、plt.show()メソッドを使用します。サン