¿Cómo puedo configurar el 'backend' en matplotlib en Python?

89

Soy nuevo usuario de matplotlib, mi plataforma es Ubuntu 10.04 Python 2.6.5

Este es mi codigo

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

El error es:

/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()))
  • Instalé la biblioteca Anti-Grain Geometry apt-get install libaggpero no funciona.
  • Traté de usar otro argumento de backend como 'GTK' y 'TkAgg'.
  • Instalé el python-gtk2-devpaquete, pero el error sigue apareciendo a continuación.
  • ¿Alguien puede decirme un argumento de backend ejecutable y su biblioteca de dependencias?

Aquí está el error:

>>> 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
usuario504909
fuente

Respuestas:

89

Su backend seleccionado actualmente, 'agg' no es compatible con show ().

AGGEl backend sirve para escribir en un archivo, no para renderizarlo en una ventana. Consulte las preguntas frecuentes sobre el backend en el sitio web de matplotlib.

ImportError: ningún módulo llamado _backend_gdk

Para el segundo error, tal vez su distribución matplotlib no esté compilada con soporte GTK o se pierda el paquete PyGTK. Intenta instalarlo.

¿Llamas al show()método dentro de una terminal o aplicación que tiene acceso a un entorno gráfico?

Pruebe otros backends de GUI, en este orden:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Andrea Spadaccini
fuente
muchas gracias, el personal equivocado que hice fue configurar matplotlib antes de obtener PyGTK
user504909
1
como comentario lateral, probaría QTAgg por último, ya que apunta a QT3 y probablemente quedará obsoleto a medio plazo.
tacaswell
29

Para su información, descubrí que necesitaba poner matplotlib.use('Agg')primero en el orden de importación de Python. Para lo que estaba haciendo (las pruebas unitarias debían ser sin cabeza) eso significaba poner

import matplotlib
matplotlib.use('Agg')

en la parte superior de mi script de prueba maestro. No tuve que tocar ningún otro archivo.

Ben
fuente
Debo hacer lo mismo que me preocupa mucho. ¿Alguna vez ha encontrado otra solución elegante?
QM.py
Y descubrí que es importante que esté en la cima (no después de algunas otras importaciones). +1.
Ryan
Sí, esto tiene que ser lo primero que haga antes de cualquier otra importación de matplotlib.
JakeCowton
19

Esto también se puede configurar en el archivo de configuración matplotlibrc(como se explica en el mensaje de error), por ejemplo:

# 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 esa forma, no es necesario codificar el backend si el código se comparte con otras personas. Para obtener más información, consulte la documentación .

BenC
fuente
7

Los errores que publicó no están relacionados. El primero se debe a que selecciona un backend que no está diseñado para uso interactivo, es decir, agg. Aún puede usar (y debe usar) aquellos para la generación de gráficos en scripts que no requieren la interacción del usuario.

Si desea un entorno de laboratorio interactivo, como en Matlab / Pylab, obviamente importaría un backend compatible con el uso de la interfaz gráfica de usuario, como Qt4Agg (necesita Qt y AGG), GTKAgg (GTK y AGG) o WXAgg (wxWidgets y Agg).

Comenzaría por intentar usar WXAgg, aparte de eso, realmente depende de cómo instaló Python y matplotlib (fuente, paquete, etc.)

Jim Brissom
fuente
3

Antes de iniciar Python, puedes hacerlo en bash

export MPLBACKEND=TkAgg
Friedrich
fuente
3

También puede intentar ver el gráfico en un navegador.

Utilice lo siguiente:

matplotlib.use('WebAgg')
Gimotear
fuente
2

Golpeé esto al intentar compilar python, numpy, scipy, matplotlib en mi propio VIRTUAL_ENV

Antes de instalar matplotlib, debe compilar e instalar: pygobject pycairo pygtk

Y luego hágalo con matplotlib: antes de construir matplotlib, verifique con 'python ./setup.py build --help' si el backend 'gtkagg' está habilitado. Luego construye e instala

Antes de exportar PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

por cierto
fuente
2

Para los recién llegados,

matplotlib.pyplot.switch_backend(newbackend)
Ali Erkan
fuente