¿Cómo puedo configurar el ‘backend’ de matplotlib?

4 minutos de lectura

avatar de usuario de user504909
usuario504909

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 libagg pero no funciona.
  • Traté de usar otro argumento de backend como ‘GTK’ y ‘TkAgg’.
  • lo instalé python-gtk2-dev paquete, pero aún así el error está debajo.
  • ¿Alguien puede decirme un argumento de back-end ejecutable y su biblioteca de dependencia?

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

Avatar de usuario de Andrea Spadaccini
andrea spadaccini

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

AGG backend es para escribir en un archivo, no para renderizar en una ventana. Ver el Preguntas frecuentes sobre back-end en el sitio web 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 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 con otra GUI backendsen este orden:

  • TkAgg
  • wxAgg
  • Qt5Agg
  • Qt4Agg

  • muchas gracias, el personal equivocado que hice fue configurar matplotlib antes de obtener PyGTK

    – usuario504909

    9 de febrero de 2011 a las 3:40


  • como comentario adicional, probaría QTAgg en último lugar, ya que apunta a QT3 y probablemente quedará obsoleto a mediano plazo.

    – tacoswell

    2 mayo 2013 a las 19:34

  • ¿Por qué dice específicamente ‘en este orden’ cuando indica usar otros backends de GUI? ¿Cuáles son las diferencias entre las opciones de backend?

    – SamC

    3 de junio de 2022 a las 12:06

  • ‘Qt5Agg’ funcionó para mí (python 3.8)

    – YosefBro

    22 de junio de 2022 a las 9:50

  • Dependiendo de su sistema operativo, es posible que primero deba instalar las bibliotecas apropiadas para los backends (por ejemplo, tk en arch linux para TkAgg).

    – Scriddie

    10 de enero a las 13:09

FYI, descubrí que necesitaba poner matplotlib.use('Agg') primero en el orden de importación de Python. Para lo que estaba haciendo (las pruebas unitarias tenían que 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.

  • Debo hacer lo mismo que me preocupa mucho. ¿Ha encontrado alguna vez otra solución elegante?

    – QM.py

    10 de diciembre de 2017 a las 13:41

  • Y descubrí que es importante que esté en lo más alto (no después de otras importaciones). +1.

    – Ryan

    8 de agosto de 2018 a las 3:13

  • Sí, esto tiene que ser absolutamente lo primero que haga antes de cualquier otra importación de matplotlib.

    – Jake Cowton

    7 oct 2018 a las 12:24

Esto también se puede establecer 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 el documentación.

Los errores que publicaste no están relacionados. El primero se debe a que seleccionaste un backend que no está diseñado para uso interactivo, es decir, agg. Todavía puede usar (y debe usar) aquellos para la generación de gráficos en scripts que no requieren 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 interfaz gráfica de usuario, como Qt4Agg (necesita Qt y AGG), GTKAgg (GTK y AGG) o WXAgg (wxWidgets y Agg).

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

Antes de iniciar python, puedes hacerlo en bash

export MPLBACKEND=TkAgg

Avatar de usuario de Grizzle
Gimotear

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

Usa lo siguiente:

matplotlib.use('WebAgg')

Avatar de usuario de Anurag Reddy
Anurag Reddy

Para los recién llegados,

matplotlib.pyplot.switch_backend(newbackend)

¿Ha sido útil esta solución?