Backends #
O que é um back-end? #
Muita documentação no site e nas listas de discussão refere-se ao "backend" e muitos novos usuários ficam confusos com esse termo. O Matplotlib visa muitos casos de uso e formatos de saída diferentes. Algumas pessoas usam o Matplotlib interativamente a partir do shell Python e exibem janelas de plotagem quando digitam comandos. Algumas pessoas executam notebooks Jupyter e desenham gráficos embutidos para análise rápida de dados. Outros incorporam Matplotlib em interfaces gráficas de usuário como PyQt ou PyGObject para criar aplicativos avançados. Algumas pessoas usam o Matplotlib em scripts em lote para gerar imagens postscript a partir de simulações numéricas, e outras ainda executam servidores de aplicativos da Web para fornecer gráficos dinamicamente.
Para dar suporte a todos esses casos de uso, o Matplotlib pode direcionar diferentes saídas e cada um desses recursos é chamado de back-end; o "front-end" é o código voltado para o usuário, ou seja, o código de plotagem, enquanto o "back-end" faz todo o trabalho duro nos bastidores para fazer a figura. Existem dois tipos de back-ends: back-ends de interface do usuário (para uso em PyQt/PySide, PyGObject, Tkinter, wxPython ou macOS/Cocoa); também referidos como "backends interativos") e backends de cópia impressa para criar arquivos de imagem (PNG, SVG, PDF, PS; também referidos como "backends não interativos").
Selecionando um back-end #
Existem três maneiras de configurar seu back-end:
O
rcParams["backend"]
parâmetro em seumatplotlibrc
arquivoo
MPLBACKEND
variável de ambienteA função
matplotlib.use()
Abaixo está uma descrição mais detalhada.
Se houver mais de uma configuração presente, a última da lista terá precedência; por exemplo, a chamada matplotlib.use()
substituirá a configuração em seu arquivo matplotlibrc
.
Sem um back-end definido explicitamente, o Matplotlib detecta automaticamente um back-end utilizável com base no que está disponível em seu sistema e se um loop de eventos da GUI já está em execução. O primeiro back-end utilizável na lista a seguir é selecionado: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. O último, Agg, é um back-end não interativo que só pode gravar em arquivos. Ele é usado no Linux, se o Matplotlib não puder se conectar a um monitor X ou a um monitor Wayland.
Aqui está uma descrição detalhada dos métodos de configuração:
Configuração
rcParams["backend"]
em seumatplotlibrc
arquivo:backend : qtagg # use pyqt with antigrain (agg) rendering
Consulte também Personalizando Matplotlib com folhas de estilo e rcParams .
Configurando o
MPLBACKEND
variável de ambiente:Você pode definir a variável de ambiente para seu shell atual ou para um único script.
No Unix:
> export MPLBACKEND=qtagg > python simple_plot.py > MPLBACKEND=qtagg python simple_plot.py
No Windows, apenas o primeiro é possível:
> set MPLBACKEND=qtagg > python simple_plot.py
Definir essa variável de ambiente substituirá o
backend
parâmetro em qualquermatplotlibrc
, mesmo se houver ummatplotlibrc
em seu diretório de trabalho atual. Portanto, definindoMPLBACKEND
globalmente, por exemplo, em seu.bashrc
ou.profile
, é desencorajado, pois pode levar a um comportamento contra-intuitivo.Se o seu script depende de um back-end específico, você pode usar a função
matplotlib.use()
:import matplotlib matplotlib.use('qtagg')
Isso deve ser feito antes que qualquer figura seja criada, caso contrário, o Matplotlib pode falhar ao alternar o back-end e gerar um ImportError.
O uso
use
exigirá alterações em seu código se os usuários quiserem usar um back-end diferente. Portanto, você deve evitar chamar explicitamente , ause
menos que seja absolutamente necessário.
Os back-ends integrados #
Por padrão, o Matplotlib deve selecionar automaticamente um back-end padrão que permita trabalho interativo e plotagem de scripts, com saída para a tela e/ou para um arquivo, portanto, pelo menos inicialmente, você não precisará se preocupar com o back-end. A exceção mais comum é se sua distribuição do Python vier sem tkinter
e você não tiver nenhum outro kit de ferramentas GUI instalado. Isso acontece em certas distribuições Linux, onde você precisa instalar um pacote Linux chamado python-tk
(ou similar).
Se, no entanto, você quiser escrever interfaces gráficas de usuário ou um servidor de aplicativos da web ( Incorporação em um servidor de aplicativos da web (Flask) ), ou precisar entender melhor o que está acontecendo, continue lendo. Para tornar as coisas mais fáceis de personalizar para interfaces gráficas de usuário, o Matplotlib separa o conceito de renderizador (a coisa que realmente faz o desenho) da tela (o local para onde o desenho vai). O renderizador canônico para interfaces de usuário é Agg
o que usa a biblioteca Anti-Grain Geometry C++ para fazer uma imagem raster (pixel) da figura; ele é usado por QtAgg
, GTK4Agg
, GTK3Agg
, wxAgg
, TkAgg
e
back- macosx
ends. Um renderizador alternativo é baseado na biblioteca do Cairo, usada por QtCairo
, etc.
Para os mecanismos de renderização, os usuários também podem distinguir entre renderizadores vetoriais ou raster . As linguagens de gráficos vetoriais emitem comandos de desenho como "desenhar uma linha deste ponto a este ponto" e, portanto, são livres de escala. Os back-ends raster geram uma representação em pixel da linha cuja precisão depende de uma configuração de DPI.
Aqui está um resumo dos renderizadores Matplotlib (há um back-end de mesmo nome para cada um; são back-ends não interativos , capazes de gravar em um arquivo):
Renderizador |
Tipos de arquivo |
Descrição |
---|---|---|
AGG |
png |
gráficos raster -- imagens de alta qualidade usando o mecanismo Anti-Grain Geometry . |
PS |
ps, eps |
gráficos vetoriais -- Saída PostScript . |
SVG |
svg |
gráficos vetoriais -- Saída de gráficos vetoriais escaláveis . |
PGF |
pgf, pdf |
gráficos vetoriais -- usando o pacote pgf . |
Cairo |
png, ps, pdf, svg |
raster ou gráficos vetoriais -- usando a biblioteca do Cairo (requer pycairo ou cairocffi ). |
Para salvar gráficos usando back-ends não interativos, use o
matplotlib.pyplot.savefig('filename')
método.
Estas são as interfaces de usuário e as combinações de renderizador suportadas; estes são back- ends interativos , capazes de exibir na tela e usar renderizadores apropriados da tabela acima para gravar em um arquivo:
Processo interno |
Descrição |
---|---|
QtAggGenericName |
Renderização Agg em uma tela Qt (requer PyQt ou Qt para Python , também conhecido como PySide). Este back-end pode ser ativado no IPython com
. |
ipympl |
Renderização Agg incorporada em um widget Jupyter (requer ipympl ). Esse back-end pode ser habilitado em um notebook Jupyter com
. |
GTK3Agg |
Renderização agregada para uma tela GTK 3.x (requer PyGObject e
pycairo ). Este back-end pode ser ativado no IPython com
. |
GTK4Agg |
Renderização agregada para uma tela GTK 4.x (requer PyGObject e
pycairo ). Este back-end pode ser ativado no IPython com
. |
Mac OS X |
Renderização Agg em uma tela Cocoa no OSX. Este back-end pode ser ativado no IPython com . |
TkAgg |
Renderização Agg para uma tela Tk (requer TkInter ). Este back-end pode ser ativado no IPython com . |
nbAgg |
Incorpore uma figura interativa em um notebook clássico Jupyter. Esse back-end pode ser ativado em notebooks Jupyter via
. |
WebAgg |
On |
GTK3Cairo |
Cairo renderizando para uma tela GTK 3.x (requer PyGObject e pycairo ). |
GTK4Cairo |
Cairo renderizando para uma tela GTK 4.x (requer PyGObject e pycairo ). |
wxAgg |
Renderização agregada para uma tela wxWidgets (requer wxPython 4). Este back-end pode ser ativado no IPython com . |
Observação
Os nomes dos back-ends integrados não diferenciam maiúsculas de minúsculas; por exemplo, 'QtAgg' e 'qtagg' são equivalentes.
ipympl #
O ecossistema do widget Jupyter está se movendo muito rápido para oferecer suporte diretamente no Matplotlib. Para instalar o ipympl:
pip install ipympl
ou
conda install ipympl -c conda-forge
Consulte a instalação do ipympl para obter mais detalhes.
Como seleciono a implementação do Qt? #
Os back-ends QtAgg e QtCairo suportam Qt 5 e 6, bem como ambas as ligações Python ( PyQt ou Qt para Python , também conhecido como PySide). Se alguma ligação já tiver sido carregada, ela será usada para o back-end do Qt. Caso contrário, a primeira ligação disponível é usada, na ordem: PyQt6, PySide6, PyQt5, PySide2.
oQT_API
variável de ambiente pode ser definida para substituir a pesquisa quando nada já foi carregado. Pode ser definido como (sem distinção entre maiúsculas e minúsculas) PyQt6, PySide6, PyQt5 ou PySide2 para escolher a versão e a ligação a serem usadas. Se a implementação escolhida não estiver disponível, o back-end do Qt falhará ao carregar sem tentar nenhuma outra implementação do Qt. Veja Ligações Qt para mais detalhes.
Usando back-ends não integrados #
De forma mais geral, qualquer back-end importável pode ser selecionado usando qualquer um dos métodos acima. Se name.of.the.backend
for o módulo que contém o back-end, use module://name.of.the.backend
como o nome do back-end, por exemplo,
matplotlib.use('module://name.of.the.backend')
.