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

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

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.


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ą .


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.)


3

Przed uruchomieniem Pythona możesz to zrobić w bash

export MPLBACKEND=TkAgg

3

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

Użyj następujących:

matplotlib.use('WebAgg')

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.