Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更新matplotlib动画的轮廓_Python_Matplotlib - Fatal编程技术网

Python 更新matplotlib动画的轮廓

Python 更新matplotlib动画的轮廓,python,matplotlib,Python,Matplotlib,我正在寻找一种方法来更新动画中的轮廓线,而不需要每次都重新绘制图形 我发现对这个问题的大多数回答都是关于ax.contour的,但当我的轮廓叠加在另一张图像上时,速度慢得令人无法忍受 我发现的唯一一个接近于回答这个问题的答案是一个死链接: 编辑:可能是预期的链接 示例代码: #!/usr/bin/env python import matplotlib.pylab as plt import matplotlib.animation as anim from matplotlib.colors

我正在寻找一种方法来更新动画中的轮廓线,而不需要每次都重新绘制图形

我发现对这个问题的大多数回答都是关于ax.contour的,但当我的轮廓叠加在另一张图像上时,速度慢得令人无法忍受

我发现的唯一一个接近于回答这个问题的答案是一个死链接:

编辑:可能是预期的链接

示例代码:

#!/usr/bin/env python

import matplotlib.pylab as plt
import matplotlib.animation as anim
from matplotlib.colors import LinearSegmentedColormap as lsc
import numpy

#fig = 0; ax = 0; im = 0; co = 0


image_data = numpy.random.random((100,50,50))
contour_data = numpy.random.random((100,50,50))

def init():
    global fig, ax, im, co
    fig = plt.figure()
    ax = plt.axes()
    im = ax.imshow(image_data[0,:,:])
    co = ax.contour(contour_data[0,:,:])

def func(n):
    im.set_data(image_data[n,:,:])
    co.set_array(contour_data[n,:,:])

init()
ani = anim.FuncAnimation(fig, func, frames=100)
plt.show()

干杯。

也许你现在已经明白了这一点;不幸的是,您似乎必须重新声明整个轮廓/contourf美工集,并在每个时间步删除旧实例。以下是从以下位置复制的一些信息:

set_array()方法(我认为)只影响颜色映射 contourf的信息,即使如此也不会更新。 你需要做的是做一个新的等高线图并删除旧的等高线图, 特别是如果您需要更改基础轮廓数据。这 应该和C.remove()一样简单,但由于某些原因,这并不简单 存在(我将在一分钟内添加它)。因此,你需要做的是 以下:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(0, 2 * np.pi, 0.1) 
X,Y = np.meshgrid(x,x) 
f1 = np.sin(X) + np.sin(Y) 
f2 = np.cos(X) + np.cos(Y) 

plt.figure() 
C = plt.contourf(f1) 
plt.show() 
for coll in C.collections: 
    plt.gca().collections.remove(coll) 
C = plt.contourf(f2) 
plt.draw()