エラーバーではなく陰影領域としてyerr / xerrをプロット


142

matplotlibで、エラーバーではなく陰影付きの領域としてエラーをどのようにプロットしますか?

例えば:

ここに画像の説明を入力してください

のではなく

ここに画像の説明を入力してください


1
トッププロットはどのように生成されましたか?
MichaelSB

回答:


151

サンプルグラフのポイント間のスムーズな補間を無視して(手動で補間を行う必要がある場合や、データの解像度が高い場合)、以下を使用できますpyplot.fill_between()

from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape)
y += np.random.normal(0, 0.1, size=y.shape)

plt.plot(x, y, 'k-')
plt.fill_between(x, y-error, y+error)
plt.show()

ここに画像の説明を入力してください

matplotlibの例も参照してください。


1
完璧です。ええ、滑らかな線の例を含めるつもりはありませんでした。
オースティンリチャードソン

これを影付きのバンドの代わりに影付きのボックスを表示する方法はありますか?私の最初の本能は乱用lwすることでしたが、軸と同じ単位を使用していないようです。
ベンジャミンバニエ2013

@BenjaminBannierどういう意味かよくわかりません。各ポイントにボックスを描画するように聞こえます。その高さはエラーバーの高さと同じですが、幅は隣接するボックスを接続(タッチ)する幅でなければなりません。あれは正しいですか?

1
@EL_DON黒い線+青い帯のある凡例が必要で、テキストは「データ+ 1シグマエラー領域」のようなものですか?

1
@Allanあなたが持っている唯一のエラーバーが水平である場合、あなたはおそらくあなたの実際の問題の軸を反転する必要があります(したがって図も同様です)。通常、独立変数は、エラーバーがない(または非常に小さい)変数です。あなたはあなたのデータ変数を交換することによって、チートすることができるかもしれません、そして、matplotlibで、同様に軸を交換してください。

131

これは基本的にEvertによって提供される同じ回答ですが、いくつかのクールなオプションを自慢して見せるために拡張されましたfill_between

ここに画像の説明を入力してください

from matplotlib import pyplot as pl
import numpy as np

pl.clf()
pl.hold(1)

x = np.linspace(0, 30, 100)
y = np.sin(x) * 0.5
pl.plot(x, y, '-k')


x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape) +.1
y += np.random.normal(0, 0.1, size=y.shape)

pl.plot(x, y, 'k', color='#CC4F1B')
pl.fill_between(x, y-error, y+error,
    alpha=0.5, edgecolor='#CC4F1B', facecolor='#FF9848')

y = np.cos(x/6*np.pi)    
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#1B2ACC')
pl.fill_between(x, y-error, y+error,
    alpha=0.2, edgecolor='#1B2ACC', facecolor='#089FFF',
    linewidth=4, linestyle='dashdot', antialiased=True)



y = np.cos(x/6*np.pi)  + np.sin(x/3*np.pi)  
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#3F7F4C')
pl.fill_between(x, y-error, y+error,
    alpha=1, edgecolor='#3F7F4C', facecolor='#7EFF99',
    linewidth=0)



pl.show()

1
わずかに良い解決策:stackoverflow.com/questions/43064524/...
Shitalシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.