我正在尝试使用Cartopy创建一个简单的动画。基本上只是在地图上绘制几行。到目前为止,我正在尝试以下方法:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib.animation as animation
import numpy as np
ax = plt.axes(projection=ccrs.Robinson())
ax.set_global()
ax.coastlines()
lons = 10 * np.arange(1, 10)
lats = 10 * np.arange(1, 10)
def animate(i):
plt.plot([lons[i-1], lons[i]], [lats[i-1], lats[i]], color='blue', transform=ccrs.PlateCarree())
return plt
anim = animation.FuncAnimation(plt.gcf(), animate, frames=np.arange(1, 8), init_func=None, interval=2000, blit=True)
plt.show()
有谁知道为什么这不起作用?
答案 0 :(得分:1)
这与卡车无关,我猜。问题是你不能从动画函数返回pyplot。 (这就像不买书,你买整本书店,然后想知道为什么你不能读书店。)
最简单的解决方案是关闭blitting:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
fig, ax = plt.subplots()
lons = 10 * np.arange(1, 10)
lats = 10 * np.arange(1, 10)
def animate(i):
plt.plot([lons[i-1], lons[i]], [lats[i-1], lats[i]], color='blue')
anim = animation.FuncAnimation(plt.gcf(), animate, frames=np.arange(1, 8),
init_func=None, interval=200, blit=False)
plt.show()
如果由于某种原因你需要blitting(如果动画太慢或消耗太多CPU就会出现这种情况),你需要返回你想要绘制的Line2D对象的列表。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
fig, ax = plt.subplots()
lons = 10 * np.arange(1, 10)
lats = 10 * np.arange(1, 10)
lines = []
def animate(i):
line, = plt.plot([lons[i-1], lons[i]], [lats[i-1], lats[i]])
lines.append(line)
return lines
anim = animation.FuncAnimation(plt.gcf(), animate, frames=np.arange(1, 8),
interval=200, blit=True, repeat=False)
plt.xlim(0,100) #<- remove when using cartopy
plt.ylim(0,100)
plt.show()