Cómo hacer que el cuaderno de IPython matplotlib traza en línea

831

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 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 comandos de 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.

Ian Fiske
fuente
su fragmento de código no debe 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
Gracias por esas sugerencias, pero no funcionan para mí. Todavía obtengo el resultado anterior sin gráficos en línea. ¿Tienes algún consejo para solucionar problemas?
Ian Fiske
ninguna pista. La misma python, la misma ipython (y el mismo backend) pero en Windows, y funciona ... Supongo que la trama funciona para usted cuando no está en línea, ¿verdad?
joaquin
2
sin el %matplotlib inline, el kernel permanece ocupado permanentemente y no obtengo salida. Tiene que ser asesinado. Esto está tratando de usar el MacOSXback-end, pero supongo que no se puede abrir por alguna razón. Cuando no se usa ipython notebook, el backend de MacOSX para matplotlib funciona bien.
Ian Fiske
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. Reinstalar con la versión de 64 bits lo arregló.
Vicky T

Respuestas:

1130

Utilicé %matplotlib inlineen la primera celda del cuaderno y funciona. Creo que deberías intentarlo:

%matplotlib inline

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

También siempre puede iniciar todos sus núcleos IPython en modo en línea de forma predeterminada al configurar 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.
eNord9
fuente
77
Yo 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, lo que puede tener efectos secundarios confusos y dañar la reproducibilidad de sus computadoras portátiles.
mpavlov
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] '? Perdone por comentarios simplistas
TSGM
1
@ eNord9 @mightwolf: y también cómo se compara esto con `from matplotlib import mpl '.
TSGM
2
@TSGM La mejor explicación que he visto para su pregunta es: effbot.org/zone/import-confusion.htm
mpavlov
Gracias @ eNord9. Acabo de probar sus 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.
Ian Fiske
216

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

IPython 3.xy superior

%matplotlib notebook

import matplotlib.pyplot as plt

versiones anteriores

%matplotlib nbagg

import matplotlib.pyplot as plt

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

Parcela de ejemplo con el backend nbagg

Løiten
fuente
Esto no parece funcionar %config InlineBackend.figure_format='retina'. ¿Alguna idea de cómo obtener figuras interactivas de Retina?
orome 01 de
Hmm ... Realmente no tengo mucha experiencia con figuras de retina. Lo único con lo que me topé fue este enlace , pero puede estar en desuso. Si más personas se preguntan lo mismo, enlace su pregunta SO aquí y le deseo buena suerte con las respuestas allí. Lo mejor
Løiten
31
Esta respuesta está subestimada. %matplotlib notebookproporciona la mejor visualización que %matplotlib inline.
Hieu
99
el uso %matplotlib notebookno funciona (muestra algo, luego está en blanco) en jupyter notebook 4.1.1 / ubuntu 16.04 / chrome, %matplotlib inlinemuestra imágenes, pero vienen después del texto de descuento, no literalmente "en línea".
michael
66
Si lo intentó %matplotlib inlineprimero y luego cambia a %matplotlib notebook, puede obtener un resultado vacío. Reinicie el kernel y vuelva a ejecutarlo.
Czechnology
91

Ctrl + Enter

%matplotlib inline

Línea Mágica: D

Ver: Trazado con Matplotlib .

CodeFarmer
fuente
1
@BradleyKreider Todavía no está muerto. Alternativamente, puede visitar ipython repo en github, ir a la carpeta 'ejemplo', buscar el cuaderno 'Trazado con Matplotlib'.
CodeFarmer
24

Usa el %pylab inlinecomando mágico.

foobarbecue
fuente
14
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 comando. [E 15: 01: 18.182 NotebookApp] Por favor, use %pylab inlineo %matplotlib inlineen el cuaderno. "
Dave X
14

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

volodymyr
fuente
10

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

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

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

la primicia
fuente
7

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

Ian Fiske
fuente
5

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

Comienza a trazar cuando hice esto

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
Raymond
fuente
2

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 proporciona 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 gráfico, recibirá un error no 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 seguimiento de la pila u otra razón obvia para pensar que cometió un error de sintaxis. La trama no se imprime.

Blake M
fuente
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. De hecho, desde la perspectiva de iPython, esto no es un "error" en absoluto, por lo tanto, no hay rastro de la pila.
Kyle Strand
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áficas se mostraran en línea usando el %matplotlib inlinecomando. Realmente olvidé poner () al final del tipo de gráfica. Entonces si todo lo demás falla, mira tus paréntesis por un error ".
Blake M
1

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 :)
krubo
fuente