-1

我有一张地图,我希望在其上叠加一个颜色权重图。权重图有m x n 1m x 1m框。我有很多点,每点都有分量。一个框的权重是通过将落入该框的所有点的权重相加来计算的。

现在根据他们的遗嘱,每个盒子根据重量填充某种颜色。

期望的结果与此处显示的结果相似,但是

  1. 在我的情况下,地图和权重图必须很好地覆盖。
  2. 应该使用已计算的权重而不是频率来分配颜色。

我该怎么做?

4

1 回答 1

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 x 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)数组,每个元素表示 1m x 1m 箱中的加权计数。

于 2013-10-11T11:42:15.320 回答