Figuras interativas #

Ao trabalhar com dados, a interatividade pode ser inestimável. As ferramentas de panorâmica/zoom e localização do mouse incorporadas às janelas da GUI do Matplotlib geralmente são suficientes, mas você também pode usar o sistema de eventos para criar ferramentas personalizadas de exploração de dados.

O Matplotlib é fornecido com back- ends vinculados a vários kits de ferramentas GUI (Qt, Tk, Wx, GTK, macOS, JavaScript) e pacotes de terceiros fornecem associações ao kivy e ao Jupyter Lab . Para que as figuras respondam aos eventos de mouse, teclado e pintura, o loop de eventos da GUI precisa ser integrado a um prompt interativo. Recomendamos o uso do IPython (veja abaixo ).

O pyplotmódulo fornece funções para criar explicitamente figuras que incluem ferramentas interativas, uma barra de ferramentas, uma dica de ferramenta e teclas de atalho :

pyplot.figure

Cria um novo vazio Figureou seleciona uma figura existente

pyplot.subplots

Cria um novo Figuree o preenche com uma grade deAxes

pyplottem uma noção de "A Figura Atual" que pode ser acessada através pyplot.gcfe uma noção de "Os Eixos Atuais" acessada através de pyplot.gca. Quase todas as funções pyplotpassam pelo Figure/ atual Axes(ou criam um) conforme apropriado.

O Matplotlib mantém uma referência a todas as figuras abertas criadas por meio de pyplot.figureou pyplot.subplotspara que as figuras não sejam coletadas como lixo. Figures podem ser fechados e cancelados pyplotindividualmente via pyplot.close; todos os s abertos Figurepodem ser fechados via plt.close('all').

Para mais discussões sobre o sistema de eventos do Matplotlib e loops de eventos integrados, leia:

Integração do IPython #

Recomendamos o uso do IPython para um shell interativo. Além de todos os seus recursos (preenchimento de guia aprimorado, mágicas, edição de várias linhas, etc.), ele também garante que o loop de eventos do kit de ferramentas da GUI seja integrado adequadamente à linha de comando (consulte Integração do prompt de comando ).

Neste exemplo, criamos e modificamos uma figura por meio de um prompt do IPython. A figura é exibida em uma janela QtAgg GUI. Para configurar a integração e habilitar o modo interativo use a %matplotlibmágica:

In [1]: %matplotlib
Using matplotlib backend: QtAgg

In [2]: import matplotlib.pyplot as plt

Crie uma nova janela de figura:

In [3]: fig, ax = plt.subplots()

Adicione um gráfico de linha dos dados à janela:

In [4]: ln, = ax.plot(range(5))

Altere a cor da linha de azul para laranja:

In [5]: ln.set_color('orange')

Se você deseja desabilitar o redesenho automático da plotagem:

In [6]: plt.ioff()

Se você deseja reativar o redesenho automático da plotagem:

In [7]: plt.ion()

Em versões recentes de Matplotlibe IPython, basta importar matplotlib.pyplote chamar pyplot.ion. É garantido que o uso da %mágica funcionará em todas as versões do Matplotlib e do IPython.

Modo interativo #

pyplot.ion

Ative o modo interativo.

pyplot.ioff

Desative o modo interativo.

pyplot.isinteractive

Retorna se os gráficos são atualizados após cada comando de plotagem.

pyplot.show

Exibir todas as figuras abertas.

pyplot.pause

Execute o loop de eventos da GUI para intervalos de segundos.

Controles do modo interativo:

  • se as figuras criadas são mostradas automaticamente

  • se as alterações nos artistas acionam automaticamente o redesenho de figuras existentes

  • quando pyplot.show()retorna se nenhum argumento for fornecido: imediatamente ou após todas as figuras terem sido fechadas

Se estiver no modo interativo:

  • figuras recém-criadas serão exibidas imediatamente

  • as figuras serão redesenhadas automaticamente quando os elementos forem alterados

  • pyplot.show()mostra os números e retorna imediatamente

Se não estiver no modo interativo:

Se você estiver no modo não interativo (ou criou figuras no modo não interativo), pode ser necessário chamar explicitamente pyplot.show para exibir as janelas em sua tela. Se você deseja executar apenas o loop de eventos da GUI por um período fixo de tempo, pode usar pyplot.pause. Isso bloqueará o progresso do seu código como se você tivesse chamado time.sleep, garantirá que a janela atual seja mostrada e redesenhada, se necessário, e executará o loop de eventos da GUI pelo período de tempo especificado.

O loop de eventos da GUI sendo integrado ao seu prompt de comando e as figuras no modo interativo são independentes umas das outras. Se você usar pyplot.ion, mas não organizou a integração do loop de eventos, suas figuras aparecerão, mas não serão interativas enquanto o prompt estiver aguardando entrada. Você não poderá fazer pan/zoom e a figura pode nem mesmo renderizar (a janela pode aparecer preta, transparente ou como um instantâneo da área de trabalho abaixo dela). Por outro lado, se você configurar a integração do loop de eventos, as figuras exibidas serão responsivas enquanto aguardam a entrada no prompt, independentemente do "modo interativo" do pyplot.

Não importa qual combinação de configuração de modo interativo e integração de loop de eventos, as figuras serão responsivas se você usar pyplot.show(block=True), pyplot.pauseou executar o loop principal da GUI de alguma outra maneira.

Aviso

Com Figure.showele é possível exibir uma figura na tela sem iniciar o loop de eventos e sem estar no modo interativo. Isso pode funcionar (dependendo do kit de ferramentas da GUI), mas provavelmente resultará em uma figura não responsiva.

IU padrão #

As janelas criadas por pyplotpossuem uma barra de ferramentas interativa com botões de navegação e uma leitura dos valores dos dados para os quais o cursor está apontando. Vários atalhos de teclado úteis são registrados por padrão.

Outros prompts do Python #

O modo interativo funciona no prompt padrão do Python:

>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>

no entanto, isso não garante que o gancho de evento esteja instalado corretamente e suas figuras podem não responder. Consulte a documentação do seu kit de ferramentas GUI para obter detalhes.

Cadernos Jupyter / JupyterLab #

Observação

Para obter a funcionalidade interativa descrita aqui, você deve usar um back-end interativo. O back-end padrão em notebooks, o back-end inline, não é. backend_inline renderiza a figura uma vez e insere uma imagem estática no notebook quando a célula é executada. Como as imagens são estáticas, elas não podem ser panorâmicas/ampliadas, receber entrada do usuário ou ser atualizadas de outras células.

Para obter figuras interativas no notebook 'clássico' ou no laboratório Jupyter, use o backend ipympl (deve ser instalado separadamente) que usa a estrutura ipywidget . Se ipymplestiver instalado, use a mágica:

%matplotlib widget

para selecioná-lo e habilitá-lo.

Se você só precisa usar o caderno clássico, pode usar

%matplotlib notebook

que usa o back- backend_nbaggend fornecido pelo Matplotlib; no entanto, o nbagg não funciona no Jupyter Lab.

GUIs + Jupyter #

Você também pode usar um dos ipymplback-ends não GUI em um Jupyter Notebook. Se você estiver executando seu kernel Jupyter localmente, a janela da GUI será exibida em sua área de trabalho adjacente ao seu navegador da web. Se você executar seu notebook em um servidor remoto, o kernel tentará abrir a janela GUI no computador remoto. A menos que você tenha planejado encaminhar o xserver de volta para sua área de trabalho, você não poderá ver ou interagir com a janela. Também pode gerar uma exceção.

PyCharm, Spyder e VSCode #

Muitos IDEs têm integração integrada com o Matplotlib, consulte a documentação deles para obter detalhes de configuração.