2015-04-03 69 views
0

我有以下字段的数据文件:的Python:XY密度图

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 

这些指标代表了一个地理笛卡尔XY网格点是这样的:

enter image description here

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

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

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

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

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

回答

3

你可能期待与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() 

enter image description here

+0

在我原来的职位,我想计算点的密度在网格的每个单元,并将它们存储在一个矩阵以便我可以稍后将它们输出到文件。我想出了我采用的方法。你给出的答案是对这些数据的一个很好的补充和可视化。 – cooldood3490 2015-04-04 23:30:39

+0

很高兴帮助! – xnx 2015-04-05 00:34:49