Pylabでフィギュアをリモートで保存する方法は? [複製
-
11-10-2019 - |
質問
この質問にはすでに答えがあります:
コマンドを使用してリモートコンピューターでフィギュアを生成しようとしています pylab.savefig
。しかし、私はそのようなエラーがありました:
Unable to access the X Display, is $DISPLAY set properly?
フィギュアを適切に保存するにはどうすればよいですか?
解決
デフォルトでは、Matplotlibは次のようなものを使用します TkAgg
バックエンド。これには、X-Serverが実行される必要があります。
X-Forwardingを使用することはできますが、MatplotlibがリモートXサーバーと接続しようとすると、顕著な遅延があります。プロットと対話する必要がない場合は、X接続を完全に回避することで、物事をスピードアップする方が良いことがよくあります。
X-Serverをまったく必要とせずにプロットを作成したい場合は、 Agg
バックエンド 代わりは。
たとえば、このようなことをします:
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ファイル 使用するには Agg
デフォルトでバックエンド。
見る 詳細については、この記事.
他のヒント
表示変数を適切な値に設定してみてください。
クライアント(リモート)コンピューターによるX11ワークを使用してネットワーク上のグラフィックスは、グラフィックを描画する場所を示すディスプレイ環境変数を備えています。通常、それはmydesktop.example.com:0.0のようなものです - X11プログラムが何かを描画しようとすると、ネットワークを介してmydesktop.example.comになります。サーバー)そしてそれはポップします。
これで、目の前のマシンがWindowsの場合、どこかからXサーバーを取得する必要があります。Cygwin/X11またはCommercial Abrowはうまく機能します。
また、セキュリティが処理されていることを確認する必要があります。ネットワーク上で画面に書いている人がいるだけではありません。
リモートマシンにどのように接続していますか? LinuxボックスからSSHを備えた別のLinuxボックスに行く場合、単純なソリューションはおそらく「ssh -x foo.example.comを使用して」接続するためです。
SSH -Xが答えではない場合、関係するオペレーティングシステムに関する情報をさらに入手できますか?