IPythonノートブックで対話型matplotlibウィンドウを開くにはどうすればよいですか?


125

私はIPythonを使用して--pylab=inlineおり、プロットを表示するためにインタラクティブでズーム可能なmatplotlib GUI(端末のPythonコンソールで何かをプロットするとポップアップするGUI)にすばやく切り替えたい場合があります。どうすればできますか?できれば、ノートブックを離れたり再起動したりしないでください。

IPy Notebookのインラインプロットの問題は、それらの解像度が制限されており、ズームして一部の小さなパーツを表示できないことです。端末から開始するmaptlotlib GUIを使用して、ズームインしたいグラフの長方形を選択し、それに応じて軸を調整できます。私は実験してみました

from matplotlib import interactive
interactive(True)

そして

interactive(False)

しかし、それは何もしませんでした。オンラインでもヒントは見つかりませんでした。


4
:あなたの元の問題は、私がここで述べてきたように可能になりましたあなたのインラインプロットでズームが可能にされたもう1つの可能な解決策stackoverflow.com/a/22949003/145823
yonilevy

3
%matplotlib notebook 作品
ミュオン2016年

回答:


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。OS Xでは動作しません。Ubuntuで動作する可能性があります。
metakermit 2013年

11
残念ながら、あちこちに切り替えることはできません。pylab = inlineまたはpylab = qtで開始した後に切り替えようとすると、次のようになります。バックエンドがすでに選択されているため、matplotlib.use()へのこの呼び出しは効果がありません。matplotlib.use()は、pylab、matplotlib.pyplot、またはmatplotlib.backendsを初めてインポートするに呼び出す必要があります。
Charl Botha

3
これは私にとってうまくいかなかったので私はこれに反対票を投じましたが、それでもうまくいきませんが、どうやらこれは1927の問題であり、マージ2179で修正されているはずです。@yarox、回答を編集してこの情報を組み込む場合、私は自分の反対票を取り消します。
askewchan 2013年

2
OSXでも、ipython v1.1.0とMPL 1.3.0を使用して問題なく動作します
K.-Michael Aye

1
Win7 x64上のPython 2.7の現在のリリースを使用して、今(2014-08)で動作します。
nerdfever.com 2014

65

インラインプロットからインタラクティブプロットに戻る(パン/ズームできるようにする)だけの場合は、%matplotlibマジックを使用することをお勧めします。

#interactive plotting in separate window
%matplotlib qt 

そしてhtmlに戻る

#normal charts inside notebooks
%matplotlib inline 

%pylab magicは他の多くのものをインポートし、競合を引き起こす可能性さえあります。「pylabからのインポート*」を行います。

新しいノートブックバックエンド(matplotlib 1.4で追加)を使用することもできます。

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

チャートでさらにインタラクティブ性を高めたい場合は、mpld3bokehを見ることができます。mpld3は、大量のデータポイント(例:<5k +)がなく、通常のmatplotlib構文を使用したいが、%matplotlib Notebookに比べてより多くの対話性が必要な場合に最適です。Bokehは多くのデータを処理できますが、独立したライブラリであるため、構文を学ぶ必要があります。

また、pivotabletablejs(pip install 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 bindingqt magicコマンドの場合
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')    

コードセルに(または既存のPythonデモノートブックを変更するだけ)


6

あなたの問題に対するより良い解決策はチャートライブラリかもしれません。優れたHighcharts JavaScriptライブラリを使用して、美しくインタラクティブなプロットを作成できます。HighchartsはHTML svgタグを使用するため、すべてのグラフは実際にはベクター画像です。

いくつかの機能:

  • .png、.jpg、.svg形式でダウンロードできるベクタープロット。これにより、解像度の問題に遭遇することはありません。
  • インタラクティブなチャート(ズーム、スライド、ポイントの上にホバー、...)
  • IPythonノートブックで使用可能
  • 非同期プロット機能を使用して、何百ものデータ構造を同時に探索します。

免責事項:私はライブラリの開発者です


かなり素晴らしいライブラリです!ぜひ試してみてください:)
metakermit '22年

ありがとう!githubでの
感想を教えてください。

1
この回答は間違いなく関連性がありますが、必ずしも「より良い解決策」とは言えません。それが過去におそらく反対投票の原因でした。
volodymyr 2015年

1
この投稿は、Chartsライブラリを使用してインタラクティブなプロットウィンドウを開く方法を教えてくれないため、反対票を投じました。
RobertHönig19年

4

5/28/20117のwww.continuum.io/downloadsにあるAnacondaの「jupyter QTConsole」でipythonを使用しています。

これは、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 bindingPyQt5を次のようにインストールpip install PyQt5してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.