我想这个想法是在更新功能之外创建一个轮廓图,并给它一个颜色条。然后,轮廓图将需要具有定义的级别,并且需要定义颜色范围。
ax.contourf(..., levels=levels, vmin=zmin, vmax=zmax)
其中
zmin和
zmax是要显示的最小和最大数据,
levels是要使用的级别的列表或数组。
然后,在动画功能内部,您将只使用相同的参数创建一个新的轮廓图,而完全不触摸颜色栏。
import numpy as npimport itertoolsimport matplotlib.pyplot as pltimport matplotlib.mlab as mlimport matplotlib.animation as animationdef f(x,y,a): return a*(x**2+y**2)avals = list(np.linspace(0,1,10))xaxis = list(np.linspace(-2,2,9))yaxis = list(np.linspace(-2,2,9))xy = list(itertools.product(xaxis,yaxis))xy = np.array(list(map(list,xy)))x = xy[:,0]y = xy[:,1]zlist = []for a in avals: z = [] for i, xval in enumerate(x): z.append(f(x[i],y[i],a)) zlist.append(z)xi = np.linspace(min(x),max(x),len(x))yi = np.linspace(min(y), max(y), len(y))zmin = min([min(zl) for zl in zlist])zmax = max([max(zl) for zl in zlist])levels = np.linspace(zmin, zmax,41)kw = dict(levels=levels, cmap=plt.cm.hsv, vmin=zmin, vmax=zmax, origin='lower')fig,ax = plt.subplots()zi = ml.griddata(x, y, zlist[0], xi, yi, interp='linear')contourplot = ax.contourf(xi, yi, zi, **kw)cbar = plt.colorbar(contourplot)def animate(index): zi = ml.griddata(x, y, zlist[index], xi, yi, interp='linear') ax.clear() ax.contourf(xi, yi, zi, **kw) ax.set_title('%03d'%(index))ani = animation.FuncAnimation(fig,animate,10,interval=200,blit=False)plt.show()


