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 seumatplotlibrcarquivoo
MPLBACKENDvariá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 seumatplotlibrcarquivo:backend : qtagg # use pyqt with antigrain (agg) rendering
Consulte também Personalizando Matplotlib com folhas de estilo e rcParams .
Configurando o
MPLBACKENDvariá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
backendparâmetro em qualquermatplotlibrc, mesmo se houver ummatplotlibrcem seu diretório de trabalho atual. Portanto, definindoMPLBACKENDglobalmente, por exemplo, em seu.bashrcou.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
useexigirá alterações em seu código se os usuários quiserem usar um back-end diferente. Portanto, você deve evitar chamar explicitamente , ausemenos 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 tkintere 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 é Aggo que usa a biblioteca Anti-Grain Geometry C++ para fazer uma imagem raster (pixel) da figura; ele é usado por QtAgg, GTK4Agg, GTK3Agg, wxAgg, TkAgge
back- macosxends. 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_APIvariá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.backendfor o módulo que contém o back-end, use module://name.of.the.backendcomo o nome do back-end, por exemplo,
matplotlib.use('module://name.of.the.backend').