Estou lutando com o seguinte problema. Preciso gerar relatórios que consistam em uma coleção de gráficos. Todos esses gráficos, exceto um, são feitos usando o backend padrão do Matplotlib (TkAgg). Um gráfico precisa ser feito usando o back-end do Cairo, a razão é que estou traçando um gráfico igraph e que só pode ser traçado usando o Cairo.
O problema é que não consigo alterar back-ends dinamicamente, por exemplo, o seguinte não funciona:
matplotlib.pyplot.switch_backend('cairo.png')
(sei que a funcionalidade switch_backend é experimental)
e eu também tentei, matplotlib.use("cairo.png")
mas isso leva a problemas de importação como omatplotlib.use("cairo.png")
instrução deve vir antes da importação matplotlib.pyplot
. mas preciso de dois back-ends diferentes ao longo da vida do script.
Então, minha pergunta é se alguém tem um trecho de código que mostra como alternar o back-end no Matplotlib?
Muito obrigado!
ATUALIZAÇÃO: escrevi um snippet que carrega matplotlib, mostra o back-end padrão, descarrega matplotlib, recarrega e altera o back-end:
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()
mas essa é realmente a maneira de fazer isso?
ATUALIZAÇÃO 2: Eu tive um congelamento cerebral sério ontem ... A solução simples e mais óbvia é usar o back-end do Cairo para todos os gráficos e não mudar o back-end de forma alguma :)
ATUALIZAÇÃO 3: Na verdade, ainda é um problema, então qualquer pessoa que saiba como alternar dinamicamente os back-ends do matplotlib ... por favor, poste sua resposta.
pyplot.switch_backends()
. Pode não funcionar no seu caso.