Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 高效设置pcolormesh动画_Python_Animation_Matplotlib - Fatal编程技术网

Python 高效设置pcolormesh动画

Python 高效设置pcolormesh动画,python,animation,matplotlib,Python,Animation,Matplotlib,我正试图用pcolormesh保存一张GIF图像,其中包含一些二维波的演变(使用曲面或线框也可以) 到目前为止,这是我的建议: 将四边形网格设置为以极坐标打印: from matplotlib import pyplot from matplotlib.animation import FuncAnimation as FuncAnimation pi=np.pi rmax=6. r=2*np.linspace(0,np.sqrt(rmax*.5),100)**2 phi=np.lins

我正试图用pcolormesh保存一张GIF图像,其中包含一些二维波的演变(使用曲面或线框也可以)

到目前为止,这是我的建议: 将四边形网格设置为以极坐标打印:

from matplotlib import pyplot
from matplotlib.animation import FuncAnimation as FuncAnimation
pi=np.pi


rmax=6.
r=2*np.linspace(0,np.sqrt(rmax*.5),100)**2  
phi=np.linspace(0,2*pi,80)

R, P = np.meshgrid(r, phi)
X, Y = R*np.cos(P), R*np.sin(P)
设置动画的图形和功能: count是我拥有的帧数。 Z是一个count*2D数组,包含我要绘制的值。 (它有一些类似傅里叶级数的和)

我真的不需要现场观看,所以我只保存一张gif

anim.save('%d_%d_%d-%d.%d.%d-2dgif.gif' %(localtime()[0:6]), writer='imagemagick')     
pyplot.close()
虽然这是可行的,但制作一张甚至100帧的gif图片可能需要一个小时

我不知道怎样做才能使它可用

关于这一点,我已经看过另一篇文章,但我无法让代码正常工作,否则它将同样不完善。

您可以尝试编写

def animate(i):
pyplot.title('Time: %s'%time[i])
#This is where new data is inserted into the plot.
plot=plot.set_array(Z[i,:,:].ravel())
return plot,
而不是

def animate(i):
pyplot.title('Time: %s'%time[i])
#This is where new data is inserted into the plot.
plot=ax.pcolormesh(X, Y,Z[i,:,:],cmap=pyplot.get_cmap('viridis'),vmin=0., vmax=15.)
return plot,
这不会在每次调用“动画”功能时创建新对象。相反,它会更改已创建对象的图像。 但是,set_数组方法似乎需要一个平坦的数组,因此使用.ravel()

只有将pcolormap函数的着色选项设置为shading='gouraud'时,才会生成正确的图像。 我不知道为什么,不幸的是,这似乎与数组的排序有关

我希望这会有点帮助。

你可以试着写作

def animate(i):
pyplot.title('Time: %s'%time[i])
#This is where new data is inserted into the plot.
plot=plot.set_array(Z[i,:,:].ravel())
return plot,
而不是

def animate(i):
pyplot.title('Time: %s'%time[i])
#This is where new data is inserted into the plot.
plot=ax.pcolormesh(X, Y,Z[i,:,:],cmap=pyplot.get_cmap('viridis'),vmin=0., vmax=15.)
return plot,
这不会在每次调用“动画”功能时创建新对象。相反,它会更改已创建对象的图像。 但是,set_数组方法似乎需要一个平坦的数组,因此使用.ravel()

只有将pcolormap函数的着色选项设置为shading='gouraud'时,才会生成正确的图像。 我不知道为什么,不幸的是,这似乎与数组的排序有关

我希望这会有点帮助。

我建议插入一个

pyplot.clf()
动画(i)
功能的开头。这将以一个空白的数字开始每一帧。否则,我怀疑绘图将不会被清除,并且很长时间是由于实际绘制了新帧下方的所有前一帧。

我建议插入一个

pyplot.clf()
动画(i)
功能的开头。这将以一个空白的数字开始每一帧。否则,我怀疑绘图将不会被清除,并且很长时间是由于实际绘制了新帧下方的所有前一帧