6

x、yに散らばった大量のデータがあります。これらを x に従ってビン化し、標準偏差に等しいエラーバーを配置したい場合、どうすればよいでしょうか?

Pythonで私が知っている唯一のことは、xのデータをループし、ビン(max(X)-min(X)/ nbins)に従ってそれらをグループ化し、それらのブロックをループしてstdを見つけることです。numpyでこれを行うより速い方法があると確信しています。

http://matplotlib.org/examples/pylab_examples/errorbar_demo.htmlの「vert symmetric」に似たものにしたい

4

2 に答える 2

21

でデータをビン化できますnp.histogramこの他の回答のコードを再利用して、binned の平均と標準偏差を計算していますy

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.sin(2*np.pi*x) + 2 * x * (np.random.rand(100)-0.5)
nbins = 10

n, _ = np.histogram(x, bins=nbins)
sy, _ = np.histogram(x, bins=nbins, weights=y)
sy2, _ = np.histogram(x, bins=nbins, weights=y*y)
mean = sy / n
std = np.sqrt(sy2/n - mean*mean)

plt.plot(x, y, 'bo')
plt.errorbar((_[1:] + _[:-1])/2, mean, yerr=std, fmt='r-')
plt.show()

ここに画像の説明を入力

于 2013-03-21T22:48:32.833 に答える
0

ループなし!Pythonを使用すると、ループを可能な限り回避できます。

すべてを取得できるかどうかはわかりません。すべてのデータに対して同じxベクトルがあり、異なる測定値に対応する多くのyベクトルがあります。そして、データを「垂直対称」としてプロットし、各xのyの平均値と各xの標準偏差をエラーバーとしてプロットしますか?

それなら簡単です。変数名xとyにすでにロードされているyデータのNセットのM-longxベクトルとN*M配列があると仮定します。

import numpy as np
import pyplot as pl

error = np.std(y,axis=1)
ymean = np.mean(y,axis=1)
pl.errorbar(x,ymean,error)
pl.show()

お役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-03-21T21:04:23.307 に答える