2015-04-03 34 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