Jak mogę ustawić 'backend' w matplotlib w Pythonie?

89

Jestem nowym użytkownikiem matplotlib, moja platforma to Ubuntu 10.04 Python 2.6.5

To jest mój kod

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

Błąd:

/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()))
  • Zainstalowałem bibliotekę Anti-Grain Geometry, apt-get install libaggale nie działa.
  • Próbowałem użyć innego argumentu zaplecza, takiego jak „GTK” i „TkAgg”.
  • Zainstalowałem python-gtk2-devpakiet, ale nadal błąd jest poniżej.
  • Czy ktoś może mi podać wykonywalny argument zaplecza i jego bibliotekę zależności?

Oto błąd:

>>> 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
user504909
źródło

Odpowiedzi:

89

Twój aktualnie wybrany backend, „agg”, nie obsługuje funkcji show ().

AGGbackend służy do zapisu do pliku, a nie do renderowania w oknie. Zobacz często zadawane pytania dotyczące zaplecza na stronie internetowej matplotlib.

ImportError: brak modułu o nazwie _backend_gdk

Jeśli chodzi o drugi błąd, być może Twoja dystrybucja matplotlib nie jest skompilowana z obsługą GTK lub brakuje Ci pakietu PyGTK. Spróbuj go zainstalować.

Czy wywołujesz show()metodę wewnątrz terminala lub aplikacji, która ma dostęp do środowiska graficznego?

Wypróbuj inne backendy GUI, w następującej kolejności:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Andrea Spadaccini
źródło
bardzo dziękuję zły personel, który zrobiłem, to skonfigurowanie matplotlib przed otrzymaniem PyGTK
user504909
1
na marginesie, spróbuję QTAgg jako ostatniego, ponieważ jest ukierunkowany na QT3 i prawdopodobnie zostanie wycofany w połowie okresu.
tacaswell
29

FYI, stwierdziłem, że muszę matplotlib.use('Agg')najpierw wprowadzić kolejność importu Pythona. W przypadku tego, co robiłem (testy jednostkowe musiały być bezgłowe), oznaczało to umieszczanie

import matplotlib
matplotlib.use('Agg')

u góry mojego głównego skryptu testowego. Nie musiałem dotykać żadnych innych plików.

Ben
źródło
Muszę zrobić to samo, co mnie bardzo niepokoi. Czy kiedykolwiek znalazłeś inne eleganckie rozwiązanie?
QM.py
Odkryłem, że ważne jest, aby znalazł się na samej górze (a nie po niektórych innych importach). +1.
Ryan
Tak, to musi być absolutnie pierwsza rzecz, którą robisz przed jakimikolwiek innymi importami plików matplotlib.
JakeCowton,
19

Można to również ustawić w pliku konfiguracyjnym matplotlibrc(jak wyjaśniono w komunikacie o błędzie), na przykład:

# 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

W ten sposób backend nie musi być zakodowany na stałe, jeśli kod jest udostępniany innym osobom. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją .

BenC
źródło
7

Opublikowane przez Ciebie błędy są niepowiązane. Pierwsza z nich wynika z wyboru zaplecza, które nie jest przeznaczone do użytku interaktywnego, tj. Agg. Nadal możesz używać (i powinieneś używać) tych do generowania wykresów w skryptach, które nie wymagają interakcji użytkownika.

Jeśli chcesz mieć interaktywne środowisko laboratoryjne, jak w Matlab / Pylab, oczywiście zaimportujesz zaplecze obsługujące użycie GUI, takie jak Qt4Agg (wymaga Qt i AGG), GTKAgg (GTK an AGG) lub WXAgg (wxWidgets i Agg).

Zacząłbym od próby użycia WXAgg, poza tym naprawdę zależy to od tego, jak zainstalowałeś Pythona i matplotlib (źródło, pakiet itp.)

Jim Brissom
źródło
3

Przed uruchomieniem Pythona możesz to zrobić w bash

export MPLBACKEND=TkAgg
Friedrich
źródło
3

Możesz także spróbować wyświetlić wykres w przeglądarce.

Użyj następujących:

matplotlib.use('WebAgg')
Siwek
źródło
2

Uderzam w to, próbując skompilować Python, numpy, scipy, matplotlib w moim własnym VIRTUAL_ENV

Przed zainstalowaniem matplotlib musisz skompilować i zainstalować: pygobject pycairo pygtk

A następnie zrób to za pomocą matplotlib: przed utworzeniem matplotlib sprawdź za pomocą 'python ./setup.py build --help', jeśli jest włączony backend 'gtkagg'. Następnie skompiluj i zainstaluj

Przed eksportem PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

btwe
źródło
2

Dla nowych przybyszów,

matplotlib.pyplot.switch_backend(newbackend)
Ali Erkan
źródło