मैं IPython नोटबुक में इंटरैक्टिव matplotlib विंडो कैसे खोल सकता हूं?


125

मैं के साथ IPython का उपयोग कर रहा हूं --pylab=inlineऔर कभी-कभी प्लॉट देखने के लिए इंटरएक्टिव, ज़ूम करने योग्य matplotlib GUI पर स्विच करना पसंद करेगा (एक है कि जब आप एक टर्मिनल पायथन कंसोल में कुछ प्लॉट करते हैं तो पॉप अप होता है)। ऐसा कैसे किया जा सकता था? अधिमानतः मेरी नोटबुक को छोड़ने या पुनः आरंभ किए बिना।

IPy नोटबुक में इनलाइन भूखंडों के साथ समस्या यह है कि वे एक सीमित रिज़ॉल्यूशन के हैं और मैं कुछ छोटे भागों को देखने के लिए उन पर ज़ूम नहीं कर सकता। एक टर्मिनल से शुरू होने वाले maptlotlib GUI के साथ, मैं उस ग्राफ़ की आयत का चयन कर सकता हूं जिसे मैं ज़ूम करना चाहता हूं और कुल्हाड़ियों को तदनुसार समायोजित करना है। मैंने प्रयोग करके देखा

from matplotlib import interactive
interactive(True)

तथा

interactive(False)

लेकिन ऐसा कुछ नहीं किया। मुझे कोई संकेत ऑनलाइन नहीं मिला।


4
आपकी मूल समस्या का एक और संभावित समाधान आपके इनलाइन भूखंडों में ज़ूम करने में सक्षम है, जो अब संभव है जैसा कि मैंने यहां बताया है: stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook काम करता है
muon

जवाबों:


140

प्रलेखन के अनुसार , आपको इस तरह आगे और पीछे स्विच करने में सक्षम होना चाहिए:

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

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

और वह एक नियमित प्लॉट विंडो को पॉप अप करेगा (नोटबुक पर पुनरारंभ आवश्यक हो सकता है)।

आशा है कि ये आपकी मदद करेगा।


2
यह है %pylab qt। ओएस एक्स में काम नहीं करना। शायद उबंटू में यह मदद करेगा।
मेटाकर्मिट

11
दुर्भाग्य से, आप स्विच नहीं कर सकते और फ्रॉस्ट नहीं कर सकते। यदि आप pylab = इनलाइन या pylab = qt के साथ शुरू होने के बाद स्विच करने का प्रयास करते हैं, तो आपको मिलता है: इस कॉल का matplotlib.use () पर कोई प्रभाव नहीं पड़ता क्योंकि बैकएंड पहले ही चुना जा चुका है; matplotlib.use () को पाइलैब से पहले बुलाया जाना चाहिए , matplotlib.pyplot, या matplotlib.backends को पहली बार आयात किया गया है।
चारल बोथा

3
मैंने इसे अस्वीकार कर दिया क्योंकि यह मेरे लिए काम नहीं करता था, और अभी भी नहीं करता है, लेकिन जाहिर है यह 1927 का मुद्दा है और इसे मर्ज 2179 के साथ तय किया जाना चाहिए था । @ योरॉक्स, यदि आप इस जानकारी को शामिल करने के लिए अपने उत्तर को संपादित करते हैं तो मैं अपना पद छोड़ दूंगा।
पूछना

2
OSX पर भी ठीक काम करता है, ipython v1.1.0 और MPL 1.3.0 का उपयोग कर
के।-माइकल Aye

1
Win7 x64 पर पायथन 2.7 की वर्तमान रिलीज़ का उपयोग करके मेरे लिए अभी (2014-08) काम करता है।
nerdfever.com

65

यदि आप सभी इनलाइन प्लॉट्स से इंटरएक्टिव और बैक पर स्विच करना चाहते हैं (ताकि आप पैन / ज़ूम कर सकें), तो% matplotlib मैजिक का उपयोग करना बेहतर होगा।

#interactive plotting in separate window
%matplotlib qt 

और html पर वापस जाएँ

#normal charts inside notebooks
%matplotlib inline 

% pylab जादू अन्य चीजों का एक गुच्छा आयात करता है और यहां तक ​​कि संघर्ष भी हो सकता है। यह "पायलैब आयात *" से करता है।

आप नए नोटबुक बैकेंड का भी उपयोग कर सकते हैं (matplotlib 1.4 में जोड़ा गया):

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

यदि आप अपने चार्ट में अधिक अन्तरक्रियाशीलता चाहते हैं, तो आप mpld3 और bokeh को देख सकते हैं । mpld3 महान है, यदि आपके पास टन के डेटा बिंदु (जैसे <5k +) नहीं हैं और आप% matplotlib नोटबुक की तुलना में सामान्य matplotlib सिंटैक्स का उपयोग करना चाहते हैं, लेकिन अधिक अन्तरक्रियाशीलता। बोकेह बहुत सारे डेटा को संभाल सकता है, लेकिन आपको इसे सिंटैक्स सीखने की जरूरत है क्योंकि यह एक अलग लाइब्रेरी है।

इसके अलावा आप pivottablejs (पाइप स्थापित pivottablejs) की जाँच कर सकते हैं

from pivottablejs import pivot_ui
pivot_ui(df)

हालांकि शांत इंटरैक्टिव डेटा अन्वेषण है, यह पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्यता के साथ गड़बड़ कर सकता है। यह मेरे साथ हुआ है, इसलिए मैं इसे केवल बहुत ही प्रारंभिक चरण में उपयोग करने का प्रयास करता हूं और शुद्ध इनलाइन matplotlib / seaborn पर स्विच करता हूं, एक बार मुझे डेटा के लिए महसूस हुआ।


1
Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.के लिए %matplotlib notebook
mLstudent33

1
ImportError: Failed to import any qt bindingक्यूटी मैजिक कमांड के लिए
mLstudent33

31

Matplotlib 1.4.0 से शुरू होकर अब नोटबुक में उपयोग के लिए एक इंटरैक्टिव बैकएंड है

%matplotlib notebook

IPython के कुछ संस्करण हैं, जिनमें उर्फ ​​पंजीकृत नहीं है, जो पीछे है:

%matplotlib nbagg

अगर वह काम नहीं करता है तो आप IPython को अपडेट करें।

इसके साथ खेलने के लिए, गोटो tmpnb.org

और पेस्ट करें

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

एक कोड सेल में (या केवल मौजूदा अजगर डेमो नोटबुक को संशोधित करें)


6

आपकी समस्या का एक बेहतर समाधान चार्ट लाइब्रेरी हो सकता है । यह आपको सुंदर और संवादात्मक भूखंड बनाने के लिए उत्कृष्ट हाईचर्ट्स जावास्क्रिप्ट लाइब्रेरी का उपयोग करने में सक्षम बनाता है । Highcharts HTML svgटैग का उपयोग करता है इसलिए आपके सभी चार्ट वास्तव में वेक्टर चित्र हैं।

कुछ सुविधाएं:

  • वेक्टर प्लॉट्स जिसे आप .png, .jpg और .svg फॉर्मेट में डाउनलोड कर सकते हैं ताकि आप रिज़ॉल्यूशन समस्याओं में कभी नहीं भागेंगे
  • इंटरएक्टिव चार्ट (ज़ूम, स्लाइड, पॉइंट्स पर होवर करें, ...)
  • IPython नोटबुक में उपयोग करने योग्य
  • एसिंक्रोनस प्लॉटिंग क्षमताओं का उपयोग करके एक ही समय में सैकड़ों डेटा संरचनाओं का अन्वेषण करें।

अस्वीकरण: मैं पुस्तकालय का डेवलपर हूं


एक बहुत अच्छा पुस्तकालय! मैं इसे ज़रूर
आज़माऊंगा

धन्यवाद! मुझे पता है कि आप
गितुब

1
हालांकि यह उत्तर निश्चित रूप से प्रासंगिक है, मैं जरूरी नहीं कि इसे "बेहतर समाधान" कहूं। यही कारण है कि अतीत में गिरावट आई, सबसे अधिक संभावना है।
वोलोडाइमिर

1
डाउनवोट, चूंकि यह पोस्ट मुझे नहीं बताती है कि मैं वास्तव में एक इंटरैक्टिव प्लॉट विंडो खोलने के लिए चार्ट लाइब्रेरी का उपयोग कैसे कर सकता हूं।
राबर्ट होनिग

4

मैं 5/28/20117 को www.continuum.io/downloads पर एनाकोंडा के "ज्यूपिटर QTConsole" में 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
जब मैं उपयोग करने की कोशिश करता हूं तो मुझे %matplotlibएक त्रुटि मिलती है जो समाप्त होती हैImportError: No module named 'PyQt4'
user3731622

मुझे user3731622 जैसी ही समस्या है। क्या किया जा सकता है? यह इस पृष्ठ के अधिकांश उत्तरों के लिए है
bernando_vialli

@mkheifetz @ user3731622 आपको पैकेज को स्थापित करने की आवश्यकता हो सकती है: sudo apt-get install python-pyqt5याsudo apt-get install python-pyqt5
ttb


0

आप उपयोग कर सकते हैं

%matplotlib qt

यदि आपको त्रुटि मिली है, ImportError: Failed to import any qt bindingतो PyQt5 को इस रूप में स्थापित करें: pip install PyQt5और यह मेरे लिए काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.