Código de ejemplo de matplotlib que no funciona en el entorno virtual de Python

Estoy tratando de mostrar la coordenada xyz de una imagen en matplotlib. El código de ejemplo funciona perfectamente bien en la instalación global de python: a medida que muevo el cursor, los valores x, y, z se actualizan instantáneamente. Sin embargo, cuando ejecuto el código de ejemplo en un entorno virtual de Python, hago clic en las imágenes varias veces para que la coordenada se muestre en primer lugar, luego, cuando hago clic en diferentes posiciones, se actualizará para algunas. Después de unos pocos clics, las coordenadas ya no se actualizarán.

No sé cómo depurar esto.

Es probable que esto sea un problema con el backend de macosx para matplotlib. Cambie a usar un backend alternativo para matplotlib (por ejemplo, use qt4 en lugar de ‘macosx’). Para obtener detalles sobre cómo cambiar el backend y qué significa eso exactamente, consulte la documentación aquí . Tenga en cuenta que es posible que tenga que instalar el backend primero; por ejemplo, pyqt para usar el backend qt4agg como lo sugiero aquí.

En resumen, el backend se ocupa de la salida de matplotlib y matplotlib puede apuntar a diferentes formatos de salida. Estos pueden ser formatos de salida de pantalla qt4 (por ejemplo, wx , qt4 , etc.) o salidas de archivo (por ejemplo, pdf ). Estos son conocidos como backends interactivos y no interactivos respectivamente.

Para cambiar el backend o hacer

 import matplotlib matplotlib.use('qt4agg') 

en el código, o – si desea cambiar cada vez que inicie matplotlib – edite su archivo matplotlibrc configurando el atributo backend, por ejemplo

 backend: Qt4Agg 

NB: Un comentario me alertó de que desde la publicación de esta respuesta, los documentos de matplotlib ahora se refieren a este problema y sugieren una solución alternativa , aunque el comentarista señaló que la solución ofrecida en esta respuesta (cambiar a Qt backend) funcionó para ellos donde la solución oficial de los documentos No era posible para ellos.

Lo que finalmente me funcionó fue hacer un archivo matplotlibrc local que contenga la directiva: backend: TkAgg .

 # Within working directory where running python vim matplotlibrc # new file via vim, Nano, whatever backend: TkAgg 

Esto fue útil:

 import matplotlib print matplotlib.rcParams['backend'] 

Otras notas:

También instalé pyqt usando Homebrew ( brew install pyqt ) y lo copié (podría moverlo) a $MyVirtEnv/lib/python2.7/site-packages/ from /usr/local/lib/python2.7/site-packages/PyQt4

Pero cuando yo

 import matplotlib matplotlib.use('qt4Agg') import librosa "Matplotlib qt-based backends require an external PyQt4, PyQt5,\n" ImportError: Matplotlib qt-based backends require an external PyQt4, PyQt5, or PySide package to be installed, but it was not found. 

También había intentado

 pip install pyside Successfully installed pyside-1.2.4 

Mismo error

 >>> import pyside Traceback (most recent call last): File "", line 1, in  ImportError: No module named pyside 

También obtuve el siguiente error en algún momento al intentar reimportar matplotlib (creo).

 from . import cache ImportError: cannot import name cache