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