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

Matplotlibで対数スケールのグラフにおける曲線間の領域を塗りつぶす方法

Matplotlibでは、fill_between()メソッドと対数スケール(log scale)を組み合わせることで、2つの曲線の間の領域を見やすく塗りつぶすことができます。ここでは、その具体的な手順をコード例とともに解説します。

実装の手順

  • 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
  • numpyを使用してxy1y2のデータポイントを作成します。
  • plot()メソッドを使ってxy1y2のデータポイントをプロットします。
  • fill_between()メソッドで2つの曲線の間の領域を塗りつぶします。
  • xscale()およびyscale()メソッドで軸のスケールを対数に設定します。
  • legend()メソッドでグラフに凡例を配置します。
  • show()メソッドを使用して図を表示します。

コード例

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.linspace(-1, 1, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label="y=sin(x)")
plt.plot(x, y2, label="y=cos(x)")

plt.fill_between(x, y1, y2, color="red", label="Area", alpha=0.3)

plt.xscale('log')
plt.yscale('log')

plt.legend(loc='lower right')

plt.show()

コードのポイント

np.linspace(-1, 1, 100)により、-1から1までの範囲に100個の等間隔データポイントを生成しています。sin関数とcos関数の値をそれぞれy1、y2として計算し、2本の曲線を描画した後、fill_between(x, y1, y2)で両曲線に挟まれた領域を半透明の赤色(alpha=0.3)で塗りつぶしています。

また、plt.xscale('log')plt.yscale('log')によってX軸・Y軸の両方を対数スケールに設定している点が重要です。これにより、値の変化幅が大きいデータでも視覚的にバランスの取れた表示が可能になります。なお、対数スケールでは0や負の値は正しく表示されないため、必要に応じてデータ範囲の調整を行ってください。

出力結果

Matplotlibで対数スケールのグラフにおける曲線間の領域を塗りつぶす方法

このように、わずか数行のコードで対数スケールのグラフ上に曲線間の領域を美しく塗りつぶすことができます。科学技術計算やデータ分析の可視化において非常に便利なテクニックなので、ぜひ活用してみてください。

  1. MatplotlibでX軸の下に脚注を追加する方法をわかりやすく解説

    Matplotlibで作成したグラフのX軸の下に脚注(注釈)を追加したい場合、figtext()メソッドやtext()メソッドを使用することで簡単に実現できます。本記事では、figtext()メソッドを使った具体的な手順をサンプルコードとともに紹介します。脚注を追加する手順figureサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用してx座標とy座標のデータポイントを作成します。作成したx・yデータポイントをプロットします。脚注を配置するために、figtext()メソッドにx・yの位置情報とboxプロパティ(枠線や背景色などのスタイル)を指定して呼び出

  2. Pythonで対数ヒストグラムを作成する方法【matplotlib活用】

    Pythonのmatplotlibを使って対数(ログ)スケールのヒストグラムを作成するには、hist()メソッドの引数にlog=Trueを指定します。これにより、縦軸が対数スケールで表示され、値の範囲が大きく異なるデータも見やすく可視化できます。作成手順数値のリスト(配列)を用意します。density=Trueを指定して、正規化されたヒストグラムをプロットします。図を表示するには、show()メソッドを呼び出します。サンプルコードimport numpy as np import matplotlib.pyplot as plt plt.rcParams[figure.figsize] = [