IPython not defterinde etkileşimli matplotlib penceresini nasıl açabilirim?


125

IPython ile birlikte kullanıyorum --pylab=inlineve bazen grafikleri görüntülemek için etkileşimli, yakınlaştırılabilir matplotlib GUI'ye (bir terminal Python konsolunda bir şey çizdiğinizde ortaya çıkan) hızlıca geçmek istiyorum. Bunu nasıl yapabilirim? Tercihen dizüstü bilgisayarımı bırakmadan veya yeniden başlatmadan.

IPy dizüstü bilgisayardaki satır içi grafiklerle ilgili sorun, sınırlı bir çözünürlüğe sahip olmaları ve bazı küçük parçaları görmek için onları yakınlaştıramıyorum. Bir terminalden başlayan maptlotlib GUI ile, yakınlaştırmak istediğim grafiğin bir dikdörtgenini seçebilirim ve eksenler buna göre ayarlanır. İle deney yapmayı denedim

from matplotlib import interactive
interactive(True)

ve

interactive(False)

ama bu hiçbir şey yapmadı. İnternette de herhangi bir ipucu bulamadım.


4
Orijinal sorununuz için başka bir olası çözüm, satır içi grafiklerinizde yakınlaştırmayı etkinleştirmektir, bu da burada açıkladığım gibi artık mümkün: stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook işler
muon

Yanıtlar:


140

Belgelere göre , şu şekilde ileri geri geçiş yapabilmelisiniz:

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

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

ve bu normal bir çizim penceresi açacaktır (dizüstü bilgisayarda yeniden başlatma gerekli olabilir).

Umarım bu yardımcı olur.


2
Bu %pylab qt. OS X'te çalışmıyor. Belki Ubuntu'da yardımcı olur.
metakermit

11
Maalesef, geçiş yapamazsınız. Pylab = inline veya pylab = qt ile başladıktan sonra geçiş yapmaya çalışırsanız, şunu elde edersiniz: Bu matplotlib.use () çağrısının hiçbir etkisi yoktur çünkü arka uç zaten seçilmiştir; pylab, matplotlib.pyplot veya matplotlib.backends ilk kez içe aktarılmadan önce matplotlib.use () çağrılmalıdır .
Charl Botha

3
Bunu reddettim çünkü benim için işe yaramadı ve hala çalışmıyor, ancak görünüşe göre bu 1927 sorunu ve 2179 ile düzeltilmesi gerekiyordu . @yarox, cevabınızı bu bilgiyi dahil edecek şekilde düzenlerseniz, olumsuz oyumu geri alırım.
askewchan

2
ipython v1.1.0 ve MPL 1.3.0
K.-Michael Aye

1
Win7 x64'te Python 2.7'nin güncel sürümünü kullanarak benim için (2014-08) çalışıyor.
nerdfever.com

65

Tek yapmak istediğiniz satır içi çizimlerden etkileşimli ve geri geçiş yapmaksa (böylece kaydırma / yakınlaştırma yapabilirsiniz),% matplotlib büyüsünü kullanmak daha iyidir.

#interactive plotting in separate window
%matplotlib qt 

ve html'ye dön

#normal charts inside notebooks
%matplotlib inline 

% pylab büyüsü bir dizi başka şeyi içe aktarır ve hatta bir çatışmaya neden olabilir. "Pylab içe aktarımından *" yapar.

Ayrıca yeni dizüstü bilgisayar arka ucunu da kullanabilirsiniz (matplotlib 1.4'e eklenmiştir):

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

Eğer listelerinde daha fazla etkileşim olmasını istiyorsanız, bakabilirsiniz mpld3 ve bokeh . Eğer tonlarca veri noktanız yoksa (örn. <5k +) ve normal matplotlib sözdizimini kullanmak istiyorsanız, ancak% matplotlib notebook'a kıyasla daha fazla etkileşim istiyorsanız, mpld3 harikadır. Bokeh birçok veriyi işleyebilir, ancak ayrı bir kitaplık olduğu için sözdizimini öğrenmeniz gerekir.

Ayrıca pivottablejs (pip install pivottablejs) kontrol edebilirsiniz

from pivottablejs import pivot_ui
pivot_ui(df)

Ne kadar güzel etkileşimli veri keşfi olsa da, yeniden üretilebilirlikle tamamen karışabilir. Bu benim başıma geldi, bu yüzden sadece çok erken bir aşamada kullanmaya ve verileri hissettiğimde saf satır içi matplotlib / seaborn'a geçmeye çalışıyorum.


1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.için %matplotlib notebook.
mLstudent33

1
ImportError: Failed to import any qt bindingqt sihirli komutu için
mLstudent33

31

Matplotlib 1.4.0'dan başlayarak, artık dizüstü bilgisayarda kullanım için etkileşimli bir arka uç var

%matplotlib notebook

IPython'un bu takma ada sahip olmayan birkaç sürümü vardır, geri dönüş:

%matplotlib nbagg

Bu işe yaramazsa, IPython'u güncelleyin.

Bununla oynamak için, tmpnb.org adresine gidin.

ve yapıştır

%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')    

bir kod hücresine (veya sadece mevcut python demo not defterini değiştirin)


6

Sorununuz için daha iyi bir çözüm, Grafikler kitaplığı olabilir . Güzel ve etkileşimli grafikler oluşturmak için mükemmel Highcharts javascript kitaplığını kullanmanızı sağlar . Highcharts, HTML svgetiketini kullanır, bu nedenle tüm grafikleriniz aslında vektör görüntüleridir.

Bazı özellikler:

  • .Png, .jpg ve .svg formatlarında indirebileceğiniz vektör çizimleri, böylece asla çözünürlük sorunlarıyla karşılaşmazsınız
  • Etkileşimli grafikler (yakınlaştırma, kaydırma, noktaların üzerine gelme, ...)
  • IPython not defterinde kullanılabilir
  • Eşzamansız çizim yeteneklerini kullanarak yüzlerce veri yapısını aynı anda keşfedin.

Feragatname: Kitaplığın geliştiricisiyim


Oldukça güzel bir kütüphane! Deneyeceğime emin olacağım :)
metakermit

Teşekkürler!
Github'da

1
Bu cevap kesinlikle alakalı olsa da, ben buna mutlaka "daha iyi bir çözüm" demem. Geçmişte büyük olasılıkla olumsuz oylamaya neden olan buydu.
volodymyr

1
Bu gönderi, etkileşimli bir çizim penceresi açmak için Grafikler kitaplığını gerçekten nasıl kullanabileceğimi söylemediğinden, olumsuz oy verildi.
Robert Hönig

4

5/28/20117 tarihinde www.continuum.io/downloads adresindeki Anaconda'dan "jupyter QTConsole" da ipython kullanıyorum.

İpython büyüsünü kullanarak ayrı bir pencere ile satır içi çizim modu arasında ileri geri hareket etmek için bir örnek.

>>> 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
Ben kullanmaya çalıştığınızda %matplotlibBirlikte hangi uçlarının bir hataylaImportError: No module named 'PyQt4'
user3731622

User3731622 ile aynı sorunu alıyorum. Ne yapılabilir? Bu, bu sayfadaki cevapların çoğu için
bernando_vialli

: @mkheifetz @ user3731622 Paketi yüklemeniz gerekebilir sudo apt-get install python-pyqt5veyasudo apt-get install python-pyqt5
TTB


0

Kullanabilirsiniz

%matplotlib qt

Hatayı ImportError: Failed to import any qt bindingalırsanız, PyQt5'i şu şekilde kurun: pip install PyQt5ve benim için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.