matplotlib no muestra mis dibujos aunque llamo a pyplot.show ()


175

Ayuda requerida en matplotlib. Sí, no olvidé llamar a pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Vuelve matplotlib.lines.Line2D at 0xade2b2ccomo la salida.

p.show()

No hay nada que pasar. No hay mensaje de error. No hay nueva ventana. Nada. Instalo matplotlibmediante el uso de la pipa y yo no tomo ningún mensaje de error.

Detalles:

Yo suelo,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

Respuestas:


177

Si fijo mi backend para templateen ~/.matplotlib/matplotlibrc, entonces puedo reproducir sus síntomas:

~ / .matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Tenga en cuenta que el archivo matplotlibrcpuede no estar en el directorio ~/.matplotlib/. En este caso, el siguiente código muestra dónde está:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Si edita ~/.matplotlib/matplotlibrcy cambia el backend a algo así GtkAgg, debería ver un diagrama. Puede enumerar todos los backends disponibles en su máquina con

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Debería devolver una lista como:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Referencia:


2
Lo intenté pero recibí un error similar a:ImportError: No module named _backend_gdk
Baskaya

66
Perdón por muchos comentarios. Funciona. Intenté Qt4Agg y golpeé. Gracias :) .. Lo último, ¿dónde puedo encontrar matplotlibrc predeterminado o hay alguna forma de crearlo?
Baskaya

Perdón por el desorden. Creo que encontré
Baskaya

8
Esta respuesta es antigua, la configuración ahora debería estar en ~/.config/matplotlib/matplotlibrc(para Python 3, al menos). Acabo de tener un problema relacionado, y creo que fue causado por usar matplotlib en python 2.7, que creó un ~/.matplotlib/directorio, y evitó que python 3 leyera la configuración ~/.config/matplotlib/. La eliminación ~/.matplotlib/solucionó el problema para mí.
nada101

55
6 años después y este problema aún existe ... Ahora recuerdo por qué odio Python: un problema en cada línea de código.
pookie

70

Me encontré exactamente con el mismo problema en Ubuntu 12.04, porque instalé matplotlib (dentro de un virtualenv) usando

pip install matplotlib

Para resumir, mi consejo es: no intente instalar matplotlib usando pip o manualmente; deje que un administrador de paquetes real (por ejemplo, apt-get / synaptic) lo instale y todas sus dependencias por usted.

Desafortunadamente, los backends de matplotlib (métodos alternativos para renderizar sus trazados) tienen todo tipo de dependencias que pip no resolverá. Peor aún, falla en silencio; es decir, pip install matplotlibparece instalar matplotlib con éxito. Pero cuando intente usarlo (por ejemplo pyplot.show()), no aparecerá una ventana de trazado. Probé todos los backends diferentes que sugieren las personas en la web (Qt4Agg, GTK, etc.), y todos fallaron (es decir, cuando traté de importar matplotlib.pyplot, obtuve ImportErrorporque está tratando de importar alguna dependencia que falta). Luego investigué cómo instalar esas dependencias, pero me hizo querer dejar de usar pip (dentro de virtualenv) como una solución de instalación viable para cualquier paquete que tenga dependencias de paquetes que no sean Python.

Toda la experiencia me envió a rastreo de apt-get / synaptic (es decir, el administrador de paquetes de Ubuntu) para instalar software como matplotlib. Eso funcionó perfectamente. Por supuesto, eso significa que solo puede instalar en los directorios de su sistema, sin virtudes, y está atrapado con las versiones que distribuye Ubuntu, que pueden estar muy por detrás de la versión actual ...


2
Su respuesta es un BIT de largo, puede considerar acortar el OP.
theJollySin

55
¿Has probado la --system-site-packagesopción?
Tianyang Li

1
% Christopher Lee El problema con las cifras que no se muestran sin ningún error / otra queja es porque el backend predeterminado cuando lo pip installestá agg. No estoy seguro de por qué, pero puedes cambiarlo según la respuesta del unutbu. piptiene la gran ventaja de instalar una versión actualizada: aptinstala una versión desactualizada. A veces hay correcciones de errores / nuevas características que desea / necesita.
drevicko

2
¡Solo desactivar virtualenvfuncionó! Y pude instalar matplotlib 1.4 desde la fuente de todo el sistema (en Ubuntu), pero no debajo virtualenv.
osa

1
¿Y cuál es la solución para aquellos de nosotros atrapados en máquinas de trabajo de Windows que no pueden usar apt-get?
ale19

34

% matplotlib en línea

Para mí, trabajando con el cuaderno, agregando la línea anterior antes de que la trama funcione.


Necesitaba usar %pylab inlineen mi cuaderno como lo señaló @Bhanu Pratap Singh
Reed Sandberg el

10

Para futura referencia,

He encontrado el mismo problema: pylab no se mostraba en ipython. El problema se solucionó cambiando el archivo de configuración de ipython {ipython_config.py}. En el archivo de configuración

c.InteractiveShellApp.pylab = 'auto'

Cambié 'auto' a 'qt' y ahora veo gráficos


55
o usando "ipython --pylab = qt"
andrew cooke

Esto funciona, pero es sólo una solución parcial: Si el backend por defecto es agg, no lo sé lo que %pylab inlineva a funcionar, ni lo parcelas mostrar al ejecutar secuencias de comandos directamente, es decir: python myscript.py. La respuesta de unutbu debería solucionarlo en todas partes.
drevicko


8

Lo que resolvió mi problema fue usar las dos líneas siguientes en el cuaderno de ipython en la parte superior

%matplotib inline
%pylab inline

Y funcionó. Estoy usando Ubuntu16.04 e ipython-5.1


Corrija el formato de los comentarios anteriores ... Gracias.
Saras Arya

Hecho: aunque esta publicación de blog golpea a pylab, pero tendrá una idea de por qué agregarlo %pylab inlinehace que funcione.
Bhanu Pratap Singh

2

Tuve que instalar matplotlib desde la fuente para que esto funcione. Las instrucciones clave (de http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ ) son:

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

Al cambiar el backend, como dice @unutbu, me encontré con muchos más problemas con los diferentes backends que tampoco funcionan.


1
Funcionó de maravilla, solo usé los pasos de configuración de git clone y python, pero cuando lo ejecuté con plt.show () no hubo problemas.
Steve

2

Agregar las siguientes dos líneas antes de importar pylab parece funcionar para mí

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np

0

Asegúrese de tener esta secuencia de comandos de inicio habilitada: (Preferencias> Consola> Opciones avanzadas)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Si el PYTHONSTARTUP estándar está habilitado, no tendrá un diagrama interactivo


0

Similar a @Rikki, resolví este problema actualizando matplotlibcon pip install matplotlib --upgrade. Si no puede actualizar, la desinstalación y reinstalación pueden funcionar.

pip uninstall matplotlib
pip install matplotlib

0

Para mí, el problema ocurre si simplemente creo un archivo vacío en macOS. Agregar "backend: macosx" soluciona el problema.matplotlibrc~/.matplotlib

Creo que es un error: si backendno se especifica en mi matplotlibrc, debería tomar el valor predeterminado.



0

Encontré que necesitaba window = Tk()y luegowindow.mainloop()


¿Puedes agregar un poco de explicación? ¿En qué se diferencia su solución de las demás?
Ralf Stubner

-2

Para Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
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.