2017-10-04 369 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