はじめに
matplotlibのplt.fill_between関数は2つの線の間の領域を塗りつぶすための機能ですが、データにギャップがあったり線が交差する場合に塗りつぶしが不完全になることがあります。この記事では、interpolate=Trueオプションを使用して、このような問題を解決し、より美しい塗りつぶしを実現する方法を解説します。サンプルコードと比較例を交えながら、実際の効果を示します。
コード

解説
モジュールのインポート
バージョン
データの生成
xを-0.25から1.75までの0.25刻みの配列として定義し、np.sin(2 * np.pi * x)を用いてsin波のy1データを作成する。さらに、y1をπ/2だけ位相をずらしたデータをy2として生成する。
上の図(interpolate=Falseの場合)
fill_betweenでwhere=(y1 < y2), color=’C2’を設定すると、y1<y2の部分を色”C2″で塗りつぶせます。この判定はデータポイントでのみ行われるため、データが存在しない部分では、実際にy1<y2であっても塗りつぶされない。
下の図(interpolate=Trueの場合)
fill_betweenでinterpolate=Trueを使用すると、where条件が変化するx値を補間し、塗りつぶし領域をその部分まで拡張できます。

まとめ
matplotlibのfill_between
関数でinterpolate=True
オプションを使用することで、交差する線の間の領域をより綺麗に塗りつぶすことができます。特にデータポイントが少ない場合や急激な変化がある場合に有効です。これにより、より見やすく、情報量の多いグラフを作成することができます。
参考
Filling the area between lines — Matplotlib 3.2.1 documentation
matplotlib.axes.Axes.fill_between — Matplotlib 3.2.1 documentation
コメント