繁体   English   中英

热图Python

[英]Heat Map Python

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

边缘彼此连接,并且碰巧连接了一定的时间(以秒为单位),这时它们处于特定的地理位置。 我需要绘制一个热图,以识别人群密度和在该位置花费的时间。

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

任何有关如何开始的建议都值得赞赏。

首先,您需要离散化坐标。 当我猜测样本数据时, 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]

现在,您可以按照@greschd的建议绘制imshowhist2d

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

或者按照@en_Knight的链接说明构建更复杂的热图。

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

如果我没弄错,您想要一个类似于这篇帖子的热图。 因此,由于您的数据仅是点,因此您要做的第一件事就是将您的区域细分为正方形(网格)。 然后,只需将位于给定正方形中所有点的时间加起来,即可获得2D列表。

从这一点,你可以生成热图或者与imshowhist2dmatplotlib

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM