Propósito de "% matplotlib en línea"

710

¿Qué es exactamente el uso de %matplotlib inline?

4
409

%matplotlibes una función mágica en IPython. Citaré la documentación relevante aquí para que la lea por conveniencia:

IPython has a set of predefined ‘magic functions’ that you can call with a command line style syntax. There are two kinds of magics, line-oriented and cell-oriented. Line magics are prefixed with the % character and work much like OS command-line calls: they get as an argument the rest of the line, where arguments are passed without parentheses or quotes. Lines magics can return results and can be used in the right hand side of an assignment. Cell magics are prefixed with a double %%, and they are functions that get as an argument not only the rest of the line, but also the lines below it in a separate argument.

%matplotlib inline establece el backend de matplotlib en el backend 'en línea' :

With this backend, the output of plotting commands is displayed inline within frontends like the Jupyter notebook, directly below the code cell that produced it. The resulting plots will then also be stored in the notebook document.

Al usar el backend 'en línea', sus gráficos matplotlib se incluirán en su cuaderno, junto al código. También puede valer la pena leer How to make IPython notebook matplotlib plot inline para referencia sobre cómo usarlo en su código.

Si también desea interactividad, puede usar el backend nbagg con %matplotlib notebook(en IPython 3.x), como se describe aquí .

2
  • 4
    ok, pero cuál es la alternativa: ¿cómo puedo ver las tramas si no hay tal magia activada?
    JaakL
    22/10/2017 a las 7:23
  • más específicamente, este es un comando mágico incorporado
    russau
    14/07/18 a las 17:44
100

Siempre que esté ejecutando IPython, %matplotlib inlinehará que los resultados de su trazado aparezcan y se almacenen en el cuaderno.

Según documentación

To set this up, before any plotting or import of matplotlib is performed you must execute the %matplotlib magic command. This performs the necessary behind-the-scenes setup for IPython to work correctly hand in hand with matplotlib; it does not, however, actually execute any Python import commands, that is, no names are added to the namespace.

A particularly interesting backend, provided by IPython, is the inline backend. This is available only for the Jupyter Notebook and the Jupyter QtConsole. It can be invoked as follows:

%matplotlib inline

With this backend, the output of plotting commands is displayed inline within frontends like the Jupyter notebook, directly below the code cell that produced it. The resulting plots will then also be stored in the notebook document.

sesenta y cinco

Para explicarlo claro:

Si no te gusta así:

ingrese la descripción de la imagen aquí

agregar %matplotlib inline

ingrese la descripción de la imagen aquí

y ahí lo tienes en tu cuaderno jupyter.

5
  • 5
    Su segundo código pierde todo el sentido de usar %matplotlib inline. El punto es que ahora no necesita usar plt.show()lo que todavía está usando en el segundo código. Un hecho más interesante, en su segundo código, la figura seguirá apareciendo en el cuaderno de jupyter incluso si no lo usa % matplotlib inline y solo lo usa plt.show(). Lea mi siguiente pregunta aquí, que aún hoy no tiene respuesta. 17 jul.20 a las 9:26
  • Sí, hay ciertos errores en el software que usamos. Por lo general, me gusta escribir los comandos claros. Este medio plt.show() debería existir. La magia de %matplotlib inlinetambién debería estar allí, aunque puede estar configurada en algún lugar de forma predeterminada.
    prosti
    17/07/20 a las 10:11
  • 1
    Pero realmente no veo por qué desea usar plt.show()en su cuaderno jupyter cuando está usando matplotlib en línea explícitamente. Especialmente, cuando responde una pregunta como esta en el contexto de jupyter notebook 17/07/20 a las 12:29
  • Personalmente, me gusta tener un comando para controlar si algo debe aparecer o no. Odio ser implícito o parcial. Imagínese el caso de que alguien en error establezca plt.close()sin establecer plt.show(). Reinicia el portátil y no aparece nada. Así que todavía me pondría plt.show(), no puede doler.
    prosti
    17/07/20 a las 13:26
  • 3
    Interesante. Porque uso Jupyter Notebook y, con o sin %matplotlib inline, la salida es siempre el segundo caso. Windows nunca aparece. 13 de marzo a las 0:17
46

Si desea agregar gráficos a su computadora portátil Jupyter, entonces %matplotlib inlinees una solución estándar. Y hay otros comandos mágicos que se usarán de forma matplotlibinteractiva dentro de Jupyter.

%matplotlib: cualquier pltcomando de trazado ahora hará que se abra una ventana de figura, y se pueden ejecutar más comandos para actualizar el gráfico. Algunos cambios no se dibujarán automáticamente, para forzar una actualización, useplt.draw()

%matplotlib notebook: conducirá a gráficos interactivos incrustados en el cuaderno, puede hacer zoom y cambiar el tamaño de la figura

%matplotlib inline: solo dibuja imágenes estáticas en el cuaderno

12

Starting with IPython 5.0 and matplotlib 2.0 you can avoid the use of IPython’s specific magic and use matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() which have the advantages of working outside of IPython as well.

documentos de ipython

2
  • Creo que esto es diferente a cambiar el backend. A menos que el backend lo sea inline, los gráficos se generan en ventanas externas y debe usar display () para mostrarlos en el cuaderno. 17 de mayo de 2020 a las 8:56
  • Ya sea que sea diferente a cambiar el backend, seguro que me ayudó en una terminal ipython mientras ejecutaba un servidor x. 16 de enero a las 15:25
11

Simplemente significa que cualquier gráfico que estemos creando como parte de nuestro código aparecerá en el mismo cuaderno y no en una ventana separada, lo que sucedería si no hubiéramos usado esta declaración mágica.

11

TL; DR

%matplotlib inline - Muestra la salida en línea


El kernel de IPython tiene la capacidad de mostrar gráficos ejecutando código. El kernel de IPython está diseñado para funcionar a la perfección con la biblioteca de trazado matplotlib para proporcionar esta funcionalidad.

%matplotlib is a magic command which performs the necessary behind-the-scenes setup for IPython to work correctly hand-in-hand with matplotlib; it does not execute any Python import commands, that is, no names are added to the namespace.

Mostrar la salida en una ventana separada

%matplotlib

Salida de pantalla en línea

(disponible solo para Jupyter Notebook y Jupyter QtConsole)

%matplotlib inline

Pantalla con backends interactivos

(valores válidos 'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template')

%matplotlib gtk

Ejemplo: GTK3Agg: una representación Agg en un lienzo GTK 3.x (requiere PyGObject y pycairo o cairocffi).

Más detalles sobre los backends interactivos de matplotlib: aquí


Starting with IPython 5.0 and matplotlib 2.0 you can avoid the use of IPython’s specific magic and use matplotlib.pyplot.ion()/matplotlib.pyplot.ioff() which have the advantages of working outside of IPython as well.

Consulte: Salida enriquecida de IPython - Trazado interactivo

3
  • Pregunta de novato real aquí, lo siento ... ¿qué es el "núcleo de IPython" y qué es un "comando mágico". ¿Python se ha dividido repentinamente sobre mí y se ha vuelto no pitónico? Nunca había oído hablar de estos conceptos.
    lb_so
    7 de junio de 2020 a las 5:49
  • Para un cuaderno de python (ipynb): un kernal de ipython o kernal de jupyter es la versión de python (y las dependencias) que utilizará el proyecto. Puede iniciar un cuaderno jupyter y luego cambiar kernals para ejecutar las celdas con una configuración diferente de python y configurar variables de entorno y mucho más. 8/06/20 a las 11:54
  • 1
    El comando @Ib_so Magic es una función de ipython / jupyter. Leer más aquí. 8/06/20 a las 11:56
7

Si no sabe qué es el backend, puede leer esto: https://matplotlib.org/tutorials/introductory/usage.html#backends

Some people use matplotlib interactively from the python shell and have plotting windows pop up when they type commands. Some people run Jupyter notebooks and draw inline plots for quick data analysis. Others embed matplotlib into graphical user interfaces like wxpython or pygtk to build rich applications. Some people use matplotlib in batch scripts to generate postscript images from numerical simulations, and still others run web application servers to dynamically serve up graphs. To support all of these use cases, matplotlib can target different outputs, and each of these capabilities is called a backend; the "frontend" is the user facing code, i.e., the plotting code, whereas the "backend" does all the hard work behind-the-scenes to make the figure.

Entonces, cuando escribe% matplotlib en línea, activa el backend en línea. Como se discutió en las publicaciones anteriores:

With this backend, the output of plotting commands is displayed inline within frontends like the Jupyter notebook, directly below the code cell that produced it. The resulting plots will then also be stored in the notebook document.

0
2

Siempre que esté ejecutando Jupyter Notebook, el comando en línea% matplotlib hará que los resultados de sus gráficos aparezcan en el cuaderno, y también se pueden almacenar.

-5

No es obligatorio escribir eso. Funcionó bien para mí sin la %matplotlibfunción mágica ( ). Estoy usando el compilador Sypder, uno que viene con Anaconda.

2
  • 15
    Spyder es un IDE, no un compilador. 13 oct 2018 a las 18:09
  • 5
    Si bien su respuesta no respondió a la pregunta del OP, sí respondió a la mía. Gracias. 23/07/19 a las 13:14