Bagaimana cara mendapatkan plot interaktif lagi di Spyder / IPython / matplotlib?

92

Saya memutakhirkan dari Python (x, y) 2.7.2.3 ke 2.7.6.0 di Windows 7 (dan senang melihat bahwa saya akhirnya dapat mengetik function_name?dan melihat docstring di Object Inspector lagi) tetapi sekarang plotting tidak berfungsi seperti itu biasanya.

Sebelumnya (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), ketika saya memplot skrip ini , misalnya, itu akan memplot subplot secara berdampingan di jendela interaktif:

masukkan deskripsi gambar di sini

Sekarang (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) ketika saya mencoba untuk memplot sesuatu, ia melakukan subplot sebagai PNG inline kecil, yang merupakan perubahan pada IPython :

PNG kecil inline

Jadi saya mencari opsi dan menemukan ini:

opsi grafik

yang sepertinya mengatakan bahwa saya bisa mendapatkan kembali plot interaktif lama, dengan 4 subplot ditampilkan secara berdampingan, tetapi ketika saya beralih ke "Otomatis", dan mencoba merencanakan sesuatu, itu tidak melakukan apa-apa. Tidak ada plot sama sekali.

Jika saya mengalihkan tarik-turun ini ke Qt, atau menghapus centang "Aktifkan dukungan", ini hanya memplot subplot pertama, atau bagiannya, lalu berhenti:

masukkan deskripsi gambar di sini

Bagaimana cara mendapatkan perilaku lama dari 4 subplot berdampingan dalam satu gambar yang dapat saya gunakan untuk berinteraksi?

endolit
sumber
Saya pikir ini harus menjadi laporan bug ke pythonxy. Dugaan naif saya adalah bahwa mereka menggunakan pyplot untuk menangani semua plot yang ada dan digigit di pantat untuk itu (yang tampaknya salah, karena mereka memiliki widget qt mereka sendiri).
tacaswell
1
@tcaswell Siapa "mereka" dan apa yang akan mereka gunakan selain pyplot?
endolith
1
Dapatkah Anda mereproduksi masalah ini di luar pythonxy (hanya menggunakan ipython + qtconsole langsung)? Tidak ada cukup informasi di sini untuk memilah-milah apa yang salah.
tacaswell
1
Saya kira itu bug di Spyder (Spyder adalah IDE, pythonxy adalah distribusinya).
Thomas K
1
@tcaswell: Aha. Sepertinya skrip saya menghasilkan kesalahan matplotlib yang kemudian dikirim ke tempat lain selain konsol IPython. Mereka muncul jika saya menggunakan konsol Qt, dan sekarang saya mencarinya, mereka muncul di tab Konsol reguler Spyder. Jika saya membuat skrip yang lebih sederhana, itu berfungsi, apakah mesin negara atau berorientasi objek. Saya berasumsi saya harus mengubah beberapa pengaturan IPython karena plot inline baru.
endolit

Jawaban:

136

Ubah backend menjadi otomatis:

Alat> preferensi> Konsol IPython> Grafik> Backend grafik> Backend: Otomatis

Kemudian tutup dan buka Spyder.

Victor Arellano
sumber
27
Penutupan dan pembukaan memang perlu. Hanya bertanya-tanya mengapa ini bukan nilai default.
Mathias711
5
Juga, bagi siapa pun yang masih tidak melihat plot mereka (seperti saya tidak), jendela plot mungkin diam-diam muncul_behind_ jendela konsol Anda (setidaknya di Spyder pada Windows 10) sehingga Anda mungkin harus mencari-cari jendela Anda.
Joshua Glazer
3
Bagi mereka yang kesulitan menemukan ini, ini terletak dipython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor
6
Alih-alih memulai ulang Spyder, Anda juga dapat memulai ulang kernel (baik dengan mengklik roda pengaturan di konsol dan kemudian "Mulai ulang kernel" atau melalui pintasan keyboard (di Mac Cmd +.)
Michael
Saya tidak tahu mengapa, tetapi mengubah ke Otomatis, memulai ulang Spyder, kemudian mengubah ke kembali ke Inline menyebabkan plot sebaris mulai ditampilkan setiap kali saya mengeluarkan perintah input dalam satu lingkaran. Ini sangat membantu!
Josiah Yoder
51

Anda dapat dengan cepat mengontrol ini dengan mengetikkan perintah ajaib bawaan di konsol IPython Spyder, yang saya temukan lebih cepat daripada memilih ini dari menu preferensi. Perubahan segera berlaku, tanpa perlu memulai ulang Spyder atau kernel.

Untuk beralih ke plot "otomatis" (yaitu interaktif), ketik:

%matplotlib auto

lalu jika Anda ingin beralih kembali ke "sebaris", ketik ini:

%matplotlib inline

(Catatan: perintah ini tidak berfungsi di konsol non-IPython)

Lihat latar belakang selengkapnya tentang topik ini: Tujuan "% matplotlib inline"

Mike T
sumber
Dengan Python 3.6, saya memperolehmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo
2
@Karlo kesalahan itu diharapkan dari penerjemah "python" konvensional. Sintaks ini hanya valid dengan ipython atau Spyder.
Mike T
Oke, saya menggunakannya di Spyder tetapi di konsol Python. Memang, ini berfungsi di konsol IPython.
Karlo
3
Apakah ada cara untuk mengaturnya menggunakan skrip? Yaitu memilih di mana output grafik dalam skrip? Terima kasih.
Royi
1
Ini tampaknya tidak berfungsi di Spyder, meskipun itu cara melakukannya di jendela IPython normal. Menggunakan preferensi menu berhasil untuk saya; tidak yakin mengapa ini tidak.
Turtles Are Cute
10

Setelah menerapkan: Alat> preferensi> Grafik> Backend> Otomatis Mulai ulang kernel masukkan deskripsi gambar di sini

Dan Anda pasti akan mendapatkan Plot Interaktif. Selamat Coding!

Archit Pandey
sumber
5

Seperti yang dikatakan di komentar, masalahnya terletak pada skrip Anda. Sebenarnya ada 2 masalah:

  • Ada kesalahan matplotlib, saya rasa Anda menyampaikan argumen sebagai None suatu tempat. Mungkin karena defaultdict?
  • Anda menelepon show()setelah setiap subplot. show()harus dipanggil sekali di akhir skrip Anda. Alternatifnya adalah menggunakan mode interaktif, cari iondi dokumentasi matplotlib.
J. Martinot-Lagarde
sumber
2

Ini sebenarnya cukup mudah untuk diperbaiki dan tidak menggunakan pengkodean apa pun:

1. Klik pada tab Plots di atas konsol. 2. Kemudian di sudut kanan atas layar plot, klik tombol opsi. 3. Terakhir, hapus centang pada tombol "Bisukan plot sebaris"

Sekarang jalankan kembali skrip Anda dan grafik Anda akan muncul di konsol.

Bersulang.

Chris
sumber