Figuras interactivas #
Cuando se trabaja con datos, la interactividad puede ser invaluable. Las herramientas de panorámica/zoom y ubicación del mouse integradas en las ventanas de la GUI de Matplotlib a menudo son suficientes, pero también puede usar el sistema de eventos para crear herramientas de exploración de datos personalizadas.
Matplotlib se envía con enlaces de back -end a varios kits de herramientas GUI (Qt, Tk, Wx, GTK, macOS, JavaScript) y paquetes de terceros proporcionan enlaces a kivy y Jupyter Lab . Para que las figuras respondan a los eventos del mouse, el teclado y la pintura, el bucle de eventos de la GUI debe integrarse con un aviso interactivo. Recomendamos usar IPython (ver más abajo ).
El pyplot
módulo proporciona funciones para crear figuras explícitamente que incluyen herramientas interactivas, una barra de herramientas, información sobre herramientas y
combinaciones de teclas :
pyplot.figure
Crea un nuevo vacío
Figure
o selecciona una figura existentepyplot.subplots
pyplot
tiene una noción de "La figura actual" a la que se puede acceder a través pyplot.gcf
de y una noción de "Los ejes actuales" a la que se puede acceder a través de pyplot.gca
. Casi todas las funciones pyplot
pasan por el Figure
/ actual Axes
(o crean uno) según corresponda.
Matplotlib mantiene una referencia a todas las figuras abiertas creadas a través de pyplot.figure
o pyplot.subplots
para que las figuras no se recopilen como basura. Figure
Los correos electrónicos pueden cerrarse y darse de baja pyplot
individualmente a través
de pyplot.close
; todos los Figure
s abiertos se pueden cerrar a través de plt.close('all')
.
Para obtener más información sobre el sistema de eventos de Matplotlib y los bucles de eventos integrados, lea:
Integración de IPython #
Recomendamos usar IPython para un shell interactivo. Además de todas sus funciones (completado de pestañas mejorado, magia, edición de varias líneas, etc.), también garantiza que el bucle de eventos del kit de herramientas de la GUI se integre correctamente con la línea de comandos (consulte Integración del símbolo del sistema ).
En este ejemplo, creamos y modificamos una figura a través de un indicador de IPython. La figura se muestra en una ventana de la GUI de QtAgg. Para configurar la integración y habilitar el modo interactivo usa la
%matplotlib
magia:
In [1]: %matplotlib
Using matplotlib backend: QtAgg
In [2]: import matplotlib.pyplot as plt
Crear una nueva ventana de figura:
In [3]: fig, ax = plt.subplots()
Agregue un diagrama de línea de los datos a la ventana:
In [4]: ln, = ax.plot(range(5))
Cambia el color de la línea de azul a naranja:
In [5]: ln.set_color('orange')
Si desea deshabilitar el redibujado automático del gráfico:
In [6]: plt.ioff()
Si desea volver a habilitar el redibujado automático del gráfico:
In [7]: plt.ion()
En versiones recientes de Matplotlib
y IPython
, basta con importar matplotlib.pyplot
y llamar pyplot.ion
. Se garantiza que el uso de la %
magia funcionará en todas las versiones de Matplotlib e IPython.
Modo interactivo #
Activa el modo interactivo. |
|
Deshabilitar el modo interactivo. |
|
Devuelve si los gráficos se actualizan después de cada comando de trazado. |
Mostrar todas las figuras abiertas. |
|
Ejecute el bucle de eventos de la GUI durante segundos de intervalo . |
Controles de modo interactivo:
si las figuras creadas se muestran automáticamente
si los cambios en los artistas activan automáticamente el redibujado de figuras existentes
when
pyplot.show()
regresa si no se le dan argumentos: inmediatamente, o después de que todas las figuras hayan sido cerradas
Si está en modo interactivo:
las figuras recién creadas se mostrarán inmediatamente
las figuras se volverán a dibujar automáticamente cuando se cambien los elementos
pyplot.show()
muestra las cifras e inmediatamente regresa
Si no está en modo interactivo:
las figuras recién creadas y los cambios en las figuras no se muestran hasta
pyplot.show()
se llamapyplot.pause()
se llamaFigureCanvasBase.flush_events()
se llama
pyplot.show()
ejecuta el bucle de eventos de la GUI y no regresa hasta que se cierran todas las ventanas de gráficos
Si está en modo no interactivo (o creó figuras mientras estaba en modo no interactivo), es posible que deba llamar explícitamente pyplot.show
para mostrar las ventanas en su pantalla. Si solo desea ejecutar el bucle de eventos de la GUI durante un período de tiempo fijo, puede usar pyplot.pause
. Esto bloqueará el progreso de su código como si hubiera llamado
time.sleep
, asegúrese de que la ventana actual se muestre y se vuelva a dibujar si es necesario, y ejecutará el ciclo de eventos de la GUI durante el período de tiempo especificado.
El bucle de eventos de la GUI que se integra con el símbolo del sistema y las cifras que se encuentran en modo interactivo son independientes entre sí. Si usa pyplot.ion
pero no ha organizado la integración del bucle de eventos, sus cifras aparecerán pero no serán interactivas mientras el indicador espera la entrada. No podrá desplazarse/acercarse y es posible que la figura ni siquiera se visualice (la ventana puede aparecer negra, transparente o como una instantánea del escritorio debajo de ella). Por el contrario, si configura la integración del bucle de eventos, las cifras mostradas responderán mientras esperan la entrada en el indicador, independientemente del "modo interactivo" de pyplot.
Independientemente de la combinación de la configuración del modo interactivo y la integración del bucle de eventos, las cifras responderán si usa pyplot.show(block=True)
, pyplot.pause
o ejecuta el bucle principal de la GUI de alguna otra manera.
Advertencia
Al usarlo Figure.show
, es posible mostrar una figura en la pantalla sin iniciar el ciclo de eventos y sin estar en modo interactivo. Esto puede funcionar (según el kit de herramientas de la GUI), pero probablemente dará como resultado una figura que no responde.
Interfaz de usuario predeterminada #
Las ventanas creadas por pyplot
tienen una barra de herramientas interactiva con botones de navegación y una lectura de los valores de datos a los que apunta el cursor. Una serie de combinaciones de teclas útiles se registran de forma predeterminada.
Otras indicaciones de Python #
El modo interactivo funciona en el indicador predeterminado de Python:
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>
sin embargo, esto no garantiza que el enlace de eventos esté correctamente instalado y es posible que sus figuras no respondan. Consulte la documentación de su kit de herramientas GUI para obtener más detalles.
Cuadernos Jupyter / JupyterLab #
Nota
Para obtener la funcionalidad interactiva descrita aquí, debe usar un backend interactivo. El backend predeterminado en las notebooks, el backend en línea, no lo es. backend_inline
renderiza la figura una vez e inserta una imagen estática en el cuaderno cuando se ejecuta la celda. Debido a que las imágenes son estáticas, no se pueden panoramizar ni hacer zoom, recibir información del usuario ni actualizarse desde otras celdas.
Para obtener figuras interactivas en el cuaderno 'clásico' o en el laboratorio Jupyter, use el backend ipympl (debe instalarse por separado) que usa el marco ipywidget . Si ipympl
está instalado, use la magia:
%matplotlib widget
para seleccionarlo y habilitarlo.
Si solo necesita usar el cuaderno clásico, puede usar
%matplotlib notebook
que utiliza el backend_nbagg
backend proporcionado por Matplotlib; sin embargo, nbagg no funciona en Jupyter Lab.
GUI + Jupyter #
También puede usar uno de los ipympl
backends que no son GUI en un Jupyter Notebook. Si está ejecutando su kernel Jupyter localmente, la ventana GUI aparecerá en su escritorio junto a su navegador web. Si ejecuta su computadora portátil en un servidor remoto, el kernel intentará abrir la ventana GUI en la computadora remota. A menos que haya hecho arreglos para reenviar el xserver a su escritorio, no podrá ver ni interactuar con la ventana. También puede generar una excepción.
PyCharm, Spyder y VSCode #
Muchos IDE tienen integración incorporada con Matplotlib, consulte su documentación para obtener detalles de configuración.