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 pyplotmó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 Figureo selecciona una figura existente

pyplot.subplots

Crea una nueva Figurey la llena con una cuadrícula deAxes

pyplottiene una noción de "La figura actual" a la que se puede acceder a través pyplot.gcfde y una noción de "Los ejes actuales" a la que se puede acceder a través de pyplot.gca. Casi todas las funciones pyplotpasan 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.figureo pyplot.subplotspara que las figuras no se recopilen como basura. FigureLos correos electrónicos pueden cerrarse y darse de baja pyplotindividualmente a través de pyplot.close; todos los Figures 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 %matplotlibmagia:

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 Matplotliby IPython, basta con importar matplotlib.pyploty llamar pyplot.ion. Se garantiza que el uso de la %magia funcionará en todas las versiones de Matplotlib e IPython.

Modo interactivo #

pyplot.ion

Activa el modo interactivo.

pyplot.ioff

Deshabilitar el modo interactivo.

pyplot.isinteractive

Devuelve si los gráficos se actualizan después de cada comando de trazado.

pyplot.show

Mostrar todas las figuras abiertas.

pyplot.pause

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:

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.ionpero 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.pauseo 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 pyplottienen 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 ipymplestá 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_nbaggbackend proporcionado por Matplotlib; sin embargo, nbagg no funciona en Jupyter Lab.

GUI + Jupyter #

También puede usar uno de los ipymplbackends 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.