使用散点数据集生成热图

新手上路,请多包涵

我有一组 X、Y 数据点(大约 10k),它们很容易绘制为散点图,但我想将其表示为热图。

我查看了 Matplotlib 中的示例,它们似乎都已经从热图单元值开始生成图像。

有没有一种方法可以将一堆不同的 x、y 转换为热图(x、y 频率较高的区域会“更暖”)?

原文由 greye 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

如果你不想要六边形,你可以使用 numpy 的 histogram2d 函数:

 import numpy as np
import numpy.random
import matplotlib.pyplot as plt

# Generate some test data
x = np.random.randn(8873)
y = np.random.randn(8873)

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

plt.clf()
plt.imshow(heatmap.T, extent=extent, origin='lower')
plt.show()

这制作了一个 50x50 的热图。如果你想要 512x384,你可以把 bins=(512, 384) 放在对 histogram2d 的调用中。

例子:Matplotlib 热图示例

原文由 ptomato 发布,翻译遵循 CC BY-SA 3.0 许可协议

Matplotlib 词典中,我认为你想要一个 hexbin 图。

如果您不熟悉这种类型的图,它只是一个 _二元直方图_,其中 xy 平面由规则的六边形网格镶嵌而成。

因此,从直方图中,您可以只计算落在每个六边形中的点数,将绘图区域离散化为一组 _窗口_,将每个点分配给这些窗口中的一个;最后,将窗口映射到一个 颜色数组 上,您就得到了一个 hexbin 图。

虽然不像圆形或正方形那样常用,但六边形是装箱容器几何形状的更好选择是直观的:

  • 六边形具有 _最近邻对称性_(例如,方块不具有,例如, 正方形边界 的点到该正方形内部的点的距离并非处处相等)和

  • 六边形是提供 规则平面镶嵌 的最高 n 多边形(即,您可以安全地用六边形瓷砖重新建模厨房地板,因为完成后瓷砖之间不会有任何空隙——不适用于所有其他更高的 n,n >= 7,多边形)。

Matplotlib 使用术语 hexbin 图;(AFAIK) R 的所有 绘图库 也是如此;我仍然不知道这是否是此类图的普遍接受的术语,尽管我怀疑这很可能是因为 hexbin 很短对于 _六角分箱_,它描述了准备显示数据的基本步骤。)


 from matplotlib import pyplot as PLT
from matplotlib import cm as CM
from matplotlib import mlab as ML
import numpy as NP

n = 1e5
x = y = NP.linspace(-5, 5, 100)
X, Y = NP.meshgrid(x, y)
Z1 = ML.bivariate_normal(X, Y, 2, 2, 0, 0)
Z2 = ML.bivariate_normal(X, Y, 4, 1, 1, 1)
ZD = Z2 - Z1
x = X.ravel()
y = Y.ravel()
z = ZD.ravel()
gridsize=30
PLT.subplot(111)

# if 'bins=None', then color of each hexagon corresponds directly to its count
# 'C' is optional--it maps values to x-y coordinates; if 'C' is None (default) then
# the result is a pure 2D histogram

PLT.hexbin(x, y, C=z, gridsize=gridsize, cmap=CM.jet, bins=None)
PLT.axis([x.min(), x.max(), y.min(), y.max()])

cb = PLT.colorbar()
cb.set_label('mean value')
PLT.show()

在此处输入图像描述

原文由 doug 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题