如何在IPython笔记本中打开交互式matplotlib窗口?

时间:2013-01-10 15:55:48

标签: python matplotlib jupyter-notebook

我正在使用--pylab=inline的IPython,并且有时希望快速切换到交互式,可缩放的matplotlib GUI以查看绘图(当您在终端Python控制台中绘制内容时弹出的那个)。我怎么能这样做?最好不要离开或重新启动我的笔记本。

IPy笔记本中内联图的问题在于它们的分辨率有限,我无法放大它们以查看一些较小的部分。使用从终端开始的maptlotlib GUI,我可以选择要放大的图形矩形,并相应地调整轴。我尝试过试验

from matplotlib import interactive
interactive(True)

interactive(False)

但是没有做任何事情。我也无法在网上找到任何提示。

7 个答案:

答案 0 :(得分:107)

根据documentation,您应该能够像这样来回切换:

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

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

这将弹出一个常规的绘图窗口(可能需要在笔记本上重启)。

我希望这会有所帮助。

答案 1 :(得分:52)

如果你想做的就是从内嵌图切换到交互式和后退(这样你可以平移/缩放),最好使用%matplotlib magic。

#interactive plotting in separate window
%matplotlib qt 

并返回html

#normal charts inside notebooks
%matplotlib inline 

%pylab magic会导入一堆其他东西,甚至可能导致冲突。它来自pylab import *"。

您还可以使用新的笔记本后端(在matplotlib 1.4中添加):

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

如果您希望在图表中拥有更多互动性,可以查看 mpld3 散景。 mpld3很棒,如果你没有数据点(例如< 5k +)并且你想使用普通的matplotlib语法,但与%matplotlib笔记本相比,它具有更多的交互性。 Bokeh可以处理大量数据,但您需要学习它的语法,因为它是一个单独的库。

您还可以查看pivottablejs(pip install pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)

无论酷炫的交互式数据探索如何,它都可以完全混淆再现性。它发生在我身上,所以我尝试只在最初阶段使用它并切换到纯粹的内联matplotlib / seaborn,一旦我对数据有了感觉。

答案 2 :(得分:28)

从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演示笔记本)

答案 3 :(得分:5)

您可以使用

%matplotlib qt

如果出现错误ImportError: Failed to import any qt binding,则将PyQt5安装为:pip install PyQt5,它对我有用。

答案 4 :(得分:4)

我在2011年5月28日的www.continuum.io/downloads上使用了来自Anaconda的“jupyter QTConsole”中的ipython。

这是一个使用ipython magic在单独的窗口和内联绘图模式之间来回切换的示例。

>>> 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...

答案 5 :(得分:3)

问题的更好解决方案可能是Charts库。它使您能够使用优秀的Highcharts JavaScript库来制作精美的互动图。 Highcharts使用HTML svg标记,因此所有图表实际上都是矢量图像。

一些功能:

  • 您可以.png,.jpg和.svg格式下载的矢量图,这样您就不会遇到解决问题
  • 交互式图表(缩放,滑动,悬停点,......)
  • 可在IPython笔记本中使用
  • 使用异步绘图功能同时探索数百个数据结构。

免责声明:我是图书馆的开发者

答案 6 :(得分:2)

重新启动内核并清除输出(如果不是从新笔记本开始),然后运行

%matplotlib tk

有关详细信息,请转到Plotting with matplotlib