行間の領域を埋める#

fill_betweenこの例は、 を使用して 2 つの線の間の領域に色を付ける方法を示しています。

import matplotlib.pyplot as plt
import numpy as np

基本的な使い方#

パラメータy1y2は、指定された y 値での水平境界を示すスカラーにすることができます。y1のみが指定された場合、y2はデフォルトで 0 になります。

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 0.8 * np.sin(4 * np.pi * x)

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))

ax1.fill_between(x, y1)
ax1.set_title('fill between y1 and 0')

ax2.fill_between(x, y1, 1)
ax2.set_title('fill between y1 and 1')

ax3.fill_between(x, y1, y2)
ax3.set_title('fill between y1 and y2')
ax3.set_xlabel('x')
fig.tight_layout()
y1 と 0 の間を塗りつぶし、y1 と 1 の間を塗りつぶし、y1 と y2 の間を塗りつぶす

例: 信頼区間#

の一般的な用途fill_betweenは、信頼帯の表示です。

fill_betweenカラー サイクルの色を塗りつぶしの色として使用します。塗りつぶし領域に適用すると、これらは少し強いかもしれません。したがって、多くの場合、 alphaを使用して領域を半透明にして色を明るくすることをお勧めします。

N = 21
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1,  9.9, 13.9, 15.1, 12.5]

# fit a linear curve an estimate its y-values and their error.
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
                          (x - x.mean())**2 / np.sum((x - x.mean())**2))

fig, ax = plt.subplots()
ax.plot(x, y_est, '-')
ax.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
ax.plot(x, y, 'o', color='tab:brown')
デモの間を埋める
[<matplotlib.lines.Line2D object at 0x7f2d0108d030>]

水平領域を選択的に塗りつぶす#

塗りつぶす x 範囲を指定できるパラメーターxと同じサイズのブール配列です。

連続するTrueシーケンスの x 範囲のみが埋められます。その結果、隣接するTrue値とFalse値の間の範囲が満たされることはありません。これは、データ ポイントが連続した量を表す必要がある場合、望ましくないことがよくあります。interpolate=Trueしたがって、上記の効果が目立たないようにデータ ポイントの x 距離が十分に細かい場合を除き、設定することをお勧めします。補間は、 where条件が変化する実際の x 位置を近似し、 そこまで塗りつぶしを拡張します。

x = np.array([0, 1, 2, 3])
y1 = np.array([0.8, 0.8, 0.2, 0.2])
y2 = np.array([0, 0, 1, 1])

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

ax1.set_title('interpolation=False')
ax1.plot(x, y1, 'o--')
ax1.plot(x, y2, 'o--')
ax1.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
ax1.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)

ax2.set_title('interpolation=True')
ax2.plot(x, y1, 'o--')
ax2.plot(x, y2, 'o--')
ax2.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
                 interpolate=True)
ax2.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3,
                 interpolate=True)
fig.tight_layout()
補間=偽、補間=真

ノート

y1またはy2がマスクされた配列の場合、同様のギャップが発生します。欠損値は近似できないため、この場合補間は効果がありません。マスクされた値の周囲のギャップは、マスクされた値の近くにデータ ポイントを追加することによってのみ縮小できます。

軸全体の水平領域を選択的にマーキング#

同じ選択メカニズムを適用して、軸の垂直方向の高さ全体を埋めることができます。y 制限から独立させるために、データ座標の x 値と軸座標の y 値を解釈する変換を追加します。

次の例では、y データが特定のしきい値を超えている領域をマークします。

fig, ax = plt.subplots()
x = np.arange(0, 4 * np.pi, 0.01)
y = np.sin(x)
ax.plot(x, y, color='black')

threshold = 0.75
ax.axhline(threshold, color='green', lw=2, alpha=0.7)
ax.fill_between(x, 0, 1, where=y > threshold,
                color='green', alpha=0.5, transform=ax.get_xaxis_transform())
デモの間を埋める
<matplotlib.collections.PolyCollection object at 0x7f2d00e640a0>

参考文献

この例では、次の関数、メソッド、クラス、およびモジュールの使用が示されています。

スクリプトの合計実行時間: ( 0 分 1.875 秒)

Sphinx-Gallery によって生成されたギャラリー