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 pyplot
mó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
Figure
ou seleciona uma figura existentepyplot.subplots
pyplot
tem uma noção de "A Figura Atual" que pode ser acessada através pyplot.gcf
e uma noção de "Os Eixos Atuais" acessada através de pyplot.gca
. Quase todas as funções pyplot
passam 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.figure
ou pyplot.subplots
para que as figuras não sejam coletadas como lixo. Figure
s podem ser fechados e cancelados pyplot
individualmente via
pyplot.close
; todos os s abertos Figure
podem 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
%matplotlib
má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 Matplotlib
e IPython
, basta importar matplotlib.pyplot
e chamar pyplot.ion
. É garantido que o uso da %
mágica funcionará em todas as versões do Matplotlib e do IPython.
Modo interativo #
Ative o modo interativo. |
|
Desative o modo interativo. |
|
Retorna se os gráficos são atualizados após cada comando de plotagem. |
Exibir todas as figuras abertas. |
|
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:
figuras recém-criadas e alterações nas figuras não são exibidas até
pyplot.show()
é chamadopyplot.pause()
é chamadoFigureCanvasBase.flush_events()
é chamado
pyplot.show()
executa o loop de eventos da GUI e não retorna até que todas as janelas de plotagem sejam fechadas
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.pause
ou executar o loop principal da GUI de alguma outra maneira.
Aviso
Com Figure.show
ele é 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 pyplot
possuem 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 ipympl
estiver 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_nbagg
end fornecido pelo Matplotlib; no entanto, o nbagg não funciona no Jupyter Lab.
GUIs + Jupyter #
Você também pode usar um dos ipympl
back-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.