NumPy使用3个变量进行直方图的制作

8
请您谅解,如果这是一个重复的问题,我已经尽力寻找解决方案。虽然这似乎很简单,但我找不到任何适用的东西。 我正在尝试使用来自3个1-D numpy数组的数据生成一个图(例如热图)。数据基本上排列如下:
x_axis = ([1, 4, 6])
y_axis = ([2, 5, 7])
z_axis = ([5, 8, 9])

我的数据集实际上要大得多...有时会有成千上万的条目。

因此,我有与x坐标和y坐标相关联的z轴值...例如,点(1,2)的值为5。

我想做的就是将这个数据以所指定的bin大小的平均值形式绘制出来,并像热图一样进行颜色编码。因此,例如,如果我有10个数据点落在一个给定的bin中,它们的z值将被平均化,该值将落在某个颜色光谱上。

感谢您提供的任何帮助。

1个回答

7

来自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 count是可以轻松更改的。

正如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

如果他想要平均值而不是总和,你需要再次运行 np.histogram2d,但这次不使用 weights 关键字参数来获取每个箱中的计数,并绘制两个数组的除法。 - Jaime
这是一个很好的观点,我没有完全按照那种方式阅读问题。我认为他是在表达数组应该针对颜色进行归一化,但 plt 无论如何都不关心。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接