如何制作动画地理热图?

时间:2013-03-16 12:05:59

标签: python matplotlib matplotlib-basemap

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

我已经尝试过查看Basemap's example gallery但是代码似乎有点过于复杂,我甚至想出一个基本的热图。我不明白的是contourf()函数的data参数。

我该如何处理?

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)},
 ...]

2 个答案:

答案 0 :(得分: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库,以便方便地切片和聚合数据(例如,按坐标和/或时间分组)。

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

答案 1 :(得分: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)

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