xticks pyplot outside font example python matplotlib backend cairo

pyplot - Cómo cambiar los back-end en matplotlib/Python



plot title font size matplotlib (5)

Estoy luchando con el siguiente problema. Necesito generar informes que consistan en una colección de gráficos. Todos estos gráficos, excepto uno, están hechos usando el backend predeterminado de Matplotlib (TkAgg). Hay que hacer una tabla usando el backend de El Cairo, la razón es que estoy trazando un gráfico de igrafas y eso solo se puede trazar utilizando Cairo.

El problema es que no puedo cambiar los backends sobre la marcha, por ejemplo, lo siguiente no funciona:
matplotlib.pyplot.switch_backend(''cairo.png'') (Sé que la funcionalidad switch_backend es experimental)

y también probé matplotlib.use("cairo.png") pero esto genera problemas de importación ya que la matplotlib.use("cairo.png") debe aparecer antes de importar matplotlib.pyplot . pero necesito dos backends diferentes a lo largo de la vida del script.

Entonces, mi pregunta es, ¿alguien tiene un fragmento de código que muestra cómo cambiar el backend en Matplotlib?

¡Muchas gracias!

ACTUALIZACIÓN: He escrito un fragmento que carga matplotlib, muestra el motor por defecto, descarga matplotlib, lo recarga y cambia el servidor:

import matplotlib import matplotlib.pyplot as plt import sys print matplotlib.pyplot.get_backend() modules = [] for module in sys.modules: if module.startswith(''matplotlib''): modules.append(module) for module in modules: sys.modules.pop(module) import matplotlib matplotlib.use("cairo.png") import matplotlib.pyplot as plt print matplotlib.pyplot.get_backend()

pero, ¿esta es realmente la manera de hacerlo?

ACTUALIZACIÓN 2: Ayer tuve un congelamiento de cerebro serio ... La solución más simple y obvia es usar el back-end de El Cairo para todos los gráficos y no cambiar el back-end en absoluto :)

ACTUALIZACIÓN 3: En realidad, sigue siendo un problema para que cualquiera que sepa cómo cambiar dinámicamente los componentes de matplotlib ... por favor publique su respuesta.


¿Por qué no utilizar la función incorporada de reload ( importlib.reload en Python 3)?

import matplotlib matplotlib.use(''agg'') matplotlib = reload(matplotlib) matplotlib.use(''cairo.png'')


Entonces no estoy completamente seguro de si esto es lo que estás buscando.

Puedes cambiar tu backend a través del archivo matplotlibrc que contiene ciertas configuraciones para tu matplotlib.

En tu script puedes poner:

matplotlib.rcParams[''backend''] = ''TkAgg''

o algo así para cambiar entre backends.


Hay una característica "experimental":

import matplotlib.pyplot as p p.switch_backend(''newbackend'')

tomado de matplotlib doc .

Cambia el backend predeterminado a newbackend. Esta característica es experimental , y solo se espera que funcione cambiando a un backend de imagen. Por ejemplo, si tiene un montón de scripts PostScript que desea ejecutar desde una sesión de ipython interactivo, es posible que desee cambiar al backend de la PS antes de ejecutarlos para evitar tener una gran cantidad de ventanas emergentes de GUI. Si intenta cambiar de forma interactiva de un servidor de GUI a otro, explotará. Llamar a este comando cerrará todas las ventanas abiertas.


Seis años después y me encontré con un problema similar, al tratar de decidir qué backend estaba disponible para usar.
Este fragmento de código funciona bien para mí:

import matplotlib gui_env = [''TKAgg'',''GTKAgg'',''Qt4Agg'',''WXAgg''] for gui in gui_env: try: print "testing", gui matplotlib.use(gui,warn=False, force=True) from matplotlib import pyplot as plt break except: continue print "Using:",matplotlib.get_backend() Using: GTKAgg

Como puede deducir, intercambiar el backend es tan simple como volver a importar matplotlib.pyplot después de forzar el nuevo backend

matplotlib.use(''WXAgg'',warn=False, force=True) from matplotlib import pyplot as plt print "Switched to:",matplotlib.get_backend() Switched to: WXAgg

Para aquellos que todavía tienen problemas, este código imprimirá el:
lista de backends Non Gui;
la lista de backends Gui;
y luego intente utilizar cada backend Gui para ver si está presente y funcionando.

import matplotlib gui_env = [i for i in matplotlib.rcsetup.interactive_bk] non_gui_backends = matplotlib.rcsetup.non_interactive_bk print ("Non Gui backends are:", non_gui_backends) print ("Gui backends I will test for", gui_env) for gui in gui_env: print ("testing", gui) try: matplotlib.use(gui,warn=False, force=True) from matplotlib import pyplot as plt print (" ",gui, "Is Available") plt.plot([1.5,2.0,2.5]) fig = plt.gcf() fig.suptitle(gui) plt.show() print ("Using ..... ",matplotlib.get_backend()) except: print (" ",gui, "Not found")


También podrías tener un proceso de Python diferente para hacer ese diagrama, posiblemente con la ayuda de pickle o joblib .