Bagaimana cara membuka jendela matplotlib interaktif di notebook IPython?


125

Saya menggunakan IPython dengan --pylab=inlinedan kadang-kadang ingin segera beralih ke GUI matplotlib yang interaktif dan dapat diperbesar untuk melihat plot (yang muncul ketika Anda merencanakan sesuatu di konsol Python terminal). Bagaimana saya bisa melakukan itu? Lebih disukai tanpa meninggalkan atau memulai ulang buku catatan saya.

Masalah dengan plot inline di notebook IPy adalah resolusinya terbatas dan saya tidak dapat memperbesarnya untuk melihat beberapa bagian yang lebih kecil. Dengan GUI maptlotlib yang dimulai dari terminal, saya dapat memilih persegi panjang dari grafik yang ingin saya perbesar dan sumbu menyesuaikannya. Saya mencoba bereksperimen dengan

from matplotlib import interactive
interactive(True)

dan

interactive(False)

tapi itu tidak melakukan apa-apa. Saya juga tidak bisa menemukan petunjuk apa pun secara online.


4
Solusi lain yang mungkin untuk masalah asli Anda adalah mengaktifkan zoom di plot inline Anda, yang sekarang dimungkinkan seperti yang telah saya jelaskan di sini: stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook bekerja
muon

Jawaban:


140

Menurut dokumentasi , Anda harus dapat beralih seperti ini:

In [2]: %matplotlib inline 
In [3]: plot(...)

In [4]: %matplotlib qt  # wx, gtk, osx, tk, empty uses default
In [5]: plot(...) 

dan itu akan memunculkan jendela plot biasa (restart pada notebook mungkin diperlukan).

Saya harap ini membantu.


2
Itu %pylab qt. Tidak berfungsi di OS X. Mungkin di Ubuntu ini akan membantu.
metakermit

11
Sayangnya, Anda tidak dapat beralih ke sana kemari. Jika Anda mencoba untuk beralih setelah memulai dengan pylab = inline atau pylab = qt, Anda mendapatkan: Panggilan ke matplotlib.use () ini tidak berpengaruh karena backend telah dipilih; matplotlib.use () harus dipanggil sebelum pylab, matplotlib.pyplot, atau matplotlib.backends diimpor untuk pertama kali.
Charl Botha

3
Saya menurunkan suara ini karena itu tidak berhasil untuk saya, dan masih tidak, tetapi tampaknya ini adalah masalah 1927 dan seharusnya sudah diperbaiki dengan penggabungan 2179 . @yarox, jika Anda mengedit jawaban Anda untuk menyertakan info ini, saya akan membatalkan suara negatif saya.
askewchan

2
berfungsi dengan baik di sini di OSX juga, menggunakan ipython v1.1.0 dan MPL 1.3.0
K.-Michael Aye

1
Bekerja untuk saya sekarang (2014-08) menggunakan rilis saat ini dari Python 2.7 di Win7 x64.
nerdfever.com

65

Jika yang ingin Anda lakukan hanyalah beralih dari plot sebaris ke interaktif dan kembali (sehingga Anda dapat menggeser / memperbesar), lebih baik menggunakan sihir% matplotlib.

#interactive plotting in separate window
%matplotlib qt 

dan kembali ke html

#normal charts inside notebooks
%matplotlib inline 

% pylab magic mengimpor banyak hal lain dan bahkan dapat menimbulkan konflik. Itu "dari pylab import *".

Anda juga dapat menggunakan backend notebook baru (ditambahkan di matplotlib 1.4):

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 

Jika Anda ingin memiliki lebih banyak interaktivitas dalam bagan Anda, Anda dapat melihat mpld3 dan bokeh . mpld3 sangat bagus, jika Anda tidak memiliki banyak titik data (misalnya <5k +) dan Anda ingin menggunakan sintaks matplotlib normal, tetapi lebih interaktivitas, dibandingkan dengan notebook% matplotlib. Bokeh dapat menangani banyak data, tetapi Anda perlu mempelajari sintaksnya karena ini adalah pustaka terpisah.

Anda juga dapat memeriksa pivottablejs (pip install pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)

Betapapun kerennya eksplorasi data interaktif, itu benar-benar dapat mengacaukan reproduktifitas. Itu telah terjadi pada saya, jadi saya mencoba menggunakannya hanya pada tahap yang sangat awal dan beralih ke matplotlib / seaborn inline murni, setelah saya merasakan datanya.


1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.untuk %matplotlib notebook.
mL siswa33

1
ImportError: Failed to import any qt bindinguntuk perintah ajaib qt
mLstudent33

31

Dimulai dengan matplotlib 1.4.0 sekarang ada backend interaktif untuk digunakan di notebook

%matplotlib notebook

Ada beberapa versi IPython yang tidak memiliki alias itu terdaftar, yang mundur adalah:

%matplotlib nbagg

Jika itu tidak berhasil, perbarui IPython Anda.

Untuk bermain dengan ini, buka tmpnb.org

dan tempel

%matplotlib notebook

import pandas as pd
import numpy as np
import matplotlib

from matplotlib import pyplot as plt
import seaborn as sns

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
                  columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')    

ke dalam sel kode (atau cukup modifikasi notebook demo python yang ada)


6

Solusi yang lebih baik untuk masalah Anda mungkin perpustakaan Charts . Ini memungkinkan Anda untuk menggunakan pustaka javascript Highcharts yang sangat baik untuk membuat plot yang indah dan interaktif. Highcharts menggunakan svgtag HTML sehingga semua bagan Anda sebenarnya adalah gambar vektor.

Beberapa fitur:

  • Plot vektor yang dapat Anda unduh dalam format .png, .jpg dan .svg sehingga Anda tidak akan pernah mengalami masalah resolusi
  • Grafik interaktif (zoom, geser, arahkan kursor ke titik, ...)
  • Dapat digunakan di notebook IPython
  • Jelajahi ratusan struktur data pada saat yang sama menggunakan kapabilitas plotting asynchronous.

Penafian: Saya adalah pengembang perpustakaan


Perpustakaan yang cukup bagus! Saya pasti akan mencobanya :)
metakermit

Terima kasih! Beri tahu saya pendapat Anda tentang github dan kirimkan masalah jika Anda mengalami masalah :)
arnoutaertgeerts

1
Meskipun jawaban ini benar-benar relevan, saya belum tentu menyebutnya sebagai "solusi yang lebih baik". Kemungkinan besar, itulah yang menyebabkan suara negatif di masa lalu.
volodymyr

1
Tidak dipilih, karena posting ini tidak memberi tahu saya bagaimana sebenarnya saya dapat menggunakan library Charts untuk membuka jendela plot interaktif.
Robert Hönig

4

Saya menggunakan ipython di "jupyter QTConsole" dari Anaconda di www.continuum.io/downloads pada 5/28/20117.

Berikut adalah contoh untuk bolak-balik antara jendela terpisah dan mode plot sebaris menggunakan sihir ipython.

>>> import matplotlib.pyplot as plt

# data to plot
>>> x1 = [x for x in range(20)]

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close() 

# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close() 

# Note: the %matplotlib magic above causes:
#      plt.plot(...) 
# to implicitly include a:
#      plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...

1
Ketika saya mencoba menggunakan %matplotlibsaya mendapatkan kesalahan yang diakhiri denganImportError: No module named 'PyQt4'
user3731622

Saya mendapatkan masalah yang sama persis dengan user3731622. Apa yang bisa dilakukan? Ini untuk sebagian besar jawaban di halaman ini
bernando_vialli

@mkheifetz @ user3731622 Anda mungkin perlu menginstal paket: sudo apt-get install python-pyqt5atausudo apt-get install python-pyqt5
ttb


0

Kamu bisa memakai

%matplotlib qt

Jika Anda mendapatkan kesalahan, ImportError: Failed to import any qt bindinginstal PyQt5 sebagai: pip install PyQt5dan itu berfungsi untuk saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.