如何制作动态地理热图?

-1 投票
2 回答
3462 浏览
提问于 2025-04-17 19:18

我有一组坐标和时间戳,这些数据分布在24小时内。我想制作一个动态热力图,展示一天中的情况。

我试着查看了Basemap的示例库,但是代码对我来说有点复杂,连一个基本的热力图都搞不定。我特别不明白的是contourf()这个函数里的data参数。

我该怎么做呢?

附:示例数据:

[{'date': datetime.datetime(2013, 3, 12, 6, 13, 0), 'loc': (46.448269, 16.363296)},
 {'date': datetime.datetime(2013, 3, 12, 6, 13, 1), 'loc': (37.702152, -120.127964)},
 {'date': datetime.datetime(2013, 3, 12, 6, 13, 1), 'loc': (14.484318, 121.037639)},
 ...]

2 个回答

0

根据文档的建议,试着看看 matplotlib.pyplot.contourf 的说明,了解一下数据参数的具体内容。代码看起来很复杂,其实是因为它在从网上加载地理数据,并且绘制了大陆、海洋和经纬线。

我对 Basemap 的使用有点生疏,但页面上的核心功能调用(根据示例)是:

# create the map, i.e. the plot surface as a map projection given
# the type of projection you need and the point you want as center of the map
map = Basemap(projection='ortho', lat_0=45, lon_0=-100, resolution='l')

# draw the continents lines
map.drawcountries(linewidth=0.25)

# draw the contour plot
cs = map.contour(x, y, data, 15, linewidths=1.5)

我想这也没什么比这更简单的了。如果你需要更详细的解决方案,请分享一下你的问题细节、你拥有的数据结构以及你尝试过的一些代码。

2

data 是你想要用来绘制轮廓的数据。绘制轮廓时,你需要把一个值 z 和地图上的每一个 (x, y) 点关联起来。这里的 data 就是这个 z 值。举个例子,如果你想做一个温度的轮廓图,data 就是温度的数值。

根据你提供的样本数据,我不太明白你想要绘制什么。你有时间戳和地点,但没有和这些值关联的数据。仅仅用这些信息来绘制轮廓图是没有意义的(除非每个地点只有一个时间戳,并且你想绘制一个静态的地图,把时间作为 z 值)。你不能仅仅说“想要一个全天候的动态轮廓图”,你需要有一个动态轮廓图 表示某种东西(也就是说,表示其他的数量)在一天中的变化。你希望地图上显示的值代表什么?你的因变量是什么?

如果你想要的变量是“这些坐标上的数据点数量”,那么你应该先计算这个数量。也就是说,把你的数据按坐标和时间分组,统计每个地点/时间的数据点数量。你想要的结果类似于下面的表格:

X    Y   Time   Points
-10  2   10:30  4
-10  2   11:00  10
4    -10 10:30  6
4    -10 11:00  8

然后你可以生成一系列的轮廓图,其中 data 变量取自“Points”这一列。我建议你看看 pandas 库,它提供了方便的数据切片和聚合方法(例如,可以按坐标和/或时间分组)。

另外一种可能性是使用 这里 描述的技术。

撰写回答