ノート
完全なサンプルコードをダウンロードするには、ここをクリックしてください
行間の領域を埋める#
fill_between
この例は、 を使用して 2 つの線の間の領域に色を付ける方法を示しています。
import matplotlib.pyplot as plt
import numpy as np
基本的な使い方#
パラメータy1とy2は、指定された 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()
例: 信頼区間#
の一般的な用途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 秒)