python - 具有 3 个变量的 numpy 直方图

标签 python numpy matplotlib histogram heatmap

如果这是一个重复的问题,请原谅我,我已经尽力寻找解决方案。这看起来非常简单,但我似乎找不到任何适用的东西。

我正在尝试使用来自 3 个一维 numpy 数组的数据生成一个图(如热图)。数据基本整理如下:

x_axis = ([1, 4, 6])
y_axis = ([2, 5, 7])
z_axis = ([5, 8, 9])

(我的数据集实际上要大得多......有时有数十万个条目)。

所以我得到了 z_axis 值,每个值都与 x 坐标和 y 坐标相关联...例如,点 (1,2) 具有与之相关联的值 5。

我想要做的就是以这样一种方式绘制它,即根据我指定的任何 bin 大小平均 z 值,并像热图一样进行颜色编码。因此,例如,如果我有 10 个数据点落在给定的 bin 内,它们的 z 值将被平均并且该值将落在色谱上的某个位置。

感谢您提供的任何帮助。

最佳答案

来自 np.histogram2d :

import matplotlib.pyplot as plt
H, xedges, yedges =np.histogram2d(x_axis, y_axis, bins=10, weights=z_axis) 
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]
plt.imshow(H, extent=extent, interpolation='nearest')
plt.colorbar()
plt.show()

Bin 计数很容易改变。

正如 Jamie 在评论中指出的,如果您想要每个 bin 中的点的平均值:

numbins=10
H, xedges, yedges =np.histogram2d(x_axis, y_axis, bins=numbins, weights=z_axis) 
count, x, y =np.histogram2d(x_axis, y_axis, bins=numbins) 
H/=count

关于python - 具有 3 个变量的 numpy 直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529726/

相关文章:

python - Odoo继承日历并将公共(public)假期添加到日历 View 中

python - 将 MATLAB 的 interp1 转换为 Python interp1d

使用 IF 语句的 Python 用户定义函数不起作用

python - 将数组的 numpy 数组转换为 2D numpy 数组

python - 连接两个一维 NumPy 数组

python - 在 Odoo 8 上设置树字体

python - 相当于 tensorflow 中的 np.add.at

python - 使用 matplotlib 创建表,使用 float 创建列,使用字符串创建其他列?

python - 在 python 中的 3D 表面上覆盖纹理

python-3.x - PyCharm 导入错误 : Claims 'matplotlib' is not a package, 但在 IDLE 中成功运行