2013-01-10 12 views
87

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

IPyノートブックのインラインプロットの問題は、解像度が制限されているため、一部の小さな部分を見るためにズームできないことです。ターミナルから始まるMaptlotlib GUIを使用して、ズームしたいグラフの矩形を選択することができ、それに応じて軸が調整されます。私は

from matplotlib import interactive 
interactive(True) 

interactive(False) 

を試してみましたが、それは何もしませんでした。私はオンラインでもヒントを見つけることができませんでした。

+4

あなたの元の問題へのもう一つの可能​​な解決策は、私がここで述べてきたように、今可能である、あなたのインラインプロットでズームが可能されていますhttp://stackoverflow.com/a/22949003/145823 – yonilevy

+1

'%のm​​atplotlibのノートブック'作品 – muon

答えて

83

documentationによると、あなたはこのように前後に切り替えることができるはずは:

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

+10

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

+3

これは私のためにはうまくいかなかったので、私はこれを打ち砕きましたが、まだまだですが、明らかにこれは[issue 1927](https://github.com/ipython/ipython/issues/1927)です。 [merge 2179](https://github.com/ipython/ipython/pull/2179)を参照してください。 @yarox、あなたがこの情報を組み込むためにあなたの答えを編集するなら、私は自分のdownvoteを元に戻すでしょう。 – askewchan

41

あなたがしたいのは、インラインプロットからインタラクティブおよびバックに切り替えて(パン/ズームできるように)、%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ボケで見ることができます。 mpld3のデータポイントが豊富でなく(例:< 5k +)、通常のmatplotlib構文を使用したいが、%matplotlibノートブックと比較してよりインタラクティブなものを使用したい場合はmpld3が最適です。 Bokehはたくさんのデータを扱うことができますが、別のライブラリであるため構文を学ぶ必要があります。クールなインタラクティブなデータ探索を再現して、それができる完全に混乱しているが

また、あなたは(pivottablejsをインストールPIP)

from pivottablejs import pivot_ui 
pivot_ui(df) 

をpivottablejsをチェックアウトすることができます。それは私に起こったので、私は非常に早い段階でのみそれを使用して、純粋なインラインmatplotlib/seabornに切り替えようとします。

3

あなたの問題のより良い解決策は、Chartsライブラリです。優れたHighcharts javascriptライブラリを使用して、美しくインタラクティブなプロットを作成することができます。 HighchartsはHTML svgタグを使用しているため、すべてのグラフは実際にはベクトル画像です。

一部の機能:

  • ベクトルプロット
  • インタラクティブチャートは(ズーム、スライドは、ポイントの上にカーソルを置くあなたは解像度の問題に実行されませんので、あなたが.PNG、.JPGと.SVGフォーマットでダウンロードできます、...)
  • IPythonノートブックでも使用可能
  • 非同期プロット機能を使用して、何百ものデータ構造を同時に調べます。

免責事項:私があり、ノートブックで使用するための対話型バックエンド

%matplotlib notebook 

が今そこにあるmatplotlibの1.4.0以降で

+0

かなりいいライブラリです!私はそれを試してみるでしょう:) – metakermit

+0

ありがとう!問題が発生した場合はgithubで何を考えるかを教えてください:) – arnoutaertgeerts

+0

この回答は間違いなく関連性がありますが、必ずしもそれをより良い解決策と呼んでいるわけではありません。これが過去の下降気味を引き起こしたものであり、おそらくそうである。 – volodymyr

13

ライブラリの開発者ですそのエイリアスが登録されていない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のデモノートブックを変更)

1

再起動カーネルとクリア出力(もしないように

新しいノートブックから始める)、次に実行する

%matplotlib tk 

mo再情報に行くPlotting with matplotlib

2

私は "jupyter QTConsole"でAnacondaからwww.continuum.io/downloadsに5/28/20117で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:Pygt4 'というモジュールがありません。 – user3731622

+0

私はuser3731622とまったく同じ問題が発生します。何ができますか?これはこのページのほとんどの回答です – mkheifetz

関連する問題