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.

metakermit
sumber
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.

Adrian Martin
sumber
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.

volodymyr
sumber
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)

tacaswell.dll
sumber
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

arnoutaertgeerts
sumber
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...
Bill Moore
sumber
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
2

Mulai ulang kernel dan hapus keluaran (jika tidak dimulai dengan notebook baru), lalu jalankan

%matplotlib tk

Untuk info lebih lanjut, buka Merencanakan dengan matplotlib

Marcin Lentner
sumber
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.

susan097
sumber