我会使用
np.digitize为你做垃圾箱排序.这样,您可以轻松应用任何功能并设置您感兴趣的范围.
import numpy as np
import pylab as plt
N = 2000
total_bins = 10
# Sample data
X = np.random.random(size=N)*10
Y = X**2 + np.random.random(size=N)*X*10
bins = np.linspace(X.min(),X.max(), total_bins)
delta = bins[1]-bins[0]
idx = np.digitize(X,bins)
running_median = [np.median(Y[idx==k]) for k in range(total_bins)]
plt.scatter(X,Y,color='k',alpha=.2,s=2)
plt.plot(bins-delta/2,running_median,'r--',lw=4,alpha=.8)
plt.axis('tight')
plt.show()
作为该方法的多功能性的一个例子,让我们添加每个bin标准偏差给出的错误列:
running_std = [Y[idx==k].std() for k in range(total_bins)]
plt.errorbar(bins-delta/2,running_median,
running_std,fmt=None)