创建连续热图

数据挖掘 Python
2022-03-05 09:53:38

大多数热图教程都关注离散数据,其中每个单元格都有明确定义的边界和单个值。您如何创建连续数据的热图,其中各个点可能非常接近但实际上并不相同?

示例:我有一组 1000 个地图坐标,均在 (-8192, -8192) 到 (8192, 8192) 范围内。它们可能看起来像这样:

745.2218627929688,808.1373901367188
741.4943237304688,775.325927734375
757.3713989257812,806.7517700195312
-300.1320495605469,1425.9727783203125
-1845.8055419921875,2091.180419921875
-289.85308837890625,1429.4222412109375
-306.8935241699219,1434.9525146484375
-287.78253173828125,1439.9078369140625

这些位置往往会聚集在一起,并且集群是最有趣的,但异常值仍然具有一定的价值。我想要的是在图像上显示表示这种密度的颜色。

我很可能只需要搜索正确的术语,但“热图”一直在寻找离散数据教程:)

3个回答

怎么样imshow检查这些不同的插值方法,它们将允许您定义“离散性”。

二次插值示例:

import matplotlib.pyplot as plt
import numpy as np

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],
                    [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
                    [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
                    [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],
                    [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
                    [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
                    [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])


fig, ax = plt.subplots()
im = ax.imshow(harvest,interpolation="quadric")

输出图像:

在此处输入图像描述

您可以使用 Plotly 密度 hetmap。

import plotly.express as px
import pandas as pd

data = [
    [745.2218627929688,808.1373901367188],
    [741.4943237304688,775.325927734375],
    [757.3713989257812,806.7517700195312],
    [-300.1320495605469,1425.9727783203125],
    [-1845.8055419921875,2091.180419921875],
    [-289.85308837890625,1429.4222412109375],
    [-306.8935241699219,1434.9525146484375],
    [-287.78253173828125,1439.9078369140625],
]

df = pd.DataFrame(data=data, columns=['latitude', 'longitude'])
df['magnitude'] = df.groupby(['latitude', 'longitude']).size().reset_index(drop=True)
fig = px.density_mapbox(df, lat='latitude', lon='longitude', z='magnitude', radius=10,
                        center=dict(lat=0, lon=180), zoom=0,
                        mapbox_style="stamen-terrain")
fig.show()

https://plotly.com/python/mapbox-density-heatmaps/

有时,您的要求太具体或太不寻常,您必须自己编写。通过查看各种现有选项 - 包括 WBM 和 tkarahan 发布的选项 - 谢谢你们!- 我能够根据距离平方线性下降和实际距离计算来制作我自己的热图代码,而不管像素计算产生的量化。对于其他尝试制作热图的人来说,您可能可以使用 imshow,这与我正在寻找的非常接近;否则,请自行构建以匹配您的精确要求。祝你好运!