我有一堆数据分散x,y。如果我想根据x对它们进行分类并将误差条等于它们的标准偏差,我将如何去做呢?
我在python中唯一知道的是循环遍历x中的数据并根据bin(max(X)-min(X)/ nbins)对它们进行分组,然后遍历这些块以找到std。我确信有更快的方法可以用numpy做到这一点。
我希望它看起来类似于“http://matplotlib.org/examples/pylab_examples/errorbar_demo.html
中的”vert symmetric“答案 0 :(得分:13)
您可以使用np.histogram
对数据进行分页。我正在重复使用this other answer中的代码来计算分箱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()
答案 1 :(得分:0)
没有循环! Python允许您尽可能避免循环。
我不确定是否得到了所有数据,你对所有数据都有相同的x向量,并且对应于不同的测量数量的许多y向量没有?并且您希望将数据绘制为“vert symmetric”,每个x的平均值为y,每个x的标准偏差为误差条?
然后很容易。我假设你有一个M-long x向量和N个y数据的N * M数组已经加载了变量名x和y。
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()
我希望它有所帮助。如果您有任何疑问或不清楚,请与我们联系。