1

matplotlibでエラーバーを使用してこの興味深い問題に遭遇しました。2つのリストがあります。0から999の範囲の整数値のリストである「反復」。「平均」は、実際の負の値を持つ1000サイズのリストです。

「yerr」属性を指定しない場合、次のようになります。

エラーバー(反復、平均)

img1

ただし、yerr属性を指定し、0に設定すると、次のようになります。

エラーバー(反復、平均、yerr = 0)

img2

両方の写真が同じである必要があることは私には明らかなようですが、2番目の写真は小さな水平線で構成されており、最初の写真は連続しているように見えます。

問題は、配列をyerrとして渡すときに発生します(サイズ:1000、画像を過密にしないために、index%50 == 0の実際の標準誤差値を除いてすべての値を0に設定します)。

エラーバー(反復、平均、yerr = stderr)

メインラインが連続している画像(最初の画像のように)を取得したいのですが、代わりに2番目の画像のように乱雑な画像を取得します。ラインスタイルパラメータの変更など、さまざまなことを試しましたが、それでも最初の画像のようなものを取得し続けます(50ステップ間隔ごとにエラーバーが表示されます)

私は何か間違ったことをしていますか?私がやりたいことをすることは可能ですか?

アップデート1

Davidがコメントで述べているように、stderrのデフォルトの形状が0であるため、水平線が表示されます。値0は、エラーバーを表さないと思いました。したがって、0に設定した場所にエラーバーをプロットすることを避ける必要があるだけです(エラーバーは50、100、150、200、250 ... 1000のみ)。

アップデート2(および解決済み)

ここに、Davidが提案したソリューションを追加します。

# plot all points without error bars
plot(iterations, average)
# plot errorbars for every 50th point
errorbar(iterations[::50], average[::50], yerr=stderr[::50], linestyle='None')

各ヤーバーの間に線がプロットされないように、linestyle='None'を追加しました。

どうもありがとう!

4

1 に答える 1

0

さて、あなたはエラーバーを求めました、そしてあなたはそれらを手に入れました。yerr逆に、引数リストで指定しない場合、エラーバーのドキュメントには、「yerrがNoneでない場合、垂直エラーバーがプロットされる」と記載されています。

errorbar使用と設定の背後にある目的はわかりませんyerr=0が、yerr=0垂直方向の延長がゼロのエラーバーのスタイルのため、エラーバーは小さな水平線として表示されます。

多くのデータポイントのエラーを示したい場合は、エラー領域を示す影付きの背景を使用するのがおそらく最善です。これは、関数で実現できますfill_between

編集:コメントの洗練された質問で、プロットコードは次のようになります

# plot all points without error bars
plot(iterations, average)
# plot errorbars for every 50th point
errorbar(iterations[::50], average[::50], yerr=error[::50])
于 2013-03-22T13:48:02.250 に答える