使用MatPlotLib生成颜色的权重贴图?

时间:2013-10-11 09:20:41

标签: python matplotlib

我有一张地图,我希望覆盖颜色权重贴图。权重贴图有m x n 1m x 1m个框。我有很多分,每个点都有重量。通过总计落入该框中的所有点的权重来计算框的权重。

现在根据他们的意愿,每个盒子根据其重量填充一定的颜色。

期望的结果类似于the one shown here,但

  1. 在我的情况下,地图和重量图必须很好地叠加。
  2. 而不是频率,应使用已计算的权重来指定颜色。
  3. 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果我理解正确:你有一组点,每个点都有一个x坐标,一个y坐标和一个与之相关的权重。

您链接的问题中的答案已经完全描述了您想要做的事情。唯一的区别是您可以使用weights=参数来获取每个bin中的加权计数。

例如,您可以使用

wcounts, xedges, yedges = np.histogram2d(x, y, weights=w)

获取加权直方图,然后执行

extent = xedges[0], xedges[-1], yedges[0], yedges[-1]
imshow(wcounts, extent=extent, alpha=0.5)

显示它。

我不知道你在'地图'上覆盖它是什么意思,但你可以使用alpha=参数imshow()来使图像半透明(或者你可以画您的“地图”位于图片顶部。)

同样,你可以做到

hexbin(x, y, C=w, alpha=0.5)

绘制加权六边形分箱图,在这种情况下使用C=参数指定权重,并再次使用alpha=来控制图的透明度。

修改

好的,所以你想在指定的bin位置网格上计算直方图。假设您的x坐标位于0m和100m之间,您的y坐标介于0m和75m之间,并且您希望每个bin都是1m乘1m。您可以将指定x和y中的bin边的数组元组传递给np.histogram2d()

# remember that for n bins there are n+1 bin edges
x_edges = np.linspace(0, 100, 101)
y_edges = np.linspace(0, 75, 76)

wcounts = np.histogram2d(x, y, weights=w, bins=(x_edges, y_edges))[0]

现在wcounts是一个(100, 75)数组,每个元素代表一个1米乘1米的加权计数。