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()
我有一个包含以下字段的数据文件:
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()