将散布数据转换为带有等于标准偏差的误差条的分箱数据

时间:2013-03-21 20:01:26

标签: python numpy histogram scatter

我有一堆数据分散x,y。如果我想根据x对它们进行分类并将误差条等于它们的标准偏差,我将如何去做呢?

我在python中唯一知道的是循环遍历x中的数据并根据bin(max(X)-min(X)/ nbins)对它们进行分组,然后遍历这些块以找到std。我确信有更快的方法可以用numpy做到这一点。

我希望它看起来类似于“http://matplotlib.org/examples/pylab_examples/errorbar_demo.html

中的”vert symmetric“

2 个答案:

答案 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()

enter image description here

答案 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()

我希望它有所帮助。如果您有任何疑问或不清楚,请与我们联系。