我得到了2列数据框(体积和价格),并且我想根据volume列创建20个bin,并且数据量相等在每个垃圾箱里。每个bin中y值的python直方图与相同的数据数量(x)
I.e.如果我得到了音量= [1,6,8,2,6,9,3,6]和4个分档,我想将数据剪切到第一个分档:1:2,2:3:6,3:6:如图8所示,第四:8:9
然后绘制平均相应y值的直方图
我的数据:
df = pd.DataFrame{'Volume_norm' : [0.92, 2.31, 0.92, 0.018, 0.0454, 0.43, 0.43,0.943,0.543,0.543,0.43] , 'Price' : [2, 4, 5, 1, 5, 1, 2, 4, 2, 3, 6]}
我的代码:
x = sorted(FilteredTrade_buy['Volume_norm'])
bins=x[0::int(len(x)/50)]
n, bins, patches = plt.hist(x, bins=bins)
plt.show()
这只给我x(音量)的总和而不是平均y的价格
===============更新代码=========== ===
df = pd.DataFrame({'Volume_norm' : [0.92,2.31,0.92,0.018,0.0454,0.43,0.43,0.943,0.543,0.543,0.43],
'Price' : [2,4,5,1,5,1,2,4,2,3,6]})
x = df['Volume_norm']
y = df['Price']
nbins = 5
binsize = x.size // nbins
indices = x.argsort()
means = np.zeros((nbins,))
xaxis = np.zeros((nbins,))
for k in range(nbins):
xaxis[k] = x[indices[i * binsize : (i + 1) * binsize]].mean()
for i in range(nbins):
means[i] = y[indices[i * binsize : (i + 1) * binsize]].mean()
plt.loglog(xaxis,means,'r-')
plt.show()
但x轴返回我:阵列([0.9315,0.9315,0.9315,0.9315,0.9315])
此外,才有可能使用 '计数器' 计数数据的数目在每个区间?
2017-09-26
bing
+0
请问您可以将文本添加为文本吗?从图片复制数据并不容易。 –
+0
等一下,所以你想要用'x'填充直方图的高度,以反映平均的'y'值?这根本不是直方图,所以你不应该使用'hist'函数,它假设“直方图”的标准定义。也许只需计算'y'平均值并用plt.plot()调用 –
+0
编辑的问题(日期= df)绘制数据。是的,我试图在plt.plot中的数据,但它的结果是一些边界/边缘是相同的,因此'切'功能不起作用 –