¿Cómo obtengo gráficos interactivos nuevamente en Spyder / IPython / matplotlib?

91

Actualicé de Python (x, y) 2.7.2.3 a 2.7.6.0 en Windows 7 (y me alegré de ver que finalmente puedo escribirfunction_name? y ver la cadena de documentos en el Inspector de objetos nuevamente) pero ahora el trazado no funciona porque Acostumbrado a.

Anteriormente (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), cuando trazaba este script , por ejemplo , trazaba las subtramas una al lado de la otra en una ventana interactiva:

ingrese la descripción de la imagen aquí

Ahora (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) cuando trato de trazar cosas, hace las subtramas como pequeños PNG en línea, que es un cambio en IPython :

minúsculos PNG en línea

Así que entré en opciones y encontré esto:

opciones gráficas

lo que parece decir que puedo recuperar las antiguas tramas interactivas, con las 4 subtramas mostradas una al lado de la otra, pero cuando cambio a "Automático" e intento trazar algo, no hace nada. No hay parcelas en absoluto.

Si cambio este menú desplegable a Qt, o desmarco "Activar soporte", solo traza la primera subtrama, o parte de ella, y luego se detiene:

ingrese la descripción de la imagen aquí

¿Cómo obtengo el comportamiento anterior de 4 subtramas de lado a lado en una sola figura con la que puedo interactuar?

endolito
fuente
Creo que esto debería ir como un informe de error a pythonxy. Mi suposición ingenua es que están usando pyplot para manejar todo el trazado y ser mordidos en el trasero por eso (lo que parece incorrecto, porque tienen su propio widget qt).
tacaswell
1
@tcaswell ¿Quiénes son "ellos" y qué usarían en lugar de pyplot?
endolito
1
¿Puede reproducir este problema fuera de pythonxy (solo usando ipython + qtconsole directo)? No hay suficiente información aquí para aclarar qué está fallando.
tacaswell
1
Supongo que es un error en Spyder (Spyder es el IDE, pythonxy es la distribución).
Thomas K
1
@tcaswell: Ajá. Parece que mi script está produciendo errores de matplotlib que luego se envían a otro lugar que no sea la consola de IPython. Aparecen si uso la consola Qt en su lugar, y ahora que la busco, aparecen en la pestaña Consola normal de Spyder. Si hago un script más simple, funciona, ya sea de máquina de estado u orientado a objetos. Supuse que tenía que cambiar algunas configuraciones de IPython debido a las nuevas gráficas en línea.
endolito

Respuestas:

134

Cambie el backend a automático:

Herramientas> preferencias> consola IPython> Gráficos> Backend de gráficos> Backend: Automático

Luego cierre y abra Spyder.

Víctor Arellano
fuente
27
El cierre y la apertura son realmente necesarios. Me pregunto por qué este no es el valor predeterminado.
Mathias711
5
Además, para cualquiera que aún no vea sus gráficos (como yo no lo estaba), la ventana del gráfico puede aparecer silenciosamente detrás de la ventana de su consola (al menos lo hace en Spyder en Windows 10), por lo que es posible que tenga que buscar su ventana.
Joshua Glazer
3
Para aquellos con problemas para encontrar esto, está ubicado enpython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor
6
En lugar de reiniciar Spyder, también puede reiniciar el kernel (ya sea haciendo clic en la rueda de configuración en la consola y luego en "Reiniciar kernel" o mediante un atajo de teclado (en Mac Cmd +)
Michael
No tengo idea de por qué, pero cambiar a Automático, reiniciar Spyder y luego volver a Inline hizo que los gráficos en línea comenzaran a mostrarse cada vez que emita un comando de entrada en un bucle. ¡Esto es muy útil!
Josiah Yoder
50

Puede controlar esto rápidamente escribiendo comandos mágicos incorporados en la consola IPython de Spyder, que encuentro más rápido que seleccionarlos en el menú de preferencias. Los cambios tienen efecto inmediato, sin necesidad de reiniciar Spyder o el kernel.

Para cambiar a gráficos "automáticos" (es decir, interactivos), escriba:

%matplotlib auto

luego, si desea volver a "en línea", escriba esto:

%matplotlib inline

(Nota: estos comandos no funcionan en consolas que no son IPython)

Más información sobre este tema: Propósito de "% matplotlib inline"

Mike T
fuente
En Python 3.6, matplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
obtengo
2
@Karlo se espera ese error de un intérprete convencional de "python". Esta sintaxis solo es válida con ipython o Spyder.
Mike T
OK, lo estaba usando en Spyder pero en la consola de Python. De hecho, funciona en la consola de IPython.
Karlo
3
¿Hay alguna forma de configurarlo mediante un script? Es decir, para elegir dónde está la salida del gráfico dentro de un script. Gracias.
Royi
1
Esto parece no funcionar en Spyder, aunque es la forma de hacerlo en una ventana normal de IPython. Usar las preferencias del menú funcionó para mí; no estoy seguro de por qué esto no lo hace.
tortugas son lindas
10

Después de aplicar: Herramientas> preferencias> Gráficos> Backend> Automático Simplemente reinicie el kernel ingrese la descripción de la imagen aquí

Y seguramente obtendrás Parcela Interactiva. ¡Feliz codificación!

Archit Pandey
fuente
5

Como se dijo en los comentarios, el problema radica en su guión. En realidad, hay 2 problemas:

  • Hay un error de matplotlib, supongo que estás pasando un argumento como en Nonealgún lugar. ¿Quizás debido al diccionario predeterminado?
  • Llamas show()después de cada subtrama. show()debe llamarse una vez al final de su script. La alternativa es usar el modo interactivo, busque ionen la documentación de matplotlib.
J. Martinot-Lagarde
fuente
2

En realidad, esto es bastante fácil de solucionar y no requiere ningún código:

1.Haga clic en la pestaña Gráficos encima de la consola. 2. Luego, en la esquina superior derecha de la pantalla de gráficos, haga clic en el botón de opciones. 3.Por último, desmarque el botón "Silenciar trazado en línea"

Ahora vuelva a ejecutar su script y sus gráficos deberían aparecer en la consola.

Salud.

Chris
fuente