如何在底图上使用 Matplotlib 制作动画子图?
How to make an animation subplot with Matplotlib on Basemap?
我正在尝试制作一个带时间的双面板动画。我找到了一个类似的 我想做,但我无法完成。这是我的代码。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.basemap import Basemap
#dummy temperature data with 10 time-steps
y = np.random.randn(10, 60, 100)
fig, ax = plt.subplots(1,2)
ax[0].set_title("aaaa")
m_a = Basemap(projection='kav7',lon_0=0)
lats = np.linspace(90,-90,y.shape[1])
lons = np.linspace(-180,180,y.shape[2])
lons, lats = np.meshgrid(lons,lats)
m_a.drawparallels(np.arange(-90.,99.,30.), labels=[1,0,0,0])
m_a.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])
m_a.drawcoastlines(linewidth=0.25)
m_a.pcolormesh(lons,lats,y[0],cmap=plt.cm.bwr, shading='flat',latlon=True)
ax[1].set_title("bbbb")
m_b = Basemap(projection='kav7',lon_0=0)
lats = np.linspace(90,-90,y.shape[1])
lons = np.linspace(-180,180,y.shape[2])
lons, lats = np.meshgrid(lons,lats)
m_b.drawparallels(np.arange(-90.,99.,30.), labels=[1,0,0,0])
m_b.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])
m_b.drawcoastlines(linewidth=0.25)
m_b.pcolormesh(lons,lats,y[0],cmap=plt.cm.bwr, shading='flat',latlon=True)
def init():
fig
def animate(i):
m_a.pcolormesh(lons,lats,y[i],cmap=plt.cm.bwr,shading='flat',latlon=True)
m_b.pcolormesh(lons,lats,y[i],cmap=plt.cm.bwr,shading='flat',latlon=True)
return m_a, m_b
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=10, interval=100) #interval = number of milliseconds between frames
plt.show()
不过,结果动画在这里⇒enter image description here。为什么会这样?如果您查看代码,我很高兴。
我猜你只是忘了指定坐标轴或要居住的底图。
m_a = Basemap(projection='kav7',lon_0=0, ax=ax[0])
# ...
m_b = Basemap(projection='kav7',lon_0=0, ax=ax[1])
我正在尝试制作一个带时间的双面板动画。我找到了一个类似的
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.basemap import Basemap
#dummy temperature data with 10 time-steps
y = np.random.randn(10, 60, 100)
fig, ax = plt.subplots(1,2)
ax[0].set_title("aaaa")
m_a = Basemap(projection='kav7',lon_0=0)
lats = np.linspace(90,-90,y.shape[1])
lons = np.linspace(-180,180,y.shape[2])
lons, lats = np.meshgrid(lons,lats)
m_a.drawparallels(np.arange(-90.,99.,30.), labels=[1,0,0,0])
m_a.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])
m_a.drawcoastlines(linewidth=0.25)
m_a.pcolormesh(lons,lats,y[0],cmap=plt.cm.bwr, shading='flat',latlon=True)
ax[1].set_title("bbbb")
m_b = Basemap(projection='kav7',lon_0=0)
lats = np.linspace(90,-90,y.shape[1])
lons = np.linspace(-180,180,y.shape[2])
lons, lats = np.meshgrid(lons,lats)
m_b.drawparallels(np.arange(-90.,99.,30.), labels=[1,0,0,0])
m_b.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])
m_b.drawcoastlines(linewidth=0.25)
m_b.pcolormesh(lons,lats,y[0],cmap=plt.cm.bwr, shading='flat',latlon=True)
def init():
fig
def animate(i):
m_a.pcolormesh(lons,lats,y[i],cmap=plt.cm.bwr,shading='flat',latlon=True)
m_b.pcolormesh(lons,lats,y[i],cmap=plt.cm.bwr,shading='flat',latlon=True)
return m_a, m_b
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=10, interval=100) #interval = number of milliseconds between frames
plt.show()
不过,结果动画在这里⇒enter image description here。为什么会这样?如果您查看代码,我很高兴。
我猜你只是忘了指定坐标轴或要居住的底图。
m_a = Basemap(projection='kav7',lon_0=0, ax=ax[0])
# ...
m_b = Basemap(projection='kav7',lon_0=0, ax=ax[1])