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:

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:

  1. Configuração rcParams["backend"]em seu matplotlibrcarquivo:

    backend : qtagg   # use pyqt with antigrain (agg) rendering
    

    Consulte também Personalizando Matplotlib com folhas de estilo e rcParams .

  2. Configurando oMPLBACKENDvariá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 qualquer matplotlibrc , mesmo se houver um matplotlibrcem seu diretório de trabalho atual. Portanto, definindoMPLBACKEND globalmente, por exemplo, em seu .bashrcou .profile, é desencorajado, pois pode levar a um comportamento contra-intuitivo.

  3. 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 , a usemenos 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 .

PDF

pdf

gráficos vetoriais -- Saída em Portable Document Format .

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 .%matplotlib qt

ipympl

Renderização Agg incorporada em um widget Jupyter (requer ipympl ). Esse back-end pode ser habilitado em um notebook Jupyter com .%matplotlib ipympl

GTK3Agg

Renderização agregada para uma tela GTK 3.x (requer PyGObject e pycairo ). Este back-end pode ser ativado no IPython com .%matplotlib gtk3

GTK4Agg

Renderização agregada para uma tela GTK 4.x (requer PyGObject e pycairo ). Este back-end pode ser ativado no IPython com .%matplotlib gtk4

Mac OS X

Renderização Agg em uma tela Cocoa no OSX. Este back-end pode ser ativado no IPython com .%matplotlib osx

TkAgg

Renderização Agg para uma tela Tk (requer TkInter ). Este back-end pode ser ativado no IPython com .%matplotlib tk

nbAgg

Incorpore uma figura interativa em um notebook clássico Jupyter. Esse back-end pode ser ativado em notebooks Jupyter via .%matplotlib notebook

WebAgg

On show()iniciará um servidor tornado com uma figura interativa.

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 .%matplotlib wx

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').