Python:XY密度图

Python: XY density plot

我有一个包含以下字段的数据文件:

Index    X.coor     Y.coor    Status    Height   Census
1        197.10001  456.89999 1         696      1
2        84.20000   74.80000  0         356      1
3        282.70001  177.50000 1         439      1
...
999      427.70001  418.10001 0         543      1

这些索引表示地理笛卡尔 X-Y 网格上的点,如下所示:

我想在假设的 space(面向对象)中绘制点并将地图划分为我指定的维度。例如,上面的网格尺寸为 7x7。然后我想遍历笛卡尔网格上的每个正方形并计算该区域中点的密度。

Density = number of points in square / area of the square

笛卡尔地图上的点位置是固定的。正方形的面积将根据我划分笛卡尔 X-Y 网格的维度而有所不同。你知道任何允许我这样做的 Python 模块吗?我想用 OOP 来做这个,这样我就可以跟踪方块中每个点的其他属性。

我认为我可以做到这一点的一种方法是获取 X 坐标和 Y 坐标的最大值和最小值。这将给我 4 个数据点,我可以用它们来形成一个矩形并计算面积。然后我编写了一个函数,将矩形划分为 X x Y 子区域。到目前为止的例子,如果我想要一个 8 x 16 的网格,我将矩形的长度除以 6,宽度除以 16 以获得不同大小的正方形。最后我写了一个循环来计算笛卡尔网格每个区域的密度。我可以将每个区域的密度存储在一个矩阵中。

是否有 Python 模块允许我这样做?

您可以查看 NumPy 的 histogram2d 并将其用作

import numpy as np
np.histogram2d(x, y, bins=(nx,ny), normed=True)

其中 nx = ny = 7 在您的演示案例中。

以随机分布的 x,y 坐标为例:

x = np.random.random(1000)
y = np.random.random(1000)
nx, ny = 7, 7
H, _, _ = np.histogram2d(x, y, bins=(nx,ny), normed=True)
pylab.imshow(H, interpolation='nearest')
pylab.colorbar()
pylab.show()