Saya menggunakan matplotlib untuk membuat plot pencar. Setiap titik pada plot pencar dikaitkan dengan objek bernama. Saya ingin dapat melihat nama objek ketika saya mengarahkan kursor saya ke titik di sebar plot yang terkait dengan objek itu. Secara khusus, alangkah baiknya untuk dapat dengan cepat melihat nama-nama poin yang outlier. Hal terdekat yang saya dapat temukan saat mencari di sini adalah perintah anotasi, tetapi yang muncul untuk membuat label tetap pada plot. Sayangnya, dengan jumlah poin yang saya miliki, plot pencar tidak akan terbaca jika saya memberi label pada setiap poin. Adakah yang tahu cara membuat label yang hanya muncul ketika kursor berada di sekitar titik itu?
python
matplotlib
jdmcbr
sumber
sumber
Jawaban:
Tampaknya tidak ada jawaban lain di sini yang benar-benar menjawab pertanyaan itu. Jadi di sini adalah kode yang menggunakan pencar dan menunjukkan anotasi saat melayang di atas titik pencar.
Karena orang-orang juga ingin menggunakan solusi ini untuk sebuah garis,
plot
bukannya sebar, berikut ini akan menjadi solusi yang sama untukplot
(yang bekerja sedikit berbeda).Tampilkan cuplikan kode
Jika seseorang mencari solusi untuk garis dalam sumbu kembar, lihat Cara membuat label muncul ketika mengarahkan kursor ke suatu titik dalam beberapa sumbu?
Jika seseorang mencari solusi untuk plot bar, silakan lihat misalnya jawaban ini .
sumber
ind["ind"]
sebenarnya adalah daftar indeks untuk semua poin di bawah kursor. Ini berarti bahwa kode di atas benar-benar memberi Anda akses ke semua titik pada posisi tertentu, dan bukan hanya titik paling atas. Misalnya, jika Anda memiliki dua titik yang tumpang tindih, teks dapat dibaca1 2, B C
atau bahkan1 2 3, B C D
jika Anda memiliki 3 titik yang tumpang tindih.0 8, A I
, (lihat gambar ).fig.canvas.draw_idle()
berkali-kali (bahkan mengubah kursor ke siaga). Saya menyelesaikannya dengan menyimpan indeks sebelumnya dan memeriksa apakahind["ind"][0] == prev_ind
. Maka hanya perbarui jika Anda berpindah dari satu titik ke titik lainnya (perbarui teks), berhenti melayang (membuat anotasi tidak terlihat) atau mulai melayang (membuat anotasi terlihat). Dengan perubahan ini jauh lebih bersih dan efisien.%matplotlib notebook
di notebook IPython / Jupyter.Solusi ini berfungsi saat mengarahkan garis tanpa perlu mengkliknya:
sumber
matplotlib
...) - apakah ini bekerja denganipython
/jupyter
notebook? Apakah ini juga berfungsi ketika ada banyak subplot? Bagaimana dengan diagram batang daripada grafik garis?Dari http://matplotlib.sourceforge.net/examples/event_handling/pick_event_demo.html :
sumber
print
Pernyataan juga harus menggunakan parens untuk kompatibilitas dengan python 3Sedikit edit pada contoh yang disediakan di http://matplotlib.org/users/shell.html :
Ini plot plot garis lurus, seperti yang diminta Sohaib
sumber
mpld3 menyelesaikannya untukku. EDIT (KODE DITAMBAH):
Anda dapat memeriksa contoh ini
sumber
TypeError: array([1.]) is not JSON serializable
.mplcursors bekerja untuk saya. mplcursors menyediakan anotasi yang dapat diklik untuk matplotlib. Ini sangat terinspirasi dari mpldatacursor ( https://github.com/joferkington/mpldatacursor ), dengan API yang lebih sederhana
sumber
matplotlib
membuat setiap baris ke-10 dengan warna yang sama, sangat menyebalkan.mplcursors
pilah itu.Jawaban lain tidak menjawab kebutuhan saya untuk menunjukkan tooltips dengan benar dalam versi terbaru dari Jupyter inline matplotlib. Yang ini bekerja:
Mengarah ke sesuatu seperti gambar berikut ketika melewati suatu titik dengan mouse:
sumber
Jika Anda menggunakan notebook jupyter, solusi saya semudah:
Kamu bisa mendapatkan sesuatu seperti
sumber
Saya telah membuat sistem anotasi multi-baris untuk ditambahkan ke: https://stackoverflow.com/a/47166787/10302020 . untuk versi terbaru: https://github.com/AidenBurgess/MultiAnnotationLineGraph
Cukup ubah data di bagian bawah.
sumber