¿Por qué el botón de guardar no funciona en un gráfico de matplotlib?

Tengo matplotlib 1.0.0 instalado en un virtualenv de Python 2.7 en Mac OS X 10.6. Puedo crear plots bien. Sin embargo, cada vez que presiono el botón Guardar , no puedo escribir texto en la ventana de diálogo de guardar ni puedo guardar la ttwig. Lo único que puedo hacer es pulsar cancelar. ¿Alguna idea sobre lo que está causando esto y cómo solucionarlo?

texto alternativo

Procedimiento de instalación de matplotlib

Instalé matplotlib clonando el repository github de matplotlib de astraw y luego siguiendo sin apretar las Instrucciones de instalación de HyperJeff para numpy / scipy / matplotlib . A continuación se encuentran las secciones potencialmente relevantes de setup.cfg y make.osx , incluidas las secciones que modifiqué antes de comstackr e instalar.

setup.cfg

 [egg_info] tag_svn_revision = 1 [directories] basedirlist = /Users/matthew/.virtualenvs/matplotlib-test [status] #suppress = True #verbose = True [provide_packages] [gui_support] #gtk = False #gtkagg = False #tkagg = False wxagg = False #macosx = False [rc_options] backend = MacOSX #numerix = numpy 

make.osx

 # build mpl into a local install dir with PREFIX=/Users/matthew/.virtualenvs/matplotlib-test MPLVERSION=1.0rc1 PYVERSION=2.7 PYTHON=python${PYVERSION} ZLIBVERSION=1.2.3 PNGVERSION=1.2.39 FREETYPEVERSION=2.3.11 MACOSX_DEPLOYMENT_TARGET=10.6 OSX_SDK_VER=10.6 ARCH_FLAGS="-arch i386-arch x86_64" ## You shouldn't need to configure past this point (but I did...) PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig" CFLAGS="${ARCH_FLAGS} -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk" LDFLAGS="${ARCH_FLAGS} -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk" PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig" CFLAGS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk" LDFLAGS="-arch i386 -arch x86_64 -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk" FFLAGS="-arch i386 -arch x86_64" 

Después de modificar setup.cfg y make.osx , make.osx los siguientes comandos para instalar matplotlib:

 make -f make.osx fetch deps mpl_build mpl_install python setup.py install 

Nota: no se requiere sudo , ya que estoy instalando en un virtualenv en lugar de hacerlo en los paquetes de sitios como lo hace HyperJeff.

Instalación de Python

Instalé Python 2.7 utilizando la imagen de disco del instalador de Python 2.7 PPC / i386 / x86-64 de python.org para Mac OS X 10.5 . Gracias a la respuesta de Ned Deily a esta pregunta de SO , sé que esta versión de Python 2.7 no puede ejecutar IDLE o Tkinter en Mac OS X 10.6.

Preguntas

  1. ¿Podría ser la causa del problema la versión de Python 2.7 que he instalado? ¿Debo reinstalar Python 2.7 utilizando la imagen de disco del instalador de Mac OS X de 32 bits de Python 2.7 para Mac OS X 10.3 a 10.6 ?
  2. ¿Hay gui_support opción diferente de gui_support que deba configurar en setup.cfg y luego comstackr matplotlib?

Actualización, 13 de septiembre de 2010, 3:33 PM

Parece que otros usuarios de Mac OS X y matplotlib tienen el mismo problema. En la lista de correo matplotlib-users, dos usuarios informaron tener el mismo problema en Mac OS X 10.5 . Aunque, estaban ejecutando matplotlib 0.99.1.1 y 0.99.1.2 en comparación con matplotlib 1.0.0 que he instalado.

Actualizado, 14 de septiembre de 2010, 8:18 AM

El error 2973874 de matplotlib se abrió el 20-Mar-10 con el mismo problema. Sin embargo, es una prioridad 5 y no se ha modificado desde que se abrió originalmente el error. A continuación se muestra la descripción del error:

Estoy ejecutando el 6.0.1 entendido Python distribución 64bit Mac. Si ejecuto un gráfico y hace clic en guardar, aparece una ventana de diálogo para guardar, no puedo ingresar texto en el campo de nombre de archivo. Puedo seleccionar un archivo existente pero todavía no puedo modificar el nombre. Si selecciono un archivo que no es png, no lo sobrescribe. Obtengo un archivo con el mismo nombre pero con la extensión png.

Debe convencer a OSX de que virtualenv se está ejecutando desde un paquete de aplicaciones. Arreglo discutido aquí:

http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a

E implementado aquí:

https://github.com/gldnspud/virtualenv-pythonw-osx

¡Mi respuesta no soluciona el problema pero puede solucionarlo fácilmente! Puede tocar un archivo nuevo con la extensión de archivo correcta en un terminal. Luego, puede elegir este archivo con el mouse dentro de la ventana de matplotlib y sobrescribirlo.

Para resolver esto:

Use conda install python.app para instalar pythonw .

Luego usa pythonw lugar de python en tu terminal.

P.ej

 pythonw my_plot.py 

Espero que esto ayude

Para aquellos que el método Thouis no funcionó:

Me di cuenta de que una simple solución es cambiar el backend de matplotlib. Aquí hay una lista de backends disponibles:

http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

Tenga en cuenta que debe elegir uno de los procesadores (es decir, los que admiten el comando show() ). Es posible que necesite instalar el backend, pero puede que tenga varios instalados.

Para hacerlo

 import matplotlib matplotlib.use('Qt4Agg') #replace 'Qt4Agg' with desired backend 

Advertencia: Esto debe hacerse ANTES de importar pylab, etc.