python - 等高线动画 matplotlib

标签 python numpy 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.htmlhttp://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) 在最终输出中,前一帧的轮廓线仍然可见。我如何删除它们?请参阅 ValueError 除外:

最佳答案

你有一个范围问题,你在更新器中创建的新 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 成为某种可变的(比如将其包装在字典中),这样您的更改就会从一帧传播到另一帧。

关于python - 等高线动画 matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14124903/

相关文章:

python - 慢欧氏距离

Python re.match 需要更长的时间来匹配这个

python - 通过这段代码,我想收集脸部样本,但它给了错误

python - 在 mac osx(雪豹)上安装 numpy

Python:比较不同 bin 大小的直方图

python - 图像的牛眼图

python - 图片分类: Best approach to training the model

python - 如何将过滤器应用于局部最大值(图)

python - 在 Numpy 中迭代的更多 pythonic 方式

python - Matplotlib 热图标签