kode contoh matplotlib tidak berfungsi di lingkungan virtual python

Saya mencoba menampilkan koordinat x y z suatu gambar di matplotlib. kode contoh berfungsi dengan baik pada instalasi python global: Saat saya menggerakkan kursor, nilai x,y,z dapatkan pembaruan secara instan. Namun, ketika saya menjalankan kode contoh pada lingkungan virtual python, saya akan mengklik gambar beberapa kali agar koordinatnya ditampilkan, kemudian ketika saya mengklik posisi yang berbeda, beberapa akan diperbarui. Setelah beberapa klik, koordinat tidak akan diperbarui lagi.

Saya tidak tahu cara men-debug ini.


person MAS    schedule 13.10.2015    source sumber
comment
Jika kodenya sama, maka pasti ada perbedaan pada paket apa pun atau pada versi python. Gunakan pip freeze baik di lingkungan global maupun virtual dan bandingkan. Lihat juga apakah versi pythonnya sendiri sama. Bisa juga matplotlib menggunakan backend yang berbeda, jadi periksa juga matplotlib.get_backend().   -  person swenzel    schedule 13.10.2015
comment
versi pythonnya sama. matplotlibnya berbeda. Saya menghapusnya dari virtualenv saya dan menginstal versi yang sama dengan yang ditemukan di python global saya. Namun masalahnya tetap ada. @swenzel   -  person MAS    schedule 13.10.2015
comment
Bagaimana dengan bagian belakangnya?   -  person swenzel    schedule 13.10.2015
comment
Saya mendapatkan MacOSX untuk @swenzel.   -  person MAS    schedule 14.10.2015
comment
tautan di bawah ini tampaknya memiliki masalah serupa dan menjelaskan masalahnya dengan lebih baik. Namun, itu tidak mempunyai jawaban. stackoverflow.com /pertanyaan/29754360/   -  person MAS    schedule 14.10.2015
comment
hal yang mungkin untuk dicoba adalah menggunakan backend alternatif matplotlib.org/faq /usage_faq.html#what-is-a-backend untuk matplotlib (misalnya gunakan qt4 alih-alih 'macosx')   -  person J Richard Snape    schedule 15.10.2015
comment
Terima kasih banyak. Ini menyelesaikan masalahnya. @JRichardSnape   -  person MAS    schedule 16.10.2015
comment
@MAS hebat - Saya telah menambahkannya sebagai jawaban sehingga Anda dapat menerima dan meninggalkan info di sini untuk pengunjung berikutnya   -  person J Richard Snape    schedule 17.10.2015


Jawaban (4)


Ini mungkin masalah dengan backend macosx untuk matplotlib. Beralih menggunakan backend alternatif untuk matplotlib (misalnya gunakan qt4 alih-alih 'macosx'). Untuk detail tentang cara beralih backend dan apa sebenarnya maksudnya - lihat dokumen di sini. Perhatikan bahwa Anda mungkin harus menginstal backend terlebih dahulu - mis. pyqt untuk menggunakan backend qt4agg seperti yang saya sarankan di sini.

Singkatnya - backend menangani keluaran dari matplotlib dan matplotlib dapat menargetkan format keluaran yang berbeda. Ini bisa berupa format keluaran tampilan gui (misalnya wx, qt4 dan seterusnya), atau keluaran file (misalnya pdf). Ini masing-masing dikenal sebagai backend interaktif dan non-interaktif.

Untuk mengubah backend, lakukan juga

import matplotlib
matplotlib.use('qt4agg')

dalam kode, atau - jika Anda ingin mengubahnya setiap kali Anda memulai matplotlib - edit pengaturan file matplotlibrc Anda atribut backend mis.

backend: Qt4Agg

Catatan Saya diperingatkan oleh komentar bahwa sejak memposting jawaban ini, dokumen matplotlib sekarang merujuk ke masalah ini dan menyarankan solusi, meskipun pemberi komentar mencatat bahwa solusi yang ditawarkan dalam jawaban ini (beralih ke backend Qt) berfungsi untuk mereka ketika solusi dokumen resmi tidak memungkinkan bagi mereka.

person J Richard Snape    schedule 16.10.2015
comment
Berhasil untuk saya (setelah menginstal pyqt dengan brew)! Dokumentasi matplotlib menyarankan solusi yang lebih lama, yang sebenarnya tidak dapat saya lakukan dalam praktiknya.. matplotlib.org/faq/ virtualenv_faq.html - person SeF; 06.02.2016

Yang akhirnya berhasil bagi saya adalah membuat file matplotlibrc lokal yang berisi arahan: backend: TkAgg.

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

Ini berguna:

import matplotlib
print matplotlib.rcParams['backend']

Catatan Lainnya:

Saya juga telah menginstal pyqt menggunakan Homebrew (brew install pyqt) dan menyalin (bisa memindahkannya saja) ke $MyVirtEnv/lib/python2.7/site-packages/ dari /usr/local/lib/python2.7/site-packages/PyQt4

Tapi ketika saya

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.

Juga telah mencoba

pip install pyside
Successfully installed pyside-1.2.4

Kesalahan yang sama

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

Juga mendapat kesalahan berikut di beberapa titik ketika mencoba mengimpor kembali matplotlib (menurut saya).

from . import cache
ImportError: cannot import name cache
person MikeiLL    schedule 15.10.2016

Seperti yang ditunjukkan dalam FAQ Matplotlib virtualenv, vext adalah solusinya di sini.

Misalnya, memungkinkan untuk menggunakan pyqt5 di seluruh sistem.

Ini diperlukan hingga pengaturan PyQt5 mengetahui tentang virtualenvs:

pip3 install vext.pyqt5
person ederag    schedule 09.08.2019

Cukup tambahkan plt.show() di akhir dan masalah saya terpecahkan.

person Man    schedule 20.08.2019
comment
Ini praktis hanya jawaban kode. Apakah Anda ingin membantu melawan kesalahpahaman bahwa StackOverflow adalah layanan penulisan kode gratis, dengan menambahkan penjelasan? - person Yunnosch; 20.08.2019