[英]Animation with contours matplotlib
我正在尝试在matplotlib 1.1.0中对轮廓进行动画处理
基于: http : //www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg17614.html,http : //matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0 -animation-vs-contour-plots-td18703.html和http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data
from numpy import linspace,exp,vstack
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from numpy.random import uniform, seed
def main():
seed(1234)
x = uniform(-2,2,100)
y = uniform(-2,2,100)
data = vstack((x*exp(-x**2-y**2),0.5*x*exp(-x**2-y**2),0.2*x*exp(-x**2-y**2)))
xi = linspace(min(x), max(x))
yi = linspace(min(y), max(y))
zi = []
numframes = data.shape[0]
for ii in range(numframes):
zi.append(griddata((x, y), data[ii], (xi[None,:], yi[:,None]), method='cubic'))
fig = plt.figure()
im = plt.contour(xi, yi, zi[0], 15, linewidths=0.5, colors='k')
ani = animation.FuncAnimation(fig, update_contour_plot, frames=xrange(numframes), fargs=(zi, im, fig, xi, yi), interval=100)
plt.colorbar()
plt.show()
def update_contour_plot(i, data, im, fig, xi, yi):
for coll in im.collections:
try:
plt.gca().collections.remove(coll)
except ValueError: #Everything is not removed for some reason!
pass
im = plt.contour(xi, yi, data[i], 15, linewidths=0.5, colors='k')
plt.title(str(i))
return im,
main()
1)这是最好的方法吗? 否则提及。
2)在最终输出中,前一帧的轮廓线仍然可见。 如何删除它们? 请参见ValueValue除外:
您有范围问题,您在更新程序中创建的新im
没有被传递出去,因此您第二次尝试通过循环来删除第一行行,这是正确的,因为您不能已经删除了它们。
稍微调整一下代码:
def main():
seed(1234)
x = uniform(-2,2,100)
y = uniform(-2,2,100)
data = vstack((x*exp(-x**2-y**2),0.5*x*exp(-x**2-y**2),0.2*x*exp(-x**2-y**2)))
xi = linspace(min(x), max(x))
yi = linspace(min(y), max(y))
zi = []
numframes = data.shape[0]
for ii in range(numframes):
zi.append(griddata((x, y), data[ii], (xi[None,:], yi[:,None]), method='cubic'))
fig = plt.figure()
im = plt.contour(xi, yi, zi[0], 15, linewidths=0.5, colors='k')
ax = fig.gca()
ani = animation.FuncAnimation(fig, update_contour_plot, frames=xrange(numframes), fargs=(zi, ax, fig, xi, yi), interval=100)
plt.colorbar(im)
plt.show()
return ani
def update_contour_plot(i, data, ax, fig, xi, yi):
ax.cla()
im = ax.contour(xi, yi, data[i], 15, linewidths=0.5, colors='k')
plt.title(str(i))
return im,
另一种选择是使im
可变(例如将其包装在字典中),以便您的更改将逐帧传播。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.