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