2011-01-16 10 views
54

私はコマンドpylab.savefigでリモートコンピュータで図を生成しようとしています。 しかし、私は、このようなエラーを得た:ピラブで図を遠隔保存する方法は?

Unable to access the X Display, is $DISPLAY set properly? 

私はきちんと数字を保存することができますどのように?

+1

関連:http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined?lq=1 –

答えて

113

デフォルトでは、matplotlibはTkAggバックエンドのようなものを使用します。これには、Xサーバが実行されている必要があります。

X-forwardingを使用することはできますが、matplotlibがリモートXサーバに接続しようとすると、目立った遅延が発生します。プロットとやりとりする必要がない場合は、X接続を完全に避けて処理を高速化する方がよい場合があります。

Xサーバーをまったく必要とせずにプロットを作成する場合は、代わりにAggbackendを使用してください。

など。このような何か:あなたは、これがデフォルトの動作になりたい場合は

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

fig = plt.figure() 
plt.plot(range(10)) 
fig.savefig('temp.png') 

を、あなたのmatplotlibrc fileがデフォルトでAggバックエンドを使用するように変更することができます。

this article for more informationを参照してください。

+1

私はゲリーと同じ問題を抱えていました。私の場合、ジョーのトリックだけでは不十分です。私はssh -X nos @ serverもする必要がありました。comだけでなく、ssh – nos

+0

ありがとう。この解決法は、他のどの解決策よりも明確です。 – upendra

+0

こんにちはジョー、私はプロットの質問をしています。私はあなたのような専門家のアドバイスが必要です、見てくださいhttp://stackoverflow.com/questions/36248016/how-to-get-more-information-in-2nd-plot-by-clicking-1st-plot-using-python -clicki –

1

うん、DISPLAY変数を正しく設定する?

グラフィックを描画する場所を示すDISPLAY環境変数を持つクライアント(リモート)コンピュータによるX11作業を使用するネットワーク上のグラフィックス。通常、mydesktop.example.com:0のようなものになります。そして、X11プログラムが何かを描こうとすると、ネットワークを介してmydesktop.example.comに行きます。mydesktop.example.comは、あなたが座っているマシンです(Xサーバー)、それがポップアップします。

あなたの前のマシンがWindowsの場合、どこかからXサーバを取得する必要があります - cygwin/X11または商業eXceedがうまくいくでしょう。

また、セキュリティが処理されていることを確認する必要があります。ネットワーク経由で画面に書き込むことはできません。

どのようにリモートマシンに接続していますか? Linuxボックスからsshを使用して別のLinuxボックスに移行する場合、シンプルな解決策はおそらく 'ssh -X foo.example.comを使用して接続する'ことです。これはローカルソケットを介してX11接続をパイプするためです。

したがって、ssh -Xが答えではない場合は、関連するオペレーティングシステムに関するいくつかの情報を追加できますか?

+0

あなたの説明をありがとう。私はWindowsの下でLinuxマシンをsshです。それはX11なしで数字を作ることは可能ですか? – gerry

+0

画面に表示されないように、ファイルにファイルを書き込んだ後、そのファイルをWindowsのボックスにコピーする必要があります。多分、http://winswitch.org/に行きましょう。これは、クロスプラットフォームのグラフィックスを楽しむための簡単なインターフェイスです。 – Spacedman

+0

私は "ssh -X username @ servername"を自分のLinuxボックスから別のLinuxボックスに送りました。 –

関連する問題