python - 热图 Python

标签 python matplotlib

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

边缘相互连接,它们碰巧连接了一定的时间(以秒为单位),那时它们处于特定的地理位置。我需要绘制热图来确定人群密度和在该位置花费的时间。

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) 坐标或其节点标识符表示,因此,只有在我猜到的情况下才有效从您的示例中,相同的节点标识符(哈希)始终具有相同的坐标。

关于python - 热图 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498434/

相关文章:

python - 将多个列表写入 csv Python

python - 使用 python 将字符串从文件导入到列表中

python - 创建后如何共享两个子图的 x Axis

python - 解释为什么不应从源目录导入 numpy

python - 使用 groupby 按条件对 pandas 列求和

python - Python 中 Twitter API 的无效 JSON 对象

python - 如何从 numpy 二维数组中找到大于特殊数字的元素索引?

python - 删除 matplotlib 中图像行之间的垂直空白的问题

python - 同时使用 Matplotlib Slider 和 key_release_event

python - 当我尝试设置 plt.axes() 时,matplotlib.pyplot plt.bar() 发出警告