首页 > 解决方案 > 保存 matplotlib 动画时出现意外错误

问题描述

我想制作一个 3D 极坐标图并导出它,因为我的计算机没有足够的 CPU 功率来显示它plt.show()(如果你有一个很好的解决方案,如何在显示之前计算它,我也会很感激)
不幸的是,导出没有工作,我不知道为什么。在我看来,这应该有效。
我的 Python IDE(PyCharm) 或我的 Python 版本(2.7) 是否有可能负责?

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
from IPython import display

psi_vec = np.arange(0, 2 * np.pi, 0.1)
radius = np.arange(0,1,0.05)
Z_ones = np.ones(63)

def animate(time):
    X = np.zeros((np.size(psi_vec), np.size(radius)))
    Y = np.zeros((np.size(psi_vec), np.size(radius)))
    Z = np.zeros((np.size(psi_vec), np.size(radius)))

    for i in range(np.size(radius)):
        X[:,i] = np.cos(psi_vec) * radius[i]
        Y[:,i] = np.sin(psi_vec) * radius[i]
        Z[:,i] = np.sin(time) * i * Z_ones
        line = ax.plot_surface(X, Y, Z,color= 'b')
    return line

fig = plt.figure()
ax = p3.Axes3D(fig)
anim = animation.FuncAnimation(fig, animate, frames = 15, interval = 500)
video = anim.to_html5_video()
html = display(video)
display.display(html)

错误消息是:

Traceback (most recent call last):
  File "/home/alexander/Dokumente/PetersHe (vectors)/animation.py", line 48, in <module>
    video = anim.to_html5_video()
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/matplotlib/animation.py", line 1353, in to_html5_video
    self.save(f.name, writer=writer)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/matplotlib/animation.py", line 1200, in save
    writer.grab_frame(**savefig_kwargs)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/matplotlib/animation.py", line 241, in saving
    self.finish()
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/matplotlib/animation.py", line 367, in finish
    self.cleanup()
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/matplotlib/animation.py", line 405, in cleanup
    out, err = self._proc.communicate()
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/subprocess32.py", line 748, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/subprocess32.py", line 1557, in _communicate
    orig_timeout)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/subprocess32.py", line 1613, in _communicate_with_poll
    register_and_append(self.stdout, select_POLLIN_POLLPRI)
  File "/home/alexander/anaconda2/envs/PyEnv/lib/python2.7/site-packages/subprocess32.py", line 1592, in register_and_append
    poller.register(file_obj.fileno(), eventmask)
ValueError: I/O operation on closed file

Process finished with exit code 1

谢谢你!

标签: pythonmatplotlibpycharm

解决方案


推荐阅读