web-dev-qa-db-ja.com

IPythonノートブックでインタラクティブなmatplotlibウィンドウを開くにはどうすればよいですか?

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

IPyノートブックのインラインプロットの問題は、それらの解像度が限られていることと、いくつかの小さな部品を見るためにズームインできないことです。ターミナルから起動するmaptlotlib GUIを使用して、拡大したいグラフの長方形を選択し、それに応じて軸を調整できます。試した

from matplotlib import interactive
interactive(True)

そして

interactive(False)

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

103
metakermit

ドキュメント によると、次のように切り替えることができるはずです。

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

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

通常のプロットウィンドウがポップアップ表示されます(ノートブックでの再起動が必要になる場合があります)。

これがお役に立てば幸いです。

108
Adrian Martin

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

#interactive plotting in separate window
%matplotlib qt 

そしてhtmlに戻る

#normal charts inside notebooks
%matplotlib inline 

%pylab magicは他の多くのものをインポートし、競合を引き起こすことさえあります。 「from pylab import *」を実行します。

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

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

チャートでよりインタラクティブな機能を使用したい場合は、mpldおよびbokehをご覧ください。トンのデータポイント(たとえば<5k +)がなく、通常のmatplotlib構文を使用したいが、%matplotlibノートブックと比較してよりインタラクティブな場合、mpld3は素晴らしいです。 Bokehは多くのデータを処理できますが、別個のライブラリであるため、構文を学習する必要があります。

また、pivottablejs(pip install pivottablejs)をチェックアウトできます。

from pivottablejs import pivot_ui
pivot_ui(df)

どんなに優れたインタラクティブなデータ探索であっても、完全に再現性を損なう可能性があります。それは私に起こったので、私は非常に早い段階でのみそれを使用し、データの感覚を得た後、純粋なインラインmatplotlib/seabornに切り替えようとします。

52
volodymyr

Matplotlib 1.4.0以降、ノートブックで使用するためのインタラクティブなバックエンドがあります。

%matplotlib notebook

エイリアスが登録されていないIPythonのバージョンがいくつかありますが、フォールバックは次のとおりです。

%matplotlib nbagg

うまくいかない場合は、IPythonを更新してください。

これで遊ぶには、goto 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デモノートブックを変更するだけ)

28
tacaswell

私は、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...
4
Bill Moore

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

いくつかの機能:

  • .png、.jpg、および.svg形式でダウンロードできるベクタープロットで、解像度の問題が発生することはありません
  • インタラクティブなチャート(ズーム、スライド、ポイントにカーソルを合わせるなど)
  • IPythonノートブックで使用可能
  • 非同期プロット機能を使用して、数百のデータ構造を同時に探索します。

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

3

カーネルを再起動して出力をクリアし(新しいノートブックで起動しない場合)、実行します

%matplotlib tk

詳細については、 matplotlibでのプロット にアクセスしてください。

2
Marcin Lentner