Comment puis-je définir le 'backend' dans matplotlib en Python?

89

Je suis un nouvel utilisateur de matplotlib, ma plate-forme est Ubuntu 10.04 Python 2.6.5

C'est mon code

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

L'erreur est:

/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()))
  • J'ai installé la bibliothèque Anti-Grain Geometry apt-get install libaggmais cela ne fonctionne pas.
  • J'ai essayé d'utiliser d'autres arguments de backend comme «GTK» et «TkAgg».
  • J'ai installé le python-gtk2-devpackage, mais l'erreur est toujours ci-dessous.
  • Quelqu'un peut-il me dire un argument backend exécutable et sa bibliothèque de dépendances?

Voici l'erreur:

>>> 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
la source

Réponses:

89

Votre backend actuellement sélectionné, 'agg', ne prend pas en charge show ().

AGGle backend est pour écrire dans un fichier, pas pour le rendu dans une fenêtre. Consultez la FAQ du backend sur le site Web de matplotlib.

ImportError: aucun module nommé _backend_gdk

Pour la deuxième erreur, peut-être que votre distribution matplotlib n'est pas compilée avec le support GTK, ou vous manquez le package PyGTK. Essayez de l'installer.

Appelez-vous la show()méthode dans un terminal ou une application qui a accès à un environnement graphique?

Essayez d'autres backends GUI, dans cet ordre:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Andrea Spadaccini
la source
merci beaucoup, le mauvais personnel que j'ai fait est de configurer matplotlib avant d'obtenir PyGTK
user504909
1
En guise de commentaire parallèle, j'essaierais QTAgg en dernier car cela cible QT3 et sera probablement obsolète à moyen terme.
tacaswell
29

FYI, j'ai trouvé que je devais mettre en matplotlib.use('Agg')premier dans l'ordre d'importation Python. Pour ce que je faisais (les tests unitaires devaient être sans tête), cela signifiait

import matplotlib
matplotlib.use('Agg')

en haut de mon script de test principal. Je n'ai eu à toucher à aucun autre fichier.

Ben
la source
Je dois faire la même chose qui me dérange beaucoup. Avez-vous déjà trouvé une autre solution elegrant?
QM.py
Et j'ai trouvé qu'il était important qu'il soit tout en haut (pas après certaines autres importations). +1.
Ryan
Oui, cela doit être la première chose à faire avant toute autre importation de matplotlib.
JakeCowton
19

Cela peut également être défini dans le fichier de configuration matplotlibrc(comme expliqué dans le message d'erreur), par exemple:

# 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

De cette façon, le backend n'a pas besoin d'être codé en dur si le code est partagé avec d'autres personnes. Pour plus d'informations, consultez la documentation .

BenC
la source
7

Les erreurs que vous avez publiées ne sont pas liées. Le premier est dû à la sélection d'un backend qui n'est pas destiné à une utilisation interactive, c'est-à-dire agg. Vous pouvez toujours utiliser (et devriez utiliser) ceux pour la génération de tracés dans des scripts qui ne nécessitent pas d'interaction de l'utilisateur.

Si vous voulez un environnement de laboratoire interactif, comme dans Matlab / Pylab, vous importerez évidemment un backend supportant l'utilisation de l'interface graphique, tel que Qt4Agg (nécessite Qt et AGG), GTKAgg (GTK un AGG) ou WXAgg (wxWidgets et Agg).

Je commencerais par essayer d'utiliser WXAgg, à part cela, cela dépend vraiment de la façon dont vous avez installé Python et matplotlib (source, package, etc.)

Jim Brissom
la source
3

Avant de démarrer python, vous pouvez faire en bash

export MPLBACKEND=TkAgg
Friedrich
la source
3

Vous pouvez également essayer de visualiser le graphique dans un navigateur.

Utilisez le suivant:

matplotlib.use('WebAgg')
Gris
la source
2

J'ai frappé ceci en essayant de compiler python, numpy, scipy, matplotlib dans mon propre VIRTUAL_ENV

Avant d'installer matplotlib, vous devez construire et installer: pygobject pycairo pygtk

Et puis faites-le avec matplotlib: Avant de construire matplotlib, vérifiez avec 'python ./setup.py build --help' si le backend 'gtkagg' est activé. Puis construisez et installez

Avant d'exporter PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

btwe
la source
2

Pour les nouveaux arrivants,

matplotlib.pyplot.switch_backend(newbackend)
Ali Erkan
la source