Как переключать бэкэнды в matplotlib / Python
Я борюсь со следующей проблемой. Мне нужно создавать отчеты, которые состоят из коллекции графиков. Все эти диаграммы, кроме одной, сделаны с использованием стандартного бэкэнда Matplotlib (TkAgg). Один график должен быть сделан с использованием бэкэнда Cairo, причина в том, что я строю график igraph, и его можно построить только с помощью Cairo.
Проблема в том, что я не могу изменить бэкэнды на лету, например, следующее не работает:matplotlib.pyplot.switch_backend('cairo.png')
(Я знаю, что функциональность switch_backend является экспериментальной)
и я тоже пыталсяmatplotlib.use("cairo.png")
но это приводит к проблемам с импортом, так какmatplotlib.use("cairo.png")
заявление должно прийти перед импортомmatplotlib.pyplot
, но мне нужны два разных бэкэнда на протяжении всей жизни сценария.
Итак, у меня вопрос: есть ли у кого-нибудь фрагмент кода, показывающий, как переключить бэкэнд в Matplotlib?
Спасибо!
ОБНОВЛЕНИЕ: я написал фрагмент, который загружает matplotlib, показывает бэкэнд по умолчанию, выгружает matplotlib, перезагружает его и изменяет бэкэнд:
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()
но так ли это на самом деле?
ОБНОВЛЕНИЕ 2: у меня вчера было серьезное замораживание мозгов ... Самое простое и очевидное решение - использовать бэкэнд Каира для всех графиков, а не переключать бэкенд вообще :)
ОБНОВЛЕНИЕ 3: На самом деле, это все еще проблема, поэтому любой, кто знает, как динамически переключать бэкэнды matplotlib ..., пожалуйста, опубликуйте свой ответ.