Cómo hacer que el diagrama de matplotlib del cuaderno de IPython sea en línea

896

Estoy tratando de usar el portátil IPython en MacOS X con Python 2.7.2 e IPython 1.1.0.

No puedo hacer que los gráficos de matplotlib aparezcan en línea.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

También probé %pylab inlinelos argumentos de la línea de comando ipython, --pylab=inlinepero esto no hace ninguna diferencia.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

En lugar de gráficos en línea, obtengo esto:

<matplotlib.figure.Figure at 0x110b9c450>

Y matplotlib.get_backend()muestra que tengo el 'module://IPython.kernel.zmq.pylab.backend_inline'backend.

8
  • su fragmento de código no debería producir <matplotlib.figure.Figure at 0x110b9c450>pero <matplotlib.text.Text at 0x94f9320>(porque su última línea está imprimiendo un título). De todos modos, su código (con% matplotlib en línea y plt.show ()) funciona como se esperaba en Windows
    joaquin
    16/10/2013 a las 17:56
  • Gracias por esas sugerencias, pero no me funcionan. Todavía obtengo la salida anterior sin gráficos en línea. ¿Tiene algún consejo para la resolución de problemas? 16/10/2013 a las 19:31
  • ninguna pista. El mismo python, el mismo ipython (y el mismo backend) pero en Windows, y funciona ... Supongo que la trama funciona para ti cuando no está en línea, ¿verdad?
    joaquin
    16/10/2013 a las 19:46
  • 2
    sin el %matplotlib inline, el kernel permanece ocupado permanentemente y no obtengo salida. Hay que matarlo. Esto está tratando de usar el MacOSXbackend, pero supongo que no se puede abrir por alguna razón. Cuando no se usa una computadora portátil ipython, el backend de MacOSX para matplotlib funciona bien. 16/10/2013 a las 21:14
  • 1
    Tuve un síntoma idéntico, pero resultó que había instalado una versión de 32 bits de Canopy en OSX 10.8. La reinstalación con la versión de 64 bits lo solucionó.
    Vicky T
    4 de noviembre de 2013 a las 23:16
1197

Lo usé %matplotlib inlineen la primera celda del portátil y funciona. Creo que deberías intentar:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

También puede siempre iniciar todos sus núcleos de IPython en modo en línea de forma predeterminada estableciendo las siguientes opciones de configuración en sus archivos de configuración:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.
9
  • 7
    Marcaría esto como la respuesta correcta. La alternativa --pylab inlinefunciona, pero lo saluda con la siguiente advertencia: No se recomienda iniciar todos los núcleos en modo pylab, y se desactivará en una versión futura. Utilice la magia% matplotlib para habilitar matplotlib en su lugar. pylab implica muchas importaciones, que pueden tener efectos secundarios confusos y dañar la reproducibilidad de sus portátiles.
    mpavlov
    22 de julio de 2014 a las 19:04
  • 1
    @ eNord9 @mightwolf: Estoy aprendiendo a usar iPython (y la programación de Python en lugar de Matlab); ¿Qué import matplotlib' do versus importa matplotlib como [nombre] '? Perdón por comentario simplista
    TSGM
    28 de septiembre de 2014 a las 9:56
  • 1
    @ eNord9 @mightwolf: y también cómo se compara esto con `from matplotlib import mpl '.
    TSGM
    28 de septiembre de 2014 a las 10:06
  • 2
    @TSGM La mejor explicación que he visto para tu pregunta es: effbot.org/zone/import-confusion.htm
    mpavlov
    1/10/2014 a las 18:03
  • 2
    Gracias @ eNord9. Acabo de probar tus comandos ya que ha pasado un tiempo con actualizaciones y todo. Ahora todo funciona bien en Python 2.7.9 e IPython 3.1.0. 20 de mayo de 2015 a las 20:05
226

Si su versión de matplotlib es superior a 1.4, también es posible utilizar

IPython 3.xy superior

%matplotlib notebook

import matplotlib.pyplot as plt

versiones mas antiguas

%matplotlib nbagg

import matplotlib.pyplot as plt

Ambos activarán el backend nbagg , que permite la interactividad.

Gráfico de ejemplo con el backend de nbagg

8
  • Esto no parece funcionar %config InlineBackend.figure_format='retina'. ¿Alguna idea de cómo obtener figuras de Retina interactivas?
    orome
    1/04/2016 a las 22:38
  • Hmm ... Realmente no tengo mucha experiencia con las figuras de retina. Lo único que encontré fue este enlace , pero puede que esté obsoleto. Si más personas se preguntan sobre lo mismo, vinculo su pregunta SO aquí y le deseo buena suerte con las respuestas allí. Mejor
    Løiten
    2 de abril de 2016 a las 8:44
  • 34
    Esta respuesta está subestimada. %matplotlib notebookproporciona la mejor visualización que %matplotlib inline.
    Hieu
    15 de junio de 2016 a las 9:50
  • 11
    el uso %matplotlib notebookno funciona (muestra algo, luego en blanco) en el cuaderno jupyter 4.1.1 / ubuntu 16.04 / chrome, %matplotlib inlinemuestra imágenes, pero vienen después del texto de la rebaja, no literalmente "en línea".
    michael
    18 de diciembre de 2016 a las 1:54
  • 8
    Si lo intentó %matplotlib inlineprimero y luego cambió a %matplotlib notebook, es posible que obtenga un resultado vacío. Reinicie el kernel y vuelva a ejecutarlo. 18 de mayo de 2018 a las 11:02
96

Ctrl + Enter

%matplotlib inline

Línea mágica: D

Consulte: Trazado con Matplotlib .

1
  • 1
    @BradleyKreider Aún no ha muerto. Alternativamente, puede visitar el repositorio de ipython en github, ir a la carpeta 'ejemplo', buscar el cuaderno 'Trazado con Matplotlib'. 30/12/15 a las 0:32
25

Usa el %pylab inlinecomando mágico.

1
  • dieciséis
    Ya no: "ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Se ha eliminado el soporte para especificar --pylab en la línea de comandos. [E 15: 01: 18.182 NotebookApp] Utilice %pylab inlineo %matplotlib inlineen la propia notebook. "
    Dave X
    28 de mayo de 2015 a las 19:06
16

Para hacer matplotlib en línea de forma predeterminada en Jupyter (IPython 3):

  1. Editar archivo ~/.ipython/profile_default/ipython_config.py

  2. Añadir línea c.InteractiveShellApp.matplotlib = 'inline'

Tenga en cuenta que agregar esta línea a ipython_notebook_config.pyno funcionaría. De lo contrario, funciona bien con Jupyter e IPython 3.1.0

12

Tengo que estar de acuerdo con foobarbecue (no tengo suficientes recomendaciones para poder simplemente insertar un comentario debajo de su publicación):

Ahora se recomienda que python notebook no se inicie con el argumento --pylab, y según Fernando Perez (creador de ipythonnb) %matplotlib inlinedebería ser el comando inicial del notebook.

Vea aquí: http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Part%203%20-%20Plotting%20with%20Matplotlib.ipynb

0
8

Encontré una solución que es bastante satisfactoria. Instalé Anaconda Python y esto ahora funciona para mí.

0
6

Hice la instalación de anaconda pero matplotlib no está trazando

Comienza a trazar cuando hice esto

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
5

Tuve el mismo problema cuando estaba ejecutando los comandos de trazado en celdas separadas en Jupyter:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         <Figure size 432x288 with 0 Axes>                      #this might be the problem
In [4]:  ax = fig.add_subplot(1, 1, 1)
In [5]:  ax.scatter(x, y)
Out[5]:  <matplotlib.collections.PathCollection at 0x12341234>  # CAN'T SEE ANY PLOT :(
In [6]:  plt.show()                                             # STILL CAN'T SEE IT :(

El problema se resolvió fusionando los comandos de trazado en una sola celda:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         ax = fig.add_subplot(1, 1, 1)
         ax.scatter(x, y)
Out[3]:  <matplotlib.collections.PathCollection at 0x12341234>
         # AND HERE APPEARS THE PLOT AS DESIRED :)
3

Puede simular este problema con un error de sintaxis, sin embargo, %matplotlib inlineno resolverá el problema.

Primero, un ejemplo de la forma correcta de crear una trama. Todo funciona como se esperaba con las importaciones y la magia que proporcionó eNord9 .

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Sin embargo, al dejar el ()final del tipo de trama, recibe un no error algo ambiguo.

Código erróneo:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Error de ejemplo:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

Aparte de este mensaje de una línea, no hay ningún rastro de pila u otra razón obvia para pensar que cometió un error de sintaxis. La trama no se imprime.

2
  • Esto no es un error de sintaxis - sin ()que invocan kde , IPython le está diciendo lo que kde es , a saber, un método vinculado. Entonces, de hecho, desde la perspectiva de iPython, esto no es un "error" en absoluto, por lo que no hay seguimiento de pila. 14 de agosto de 2017 a las 22:05
  • 1
    @KyleStrand Gracias. Después de volver a leer mi publicación, lo que debería haber dicho es: "Pensé que tenía el problema de no hacer que mis gráficos se mostraran en línea usando el %matplotlib inlinecomando. Realmente me olvidé de poner () al final del tipo de gráfico. Así que si todo lo demás falla, mire sus paréntesis para ver si hay un error ".
    Blake M
    15 de agosto de 2017 a las 23:02