¿Cómo puedo abrir la ventana interactiva matplotlib en el cuaderno IPython?

125

Estoy usando IPython con --pylab=inliney, a veces, me gustaría cambiar rápidamente a la GUI matplotlib interactiva y ampliable para ver gráficos (el que aparece cuando trazas algo en una consola terminal de Python). ¿Cómo podría hacer eso? Preferiblemente sin salir ni reiniciar mi portátil.

El problema con los gráficos en línea en el portátil IPy es que tienen una resolución limitada y no puedo acercarme para ver algunas partes más pequeñas. Con la GUI de maptlotlib que comienza desde una terminal, puedo seleccionar un rectángulo del gráfico en el que quiero hacer zoom y los ejes se ajustan en consecuencia. Intenté experimentar con

from matplotlib import interactive
interactive(True)

y

interactive(False)

pero eso no hizo nada. Tampoco pude encontrar ninguna pista en línea.

metakermit
fuente
4
Otra posible solución a su problema original es habilitar el zoom en sus gráficos en línea, que ahora es posible como lo describí aquí: stackoverflow.com/a/22949003/145823
yonilevy
3
%matplotlib notebook obras
muon

Respuestas:

140

De acuerdo con la documentación , debería poder alternar de esta manera:

In [2]: %matplotlib inline 
In [3]: plot(...)

In [4]: %matplotlib qt  # wx, gtk, osx, tk, empty uses default
In [5]: plot(...) 

y aparecerá una ventana de trazado normal (puede ser necesario reiniciar el portátil).

Espero que esto ayude.

Adrián Martín
fuente
2
Es %pylab qt. No funciona en OS X. Quizás en Ubuntu ayude.
metakermit
11
Desafortunadamente, no puede cambiar de un lado a otro. Si intenta cambiar después de haber comenzado con pylab = inline o pylab = qt, obtiene: Esta llamada a matplotlib.use () no tiene ningún efecto porque el backend ya ha sido elegido; Se debe llamar a matplotlib.use () antes de importar por primera vez pylab, matplotlib.pyplot o matplotlib.backends.
Charl Botha
3
Rechacé esto porque no funcionó para mí, y aún no lo hace, pero aparentemente este es el problema 1927 y debería haberse solucionado con la fusión 2179 . @yarox, si edita su respuesta para incorporar esta información, deshaceré mi voto negativo.
askewchan
2
también funciona bien aquí en OSX, usando ipython v1.1.0 y MPL 1.3.0
K.-Michael Aye
1
Me funciona ahora (2014-08) con la versión actual de Python 2.7 en Win7 x64.
nerdfever.com
65

Si todo lo que quiere hacer es cambiar de gráficos en línea a interactivos y viceversa (para que pueda desplazarse / hacer zoom), es mejor usar% matplotlib magic.

#interactive plotting in separate window
%matplotlib qt 

y de vuelta a html

#normal charts inside notebooks
%matplotlib inline 

% pylab magic importa un montón de otras cosas e incluso puede resultar en un conflicto. Lo hace "desde pylab import *".

También puede usar un nuevo backend de notebook (agregado en matplotlib 1.4):

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

Si desea tener más interactividad en sus gráficos, puede mirar mpld3 y bokeh . mpld3 es genial, si no tiene toneladas de puntos de datos (por ejemplo, <5k +) y desea utilizar la sintaxis matplotlib normal, pero más interactividad, en comparación con el cuaderno% matplotlib. Bokeh puede manejar muchos datos, pero necesitas aprender su sintaxis, ya que es una biblioteca separada.

También puede consultar pivottablejs (pip install pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)

Por muy interesante que sea la exploración de datos interactivos, puede alterar totalmente la reproducibilidad. Me ha pasado, así que trato de usarlo solo en una etapa muy temprana y cambio a matplotlib / seaborn puro en línea, una vez que tengo la idea de los datos.

volodymyr
fuente
1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.para %matplotlib notebook.
mLstudent33
1
ImportError: Failed to import any qt bindingpara el comando mágico qt
mLstudent33
31

A partir de matplotlib 1.4.0, ahora hay un backend interactivo para usar en el cuaderno

%matplotlib notebook

Hay algunas versiones de IPython que no tienen ese alias registrado, la alternativa es:

%matplotlib nbagg

Si eso no funciona, actualice su IPython.

Para jugar con esto, ve a tmpnb.org

y pegar

%matplotlib notebook

import pandas as pd
import numpy as np
import matplotlib

from matplotlib import pyplot as plt
import seaborn as sns

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')    

en una celda de código (o simplemente modifique el cuaderno de demostración de Python existente)

Tacaswell
fuente
6

Una mejor solución para su problema podría ser la biblioteca de gráficos . Le permite utilizar la excelente biblioteca javascript de Highcharts para crear gráficos hermosos e interactivos. Highcharts usa el HTMLsvg etiqueta por lo que todos sus gráficos son en realidad imágenes vectoriales.

Algunas caracteristicas:

  • Gráficos vectoriales que puede descargar en formatos .png, .jpg y .svg para que nunca tenga problemas de resolución
  • Gráficos interactivos (zoom, deslizamiento, desplazamiento sobre puntos, ...)
  • Utilizable en un portátil IPython
  • Explore cientos de estructuras de datos al mismo tiempo utilizando las capacidades de trazado asincrónico.

Descargo de responsabilidad: soy el desarrollador de la biblioteca

arnoutaertgeerts
fuente
¡Una biblioteca muy bonita! Me aseguraré de probarlo :)
metakermit
¡Gracias! Hágame saber lo que piensa sobre github y envíe un problema si tiene algún problema :)
arnoutaertgeerts
1
Si bien esta respuesta es definitivamente relevante, no necesariamente la llamaría "una mejor solución". Eso es lo que causó un voto negativo en el pasado, muy probablemente.
volodymyr
1
Votado en contra, ya que esta publicación no me dice cómo puedo usar la biblioteca de Gráficos para abrir una ventana de gráfico interactivo.
Robert Hönig
4

Estoy usando ipython en "jupyter QTConsole" de Anaconda en www.continuum.io/downloads el 28/5/20117.

Aquí hay un ejemplo para alternar entre una ventana separada y un modo de trazado en línea usando ipython magic.

>>> import matplotlib.pyplot as plt

# data to plot
>>> x1 = [x for x in range(20)]

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Note: the %matplotlib magic above causes:
#      plt.plot(...) 
# to implicitly include a:
#      plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...
Bill Moore
fuente
1
Cuando intento usarlo%matplotlibImportError: No module named 'PyQt4'
aparece
Tengo exactamente el mismo problema que user3731622. ¿Qué se puede hacer? Esto es para la mayoría de las respuestas en esta página
bernando_vialli
@mkheifetz @ user3731622 Es posible que deba instalar el paquete: sudo apt-get install python-pyqt5osudo apt-get install python-pyqt5
ttb
2

Reinicie el kernel y borre la salida (si no comienza con un nuevo portátil), luego ejecute

%matplotlib tk

Para obtener más información, vaya a Trazado con matplotlib

Marcin Lentner
fuente
0

Puedes usar

%matplotlib qt

Si tiene el error ImportError: Failed to import any qt binding, instale PyQt5 como: pip install PyQt5y me funciona.

susan097
fuente