2013-03-16 70 views
-2

我有一個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)}, 
...] 

回答

0

如文檔建議,嘗試閱讀的matplotlib.pyplot.contourf的解釋上的數據paramemter細節。代碼看起來很複雜,因爲它正在從網絡加載地理數據。並繪製大陸,海洋和經脈。

我在底圖使用有些生疏,但核心函數調用(給定頁面的例子)是:

# 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) 

猜猜它不能比這更容易。如果您想了解更詳細的解決方案,請分享您的問題的細節,您擁有的數據結構以及您嘗試過的一些代碼。

+0

是的,我已經有類似的東西,但我仍然不知道要在'data'中放置什麼,因爲文檔並不特別明確。查看我的編輯樣本數據。 – seriousdev 2013-03-16 14:37:12

1

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

+0

嗯,我希望根據這些座標上的點數來使地點更暗(或更紅,或者任何你喜歡的地方),就像[heatmap.py](http://jjguy.com/heatmap/)提供的那樣。 – seriousdev 2013-03-16 19:38:23