繁体   English   中英

更新matplotlib动画的轮廓

[英]Updating contours for matplotlib animation

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

大多数对这个问题的回答我发现主张回忆起ax.contour ,但由于我的轮廓叠加在另一个图像上,这是无法忍受的缓慢。

我发现的唯一一个看起来接近回答问题的回答是用一个死链接来回答它: 使用FuncAnimation在matplotlib中动画一个等高线图

编辑: 可能是预期的链接。

示例代码:

#!/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()

干杯。

也许你现在已经想到了这一点; 遗憾的是,您似乎必须重新声明整个轮廓/轮廓f的艺术家集,在每个时间步都删除旧实例 以下是从此链接复制的一些信息:

set_array()方法(我认为)只会影响contourf的colormapping信息,即使这样也不会更新。 您需要做的是创建一个新的等高线图并删除旧等高线图,特别是如果您需要更改基础轮廓数据。 这应该像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() 

这个答案可能正是你要找的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM