Bagaimana cara mengatur 'backend' di matplotlib dengan Python?

91

Saya pengguna baru matplotlib, platform saya adalah Ubuntu 10.04 Python 2.6.5

Ini kode saya

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

Kesalahannya adalah:

/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()))
  • Saya menginstal pustaka Anti-Grain Geometry apt-get install libaggtetapi tidak berfungsi.
  • Saya mencoba menggunakan argumen backend lain seperti 'GTK' dan 'TkAgg'.
  • Saya menginstal python-gtk2-devpaket, tetapi kesalahan masih ada di bawah.
  • Adakah yang bisa memberi tahu saya argumen backend yang dapat dieksekusi dan pustaka ketergantungannya?

Inilah kesalahannya:

>>> 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
pengguna504909
sumber

Jawaban:

93

Backend yang Anda pilih saat ini, 'agg' tidak mendukung show ().

AGGbackend adalah untuk menulis ke file, bukan untuk rendering di jendela. Lihat FAQ backend di situs web matplotlib.

ImportError: Tidak ada modul bernama _backend_gdk

Untuk kesalahan kedua, mungkin distribusi matplotlib Anda tidak dikompilasi dengan dukungan GTK, atau Anda melewatkan paket PyGTK. Cobalah untuk menginstalnya.

Apakah Anda memanggil show()metode di dalam terminal atau aplikasi yang memiliki akses ke lingkungan grafis?

Coba backend GUI lainnya, dalam urutan ini:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Andrea Spadaccini
sumber
terima kasih banyak staf yang salah yang saya lakukan adalah mengatur matplotlib sebelum mendapatkan PyGTK
user504909
1
sebagai komentar samping, saya akan mencoba QTAgg terakhir karena itu menargetkan QT3 dan kemungkinan akan dihentikan dalam jangka menengah.
tacaswell
30

FYI, saya merasa perlu menempatkan matplotlib.use('Agg')urutan pertama dalam impor Python. Untuk apa yang saya lakukan (pengujian unit harus tanpa kepala) itu berarti menempatkan

import matplotlib
matplotlib.use('Agg')

di bagian atas skrip pengujian master saya. Saya tidak perlu menyentuh file lain.

Ben
sumber
Saya harus melakukan hal yang sama yang sangat mengganggu saya. Pernahkah Anda menemukan solusi elegan lainnya?
QM.py
Dan saya menemukan bahwa penting untuk berada di puncak (bukan setelah impor tertentu lainnya). +1.
Ryan
Ya, ini harus menjadi hal pertama yang mutlak Anda lakukan sebelum impor matplotlib lainnya.
JakeCowton
19

Ini juga dapat diatur dalam file konfigurasi matplotlibrc(seperti yang dijelaskan dalam pesan kesalahan), misalnya:

# 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

Dengan begitu, backend tidak perlu di-hardcode jika kode tersebut dibagikan dengan orang lain. Untuk informasi lebih lanjut, periksa dokumentasi .

BenC
sumber
7

Kesalahan yang Anda posting tidak ada hubungannya. Yang pertama adalah karena Anda memilih backend yang tidak dimaksudkan untuk penggunaan interaktif, yaitu agg. Anda masih dapat menggunakan (dan harus menggunakan) itu untuk pembuatan plot dalam skrip yang tidak memerlukan interaksi pengguna.

Jika Anda menginginkan lingkungan lab interaktif, seperti di Matlab / Pylab, Anda jelas akan mengimpor penggunaan gui pendukung backend, seperti Qt4Agg (memerlukan Qt dan AGG), GTKAgg (GTK an AGG) atau WXAgg (wxWidgets dan Agg).

Saya akan mulai dengan mencoba menggunakan WXAgg, selain itu itu sangat tergantung pada bagaimana Anda menginstal Python dan matplotlib (sumber, paket, dll.)

Jim Brissom
sumber
4

Sebelum memulai python, Anda bisa melakukannya di bash

export MPLBACKEND=TkAgg
Friedrich
sumber
3

Anda juga dapat mencoba melihat grafik di browser.

Gunakan yang berikut ini:

matplotlib.use('WebAgg')
Grizzle
sumber
2

Saya menekan ini ketika mencoba mengkompilasi python, numpy, scipy, matplotlib di VIRTUAL_ENV saya sendiri

Sebelum menginstal matplotlib, Anda harus membuat dan menginstal: pygobject pycairo pygtk

Dan kemudian lakukan dengan matplotlib: Sebelum membuat matplotlib, periksa dengan 'python ./setup.py build --help' jika backend 'gtkagg' diaktifkan. Kemudian buat dan instal

Sebelum mengekspor PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

btwe
sumber
2

Untuk pendatang baru,

matplotlib.pyplot.switch_backend(newbackend)
Ali Erkan
sumber