如何为 matplotlib 的 drawgreatcircle 函数制作动画?

How to animate matplotlib's drawgreatcircle function?

我创建了一个小程序,其中包含一个 NHL 城市,然后绘制球队在整个赛季中走过的路径。

生成的图形很乱:

所以我想到,如果我对飞行路径进行动画处理会很有趣,有点像看夺宝奇兵的电影,线条从一点延伸到另一点。

我通过查看其他 matplotlib 示例的理解是动画函数接受一个函数,计算它的输出,然后更新图形。我不明白 drawgreatcircle 这怎么可能,因为每当我调用它时,我都会得到一个完整的行。

知道如何处理这个问题吗?

下面是示例代码中的示例图片

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)

drawgreatcicle returns 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()