我正在寻找一种在动画中更新轮廓线的方法,每次都不需要我重新绘制图形。
对这个问题的大多数回答我发现主张回忆ax.contour
,但由于我的轮廓叠加在另一个图像上,这是无法忍受的慢。
我发现的唯一回答看起来接近回答问题的回答是用死链接回答:Animating a contour plot in matplotlib using FuncAnimation
编辑:this可能是预期的链接。
示例代码:
#!/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()
干杯。
答案 0 :(得分:0)
也许你现在已经想到了这一点;不幸的是,您似乎必须重新声明整个轮廓/轮廓f艺术家并在每个时间段删除旧实例。以下是从this link复制的一些信息:
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()