76

コマンドを使用して、リモート コンピューターで Figure を生成しようとしていpylab.savefigます。しかし、私はそのようなエラーを得ました:

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

図を適切に保存するにはどうすればよいですか?

4

2 に答える 2

151

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

X転送を使用することもできますが、matplotlibがリモートXサーバーに接続しようとすると、顕著な遅延が発生します。プロットを操作する必要がない場合は、X接続を完全に回避することで処理を高速化する方がよい場合がよくあります。

Xサーバーをまったく必要とせずにプロットを作成する場合は、 代わりに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

詳細については、この記事を参照してください

于 2011-01-16T16:38:33.813 に答える
1

DISPLAY 変数を適切な値に設定してみてください。

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

さて、目の前のマシンが Windows の場合、どこかから X サーバーを入手する必要があります。cygwin/X11 または商用の eXceed が適しています。

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

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

それで、もし ssh -X が答えでないなら、関連するオペレーティングシステムについてもう少し情報をいただけますか?

于 2011-01-16T16:27:22.543 に答える