Sin ventana de trazado en matplotlib


90

Acabo de instalar matplotlib en Ubuntu 9.10 usando el sistema de paquetes synaptic. Sin embargo, cuando pruebo el siguiente ejemplo simple

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

No obtengo una ventana de trama. ¿Alguna idea sobre cómo hacer que se muestre la ventana de la trama?


8
pylab no muestra el gráfico de forma predeterminada, ya que el dibujo y la actualización constante pueden ser costosos. Necesitas hacer un explícito show().
Alok Singhal

1
Alguna documentación oficial sobre este tema: matplotlib.org/faq/…
stephenbez

Respuestas:


139

Puedes escribir

import pylab
pylab.show()

o mejor, use ipython -pylab.


Dado que pylab ya no se recomienda el uso de , la solución hoy en día sería

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()

38

pylab.show() funciona pero bloquea (es necesario cerrar la ventana).

Una solución mucho más conveniente es hacerlo pylab.ion()(modo interactivo activado) al comenzar: todos los pyplot.*comandos (los equivalentes de pylab) muestran su gráfico inmediatamente. Más información sobre el modo interactivoPuede encontrar en el sitio web oficial.

También utilizo en segundo lugar el aún más conveniente ipython -pylab( --pylab, en versiones más nuevas), que le permite omitir la from … import …parte (también %pylabfunciona en versiones más recientes de IPython).


1
pero necesitas llamar pylab.show()primero para incluso abrir una figura.
Steve Tjoa

3
@Steve: mi experiencia es que esto depende en gran medida del backend. En Mac OS X con el shell de Python normal, no tengo que mostrar () (o dibujar (), para el caso): plot () abre una nueva ventana.
Eric O Lebigot

1
Ah bien. Buen punto. Solo tengo experiencia con ipython en Linux.
Steve Tjoa

draw () no me funciona, pero pylab.ion () funciona. Estoy usando OSx
user1506145

Lo mismo aquí en el shell de Python con el último Matplotlib. Actualicé mi respuesta, gracias.
Eric O Lebigot


11

El siguiente fragmento de código funciona tanto en Eclipse como en el shell de Python:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()

Como aclaran muchas otras respuestas, esto puede funcionar para usted en este momento, pero todo depende de cómo esté configurado su backend matplotlib.
nealmcb

9

¿Aparecen errores? Esto podría deberse a que no se ha configurado el backend. Puede configurarlo desde el intérprete de Python o desde un archivo de configuración (.matplotlib/matplotlibrc ) en su directorio de inicio.

Para configurar el backend en código, puede hacer

import matplotlib
matplotlib.use('Agg')

donde 'Agg' es el nombre del backend. Los backends que estén presentes dependen de su instalación y sistema operativo.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html


1
Funciona totalmente, gracias. Para que quede claro, lo más sencillo hacer (una vez que konw esto está funcionando, por supuesto) es configurar el backend en .matplotlib/matplotlibrca backend: Agg. Entonces no tienes que hacerlo explícitamente usecada vez :)
dsummersl

2

Modern IPython usa el --matplotlibargumento " " con un parámetro de backend opcional. El valor predeterminado es "automático", que suele ser lo suficientemente bueno en Mac y Windows. No lo he probado en Ubuntu ni en ninguna otra distribución de Linux, pero espero que funcione.

ipython --matplotlib

0

Si encuentra un problema en el que pylab.show() congela la ventana de IPython (esto puede ser específico de Mac OS X; no estoy seguro), puede cmd-c en la ventana de IPython, cambiar a la ventana de trazado y se romperá.

Aparentemente, las llamadas futuras a pylab.show()no congelarán la ventana de IPython, solo la primera llamada. Desafortunadamente, descubrí que el comportamiento de la ventana del gráfico / interacciones con show () cambia cada vez que reinstalo matplotlib, por lo que es posible que esta solución no siempre se mantenga.


0

Si está iniciando IPython con la --pylabopción, no debería necesitar llamar show()o draw(). Prueba esto:

ipython  --pylab=inline

0

--pylabya no trabaja para Jupyter , pero afortunadamente podemos añadir un pellizco en el ipython_config.pyarchivo para obtener ambos pylab, así como autoreloadfuncionalidades.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']

0

Si es usuario de Anaconda y Spyder, la mejor solución para usted es que:

Herramientas -> Preferencias -> Consola Ipython -> Sección gráfica

Luego, en la sección Soporte para gráficos (Matplotlib) :

seleccione dos opciones disponibles

y en el backend de gráficos :

seleccione Automático


-5

Otra posibilidad al utilizar easy_install es que necesita la versión más reciente de matplotlib. Tratar:

import pkg_resources
pkg_resources.require("matplotlib")

antes de importar matplotlib o cualquiera de sus módulos.


2
Esto solo asegura que matplotlibesté instalado, no afecta la forma en que se realiza el manejo de la ventana.
tacaswell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.