2017-10-04 2 views
1

ディスプレイを持たないシステムでプロットする必要があります。 Iプロットは単純に私はmatplotlib.use()は、この文脈で使用することができることを見出したプロット表示なし:matplotlib.use()の正しい使用

raise RuntimeError('Invalid DISPLAY variable') 

を取得matplotlib.pyplot.pltを使用している場合。

**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

コンソールをリフレッシュしても問題は残ります。今、最初のimport matplotlibは、main.pyによってインポートされた最初のモジュールで実行されます。 – ErroriSalvo

答えて

1

にあなたを使用して数値を保存できるようにする必要がありますあなたはmatplotlib.pyplot

をインポートする前に、ipythonを使用している場合は特に、新鮮なカーネルに

import matplotlib 
matplotlib.use('Agg') 

に必要私は、ipythonカーネルをクリア/フラッシュする方法があるかどうかを知りたいときには、それを再起動することなく、好奇心と幸せになるでしょう。これまでのところ、私の探求は成功していません。 my_moduleにおける多くsubimportsがpyplotが最初にインポートされた場所を特定することは不可能で行われるよう

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

:最後に

+1

私は今リセットを試みています(Anaconda、iPython) – ErroriSalvo

+0

お知らせください。 ;) –

+0

リセットが機能しなかったため、カーネルを再起動しようとしました – ErroriSalvo

0

、Iは、によって解決しています。 はまた、私が行っている:

import my_module 

の代わりに私がealierやっていたことを。

from my_module import my_func 
関連する問題