如何为matplotlib的drawgreatcircle功能设置动画?

时间:2017-02-22 22:53:59

标签: python animation matplotlib matplotlib-basemap

我创建了一个小程序,它接管了一个NHL城市,然后绘制了整个赛季团队旅行的路径。

生成的图形很乱:

Messy Graphic

所以我认为如果我给飞行路径制作动画会很有趣,就像看一部印第安纳琼斯电影一样,这条线从一个点到另一个点。

通过查看其他matplotlib示例我的理解是动画函数接受函数,计算它的输出,然后更新图形。我不知道drawgreatcircle如何做到这一点,因为每当我打电话给我时,我都会得到完整的一行。

关于我如何处理这个问题的任何想法?

以下是

示例代码中的示例图片

Sample Image

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

fig = plt.figure(figsize=(10, 10))
m = Basemap(projection='merc', resolution=None,
                    llcrnrlon=-125, llcrnrlat=25, # LL = lower left
                    urcrnrlon=-60, urcrnrlat=55) #UR = upper right 
m.etopo(scale=0.5, alpha=0.5)


# Ottawa to Anaheim
# Ottawa
lat1 = 45.4215
lon1 = -75.6972

# Anaheim
lat2 = 33.8353
lon2 = -117.9145

m.drawgreatcircle(lon1,lat1,lon2,lat2)

1 个答案:

答案 0 :(得分:2)

drawgreatcicle返回matplotlib line2D,可以使用get_data从中获取数据。因此,想法是绘制大圆圈,获取数据,然后删除它。使用这些数据,可以执行动画,迭代数组。

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import matplotlib.animation

fig = plt.figure(figsize=(6, 4))
m = Basemap(projection='merc', resolution=None,
                    llcrnrlon=-125, llcrnrlat=25, # LL = lower left
                    urcrnrlon=-60, urcrnrlat=55) #UR = upper right 
m.etopo(scale=0.5, alpha=0.5)

# Ottawa to Anaheim
# Ottawa
lat1 = 45.4215
lon1 = -75.6972

# Anaheim
lat2 = 33.8353
lon2 = -117.9145

line, = m.drawgreatcircle(lon1,lat1,lon2,lat2)
x,y = line.get_data()

line.remove()
del line

line, = plt.plot([],[])

def update(i):
    line.set_data(x[:i], y[:i])

ani = matplotlib.animation.FuncAnimation(fig, update, frames=len(x), interval=100)
ani.save(__file__+".gif", writer="imagemagick", fps=10)
plt.tight_layout()
plt.show()

enter image description here