2017-10-04 372 views
1

我需要绘制在没有显示的系统上。 如果我天真地绘制使用matplotlib.pyplot.plt我得到绘制不显示:正确使用matplotlib.use()

raise RuntimeError('Invalid DISPLAY variable') 

我已经发现,matplotlib.use()在这方面可以使用。 现在我有一个主文件:

**main.py:** 

import my_module 
.... 
# do stuff 

**my_module.py:** 

import matplotlib 
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or  pylab! 
import matplotlib.pyplot as plt  
# do stuff 
plt.plot(data) 

当运行main.py我得到:

UserWarning: 
This call to matplotlib.use() has no effect because the backend has already 
been chosen; matplotlib.use() must be called *before* pylab,  matplotlib.pyplot, 
or matplotlib.backends is imported for the first time. 

但对我来说,似乎进口pyplot之前我打电话吧。后来我得到这个运行时错误

File "[OMIT]/python2.7/site-packages/matplotlib /backends/backend_qt5.py", line 144, in _create_qApp 
raise RuntimeError('Invalid DISPLAY variable') 
RuntimeError: Invalid DISPLAY variable 

那么,什么是改变matplotlib后端的正确方法吗?我并不需要显示器,但我需要能够使用plt.savefig

+1

“main.py”中是否还有其他可以导入'matplotlib'的东西?你是否导入除my_module之外的其他模块? – tom

+0

我刚刚更改了我的代码,先导入了my_module。感谢您的建议。问题仍然存在,无需刷新内核 – ErroriSalvo

+0

刷新控制台后问题仍然存在。现在第一个导入matplotlib在main.py导入的第一个模块中完成,应该没问题吧? – ErroriSalvo

回答

1

您存储的数字需要

import matplotlib 
matplotlib.use('Agg') 

上一个新的内核,特别是如果你使用的是ipython,进口matplotlib.pyplot

前我很好奇,也很高兴知道是否有办法清除/刷新ipython内核,而不必重新启动它;到目前为止,我的追求还没有成功。

**main.py*** 
import matplotlib 
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab! 
import my_module 

my_module许多subimports做出无法查明pyplot首次进口:

+1

我现在尝试用%重置(Anaconda,iPython) – ErroriSalvo

+0

请让我知道。 ;) –

+0

重置没有工作,现在试图重新启动内核 – ErroriSalvo

0

最后,我已经解决了。 此外,我已经做了:

import my_module 

,而不是我在做ealier。

from my_module import my_func