-1

我有一个分布在 24 小时内的坐标和时间戳列表。我想创建一个动画热图,它将全天显示该地图。

我已经尝试查看Basemap 的示例库,但代码似乎有点过于复杂,以至于我无法想出基本的热图。具体我不明白的是函数的data参数contourf()

我该如何进行?

PS:样本数据:

[{'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)},
 ...]
4

2 回答 2

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变量取自“点”列。我建议您查看pandas库,了解切片和聚合数据的便捷方法(例如,按坐标和/或时间分组)。

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

于 2013-03-16T17:19:44.180 回答
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)

猜猜它不会比这更容易。如果您需要更详细的解决方案,请分享您的问题的详细信息、您拥有的数据结构以及您尝试过的一些代码。

于 2013-03-16T12:24:19.460 回答