コマンドpylab.savefig
を使用して、リモートコンピューターで図を生成しようとしています。しかし、私はそのようなエラーを得ました:
Unable to access the X Display, is $DISPLAY set properly?
図を適切に保存するにはどうすればよいですか?
デフォルトでは、matplotlibはTkAgg
バックエンドのようなものを使用します。これを実行するには、Xサーバーが必要です。
Xフォワーディングだけを使用できますが、matplotlibがリモートXサーバーに接続しようとすると、顕著な遅延が発生します。プロットを操作する必要がない場合、X接続を完全に回避することで速度を上げる方が良い場合がよくあります。
Xサーバーをまったく必要とせずにプロットしたい場合は、代わりにAgg
backend を使用してください。
例えば。このようなことをしてください:
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')
これをデフォルトの動作にしたい場合は、デフォルトでAgg
バックエンドを使用するように matplotlibrcファイル を変更できます。
詳細はこの記事 を参照してください。
うーん、DISPLAY変数を適切に設定しますか?
X11を使用したネットワーク上のグラフィックスは、グラフィックスを描画する場所を示すDISPLAY環境変数を持つクライアント(リモート)コンピューターによって機能します。通常、mydesktop.example.com:0.0のようなものになります。X11プログラムが何かを描画しようとすると、ネットワークを介してmydesktop.example.comに移動します。mydesktop.example.comは、Xサーバー)とそれがポップアップします。
さて、目の前のマシンがWindowsである場合、どこかからXサーバーを取得する必要があります-cygwin/X11または商用eXceedがうまく機能します。
また、セキュリティが処理されていることを確認する必要があります。ネットワーク経由で画面に誰かが書き込むことはできません。
リモートマシンにどのように接続していますか?なぜなら、sshを使用してLinuxボックスから別のLinuxボックスに移動する場合、単純な解決策はおそらく「Use ssh -X foo.example.com」であり、これはローカルソケットを介してX11接続をパイプするからです。
それで、ssh -Xが答えではない場合、関連するオペレーティングシステムに関する詳細情報を入手できますか?