Matplotlib.pyplot:全局名称time未定义错误

4

我最近在jupyter笔记本中使用pyplot遇到了一个奇怪的问题。当尝试使用pyplot.pause()时,实际的matplotlib包中会出现名称错误。

这个名称错误在执行相同代码但保存为.py文件而非.ipynb文件时并不会发生。两者之间的其他操作均相同,它们都使用相同的虚拟环境和软件包。

错误信息:

---------------------------------------------------
NameError          Traceback (most recent call last)
<ipython-input-9-11e7508f518d> in <module>()
     32         plt.title('Epoch: {0}, loss: {1:.4}'.format(epoch, loss_history[epoch-1]))
     33         plt.show()
---> 34         plt.pause(0.001)
     35         #display.display(plt.gcf())
     36         #display.display(plt.show())
/home/user/.pyenv/versions/2.7.14/envs/P2714/lib/python2.7/site-packages/matplotlib/pyplot.pyc in pause(interval)
    292         canvas.start_event_loop(interval)
    293     else:
--> 294         time.sleep(interval)
    295 
    296 
NameError: global name 'time' is not defined
1个回答

3
这个问题的bug报告可以在这里看到:https://github.com/matplotlib/matplotlib/issues/9412。这个问题是pyplot.py中缺少import time声明导致的。
已经有一个解决了这个问题的拉取请求合并到了主分支中,将会在2.1.1版本中修复此问题。这里是拉取请求
使用来自matplotlib主分支的pyplot.py,我可以确认我不再遇到这个问题了。

@Alnitak,仅在没有图形时才使用time.sleep,例如在程序关闭后图形已被销毁。可能是笔记本中运行(后端选择?)导致_pylab_helpers.Gcf.get_active()返回None。这让我想知道pyplot.pause是否像您认为的那样工作;它可能只是调用time.sleep。https://github.com/matplotlib/matplotlib/blob/1493192430c9fe8d5d998352dd6f71168c2de317/lib/matplotlib/pyplot.py#L294 - foobarbecue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接