Zmagam się z następującym problemem. Muszę wygenerować raporty składające się ze zbioru wykresów. Wszystkie te wykresy, z wyjątkiem jednego, są tworzone przy użyciu domyślnego zaplecza Matplotlib (TkAgg). Jeden wykres musi zostać utworzony przy użyciu zaplecza Cairo, ponieważ kreślę wykres igraph, który można wykreślić tylko za pomocą Cairo.
Problem polega na tym, że nie mogę zmienić backendów w locie, na przykład nie działa:
matplotlib.pyplot.switch_backend('cairo.png')
(wiem, że funkcja switch_backend jest eksperymentalna)
i próbowałem również, matplotlib.use("cairo.png")
ale prowadzi to do problemów z importem, ponieważ matplotlib.use("cairo.png")
instrukcja powinna pojawić się przed importem matplotlib.pyplot
. ale potrzebuję dwóch różnych backendów w trakcie życia skryptu.
Więc moje pytanie brzmi: czy ktoś ma fragment kodu, który pokazuje, jak przełączyć zaplecze w Matplotlib?
Dzięki wielkie!
AKTUALIZACJA: Napisałem fragment, który ładuje matplotlib, pokazuje domyślny backend, zwalnia matplotlib, przeładowuje go i zmienia backend:
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()
ale czy to naprawdę jest sposób na zrobienie tego?
AKTUALIZACJA 2: Wczoraj miałem poważne zamrożenie mózgu ... Prostym i najbardziej oczywistym rozwiązaniem jest użycie backendu Cairo do wszystkich wykresów i nie przełączanie backendu w ogóle :)
AKTUALIZACJA 3: Właściwie nadal jest to problem, więc każdy, kto wie, jak dynamicznie przełączać backendy matplotlib ... proszę opublikować swoją odpowiedź.
pyplot.switch_backends()
. To może nie działać w Twoim przypadku.