热图Python

时间:2014-12-16 05:55:15

标签: python matplotlib

我正在尝试绘制热图。我使用的数据有Geo坐标和时间(以秒为单位)。数据的性质是边缘在某个地理位置相遇并且花费一些时间连接。考虑到地理位置和边缘相互连接的时间,我需要绘制热图。

边缘相互连接,它们碰巧在几秒钟内连接了一段时间,此时它们处于某个地理位置。我需要绘制热图来确定人群密度和在该位置花费的时间。

col[0]col[1]是边col[2]时间连接col[3]col[7]是地理坐标。

0006251fda59 00904bc9dd3c 11.0 821141 439384 821141 439384
0004233019fe 0004233cd875 23.0 818612 439965 818612 439965
0004233019fe 000423aa3632 1572.0 818612 439965 818612 439965
0004233019fe 000423dfbc68 200.0 818612 439965 818612 439965
0004233019fe 000423fbb938 648.0 818612 439965 818612 439965
0004233019fe 000423fcb610 1999.0 818612 439965 818612 439965
00022d1aa531 00028a2d154f 10.0 821007 438860 821007 438860
00022d428ff1 00028a2d154f 10.0 821007 438860 821007 438860

对于如何开始的任何建议表示赞赏。

2 个答案:

答案 0 :(得分:3)

首先需要对坐标进行离散化处理。由于我猜测您的示例数据,col[0]col[1]表示节点(它们之间的边缘为两个),因此您可以使用节点名称来离散坐标。为此,请为每个节点分配一个数字。

提取所有节点:

set1 = set([col[0] for col in data])
set2 = set([col[1] for col in data])
nodes = list(set1.union(set2))

data是您的数据矩阵。将它们分散出来:

mapping = {}
for i, node in enumerate(nodes):
    mapping[node] = i

创建热图容器:

import numpy as np
n = len(nodes)
heatmap = np.zeros((n,n))

填充热图:

for col in data:
    coord1 = mapping[col[0]]
    coord2 = mapping[col[1]]
    heatmap[[coord1, coord2], [coord2, coord1]] += col[2]

现在您可以将imshowhist2d绘制为@greschd建议。

imshow(heatmap, 'jet', interpolation=None)

或者建立一个更复杂的热图,因为链接由@en_Knight解释。

注意:我确实假设您的热图是npoints x npoints,并且每个点都由其(x,y)坐标或其节点标识符表示,因此,只有在我从您的示例中猜到,相同的节点标识符(哈希)始终具有相同的坐标。

答案 1 :(得分:1)

如果我理解你,你想要一个类似this post中的热图的热图。因此,因为您的数据只是点,所以您要做的第一件事就是将您的区域细分为正方形(网格)。然后简单地将位于给定方格中的所有点的时间相加,这将为您提供2D列表。

通过它,您可以使用imshowhist2dmatplotlib生成热图。