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