【发布时间】:2021-10-03 13:25:43
【问题描述】:
我有一些数据作为 numpy 数组 x, y, v,如下面的代码所示。
这实际上是 x-y 平面上尘埃粒子velocity (v) 的虚拟数据。
我已将我的数据分为 4 个 bin,对于每个 bin,我计算了每个 bin 中条目的平均值并制作了一张热图。
现在我要做的是在每个 bin 中制作v 的直方图/分布,以0 作为直方图的中心。
我不想再绘制平均值,只想将我的数据划分到与此代码相同的 bin 中,并且我想为每个 bin 生成 bin 中值的直方图。
我该怎么做?
我认为这是一种模拟气体粒子发射线光谱的方法。任何帮助表示赞赏!谢谢!
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
x = np.array([-10,-2,4,12,3,6,8,14,3])
y = np.array([5,5,-6,8,-20,10,2,2,8])
v = np.array([4,-6,-10,40,22,-14,20,8,-10])
x_bins = np.linspace(-20, 20, 3)
y_bins = np.linspace(-20, 20, 3)
H, xedges, yedges = np.histogram2d(x, y, bins = [x_bins, y_bins], weights = v)
pstat = stats.binned_statistic_2d(x, y, v, statistic='mean', bins = [x_bins, y_bins])
plt.xlabel("x")
plt.ylabel("y")
plt.imshow(pstat.statistic.T, origin='lower', cmap='RdBu',
extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])
plt.colorbar().set_label('mean', rotation=270)
编辑:请注意,我的原始数据非常庞大。我的 x、y、v 数组非常大,我使用的是 30x30 网格,也就是说,不仅仅是 4 个象限,而是 900 个箱。我可能还需要增加垃圾箱号。因此,我们希望找到一种方法,将“v”数据自动划分到规则间隔的 bin 中,然后能够绘制每个 bin 中“v”数据的直方图。
【问题讨论】:
标签: python numpy histogram bin spectrum