Wie man das Backend in matplotlib / Python wechselt

Ich habe mit dem folgenden Problem zu kämpfen. Ich muss Berichte generieren, die aus einer Sammlung von Diagrammen bestehen. Mit einer Ausnahme werden alle diese Diagramme mit dem Matplotlib-Standard-Backend (TkAgg) erstellt. Ein Diagramm muss mit dem Cairo-Backend erstellt werden. Der Grund dafür ist, dass ich ein igraph-Diagramm zeichne, das nur mit Cairo gezeichnet werden kann.

Das Problem ist, dass ich Backends nicht im laufenden Betrieb ändern kann, zum Beispiel funktioniert Folgendes nicht:
matplotlib.pyplot.switch_backend('cairo.png') (Ich weiß, dass die switch_backend-Funktionalität experimentell ist)

und ich habe auch versuchtmatplotlib.use("cairo.png") Dies führt jedoch zu Importproblemen, da dasmatplotlib.use("cairo.png") Anweisung sollte vor dem Import kommenmatplotlib.pyplot. aber ich brauche zwei verschiedene backends im laufe des lebens des skripts.

So meine Frage ist, hat jemand ein Code-Snippet, das zeigt, wie man das Backend in Matplotlib wechselt?

Vielen Dank

UPDATE: Ich habe ein Snippet geschrieben, das matplotlib lädt, das Standard-Backend anzeigt, matplotlib entlädt, es neu lädt und das Backend ändert:

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

Aber ist das wirklich der richtige Weg?

UPDATE 2: Ich hatte gestern ein schwerwiegendes Brain Freeze ... Die einfachste und naheliegendste Lösung ist, das Cairo-Backend für alle Charts zu verwenden und das Backend überhaupt nicht zu wechseln:)

UPDATE 3: Eigentlich ist es immer noch ein Problem, also jeder, der weiß, wie man Matplotlib-Backends dynamisch umschaltet ... bitte poste deine Antwort.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage