web-dev-qa-db-ja.com

Pythonのmatplotlibで「バックエンド」を設定するにはどうすればよいですか?

私はmatplotlibの新しいユーザーです。プラットフォームはUbuntu 10.04 Python 2.6.5です

これは私のコードです

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
plt.plot([1,2,3])

エラーは次のとおりです。

/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/usr/local/lib/python2.6/dist-packages/matplotlib/mpl-data/matplotlibrc')
or with matplotlib.use()
  (backend, matplotlib.matplotlib_fname()))
  • Anti-Grain Geometryライブラリapt-get install libaggをインストールしましたが、機能しません。
  • 「GTK」や「TkAgg」など、バックエンドの他の引数を使用しようとしました。
  • python-gtk2-devパッケージをインストールしましたが、引き続きエラーが発生します。
  • 実行可能なバックエンド引数とその依存関係ライブラリを教えてもらえますか?

エラーは次のとおりです。

>>> matplotlib.use('GTK')
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/pyplot.py", line 95, in <module>
    new_figure_manager, draw_if_interactive, show = pylab_setup()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
    globals(),locals(),[backend_name])
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gtk.py", line 28, in <module>
    from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK 
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gdk.py", line 29, in <module>
    from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
ImportError: No module named _backend_gdk
71
user504909

現在選択されているバックエンド、「agg」はshow()をサポートしていません。

AGGバックエンドは、ウィンドウへのレンダリング用ではなく、ファイルへの書き込み用です。 matplotlib Webサイトの バックエンドFAQ を参照してください。

ImportError:_backend_gdkという名前のモジュールはありません

2番目のエラーについては、matplotlibディストリビューションがGTKサポートを使用してコンパイルされていないか、PyGTKパッケージが欠落しています。それをインストールしてみてください。

グラフィカル環境にアクセスできる端末またはアプリケーション内でshow()メソッドを呼び出しますか?

次の順序で他のGUIバックエンドを試してください。

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
76

参考までに、matplotlib.use('Agg')を最初にPythonインポート順序に配置する必要があることがわかりました。私がやっていたこと(ユニットテストはヘッドレスである必要がありました)

import matplotlib
matplotlib.use('Agg')

マスターテストスクリプトの上部にあります。他のファイルに触れる必要はありませんでした。

20
Ben

これは、構成ファイルmatplotlibrc(エラーメッセージで説明)で設定することもできます。たとえば、

# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# CocoaAgg MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
backend : Agg

そうすれば、コードが他の人と共有されている場合、バックエンドをハードコーディングする必要はありません。詳細については、 documentation を確認してください。

19
BenC

投稿したエラーは無関係です。最初の理由は、インタラクティブな使用を意図していないバックエンド、つまりaggを選択したためです。ユーザーの操作を必要としないスクリプトでプロットを生成するために、これらを引き続き使用できます(使用する必要があります)。

Matlab/Pylabのようにインタラクティブなラボ環境が必要な場合は、Qt4Agg(QtとAGGが必要)、GTKAgg(GTKとAGG)、WXAgg(wxWidgetsとAgg)など、guiの使用をサポートするバックエンドを明らかにインポートします。

WXAggを使用しようとすることから始めますが、それはPythonとmatplotlib(ソース、パッケージなど)のインストール方法に大きく依存します。

7
Jim Brissom

私自身のVIRTUAL_ENVでpython、numpy、scipy、matplotlibをコンパイルしようとしたときにこれをヒットしました

Matplotlibをインストールする前に、ビルドしてインストールする必要があります:pygobject pycairo pygtk

そして、matplotlibでそれを行います。matplotlibをビルドする前に、「gtkagg」バックエンドが有効になっている場合、「python ./setup.py build --help」で確認します。次に、ビルドしてインストールします

エクスポートの前にPKG_CONFIG_PATH = $ VIRTUAL_ENV/lib/pkgconfig

2
btwe

Pythonを開始する前に、bashで行うことができます

export MPLBACKEND=TkAgg
1
Friedrich