如何在IPython Notebook中打开交互式matplotlib窗口?


125

我正在使用IPython,--pylab=inline有时想快速切换到交互式可缩放的matplotlib GUI来查看图(在终端Python控制台中绘制图时会弹出的图)。我该怎么办?最好不要离开或重新启动笔记本。

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

from matplotlib import interactive
interactive(True)

interactive(False)

但这什么也没做。我在网上也找不到任何提示。


4
解决您原始问题的另一种可能的方法是启用内联绘图,如我在此处所述,现在可以这样做:stackoverflow.com/a/22949003/145823
yonilevy 2014年

3
%matplotlib notebook 作品
muon

Answers:


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()的调用无效,因为已经选择了后端;必须在首次导入pylab,matplotlib.pyplot或matplotlib.backends 之前调用matplotlib.use()。
Charl Botha

3
我对此表示反对,因为它对我不起作用,现在仍然无效,但是显然这是1927年发行的,应该已经用merge 2179修复了。@yarox,如果您编辑答案以包含此信息,我将撤消我的拒绝投票。
askewchan

2
使用ipython v1.1.0和MPL 1.3.0在OSX上也可以正常工作
K.-Michael Aye

1
现在(2014-08年)在Win7 x64上使用Python 2.7的当前版本对我有效。
nerdfever.com 2014年

65

如果您要做的只是从内联图切换到交互式图,然后再切换回去(以便可以平移/缩放),则最好使用%matplotlib magic。

#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可以处理大量数据,但是您需要学习它的语法,因为它是一个单独的库。

你也可以签出pivottablejs(pip installivottablejs)

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魔术命令
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使用HTMLsvg标记,因此您的所有图表实际上都是矢量图像。

一些功能:

  • 您可以下载.png,.jpg和.svg格式的矢量图,因此永远不会遇到分辨率问题
  • 交互式图表(缩放,滑动,将鼠标悬停在点上,...)
  • 在IPython笔记本中可用
  • 使用异步绘图功能可同时探索数百个数据结构。

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


漂亮的图书馆!我一定会尝试一下:)
metakermit,2015年

谢谢!让我知道您在github上的想法,如果遇到任何问题,请提交一个问题:)
arnoutaertgeerts 2015年

1
虽然这个答案肯定是相关的,但我不一定会称其为“更好的解决方案”。这很可能导致了过去的不满。
volodymyr 2015年

1
不好意思,因为这篇文章并没有告诉我如何实际使用Charts库打开交互式绘图窗口。
罗伯特·霍尼格(RobertHönig),

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

1
当我尝试使用时,%matplotlib我收到一个以结尾的错误ImportError: No module named 'PyQt4'
user3731622

我得到与user3731622完全相同的问题。该怎么办?这是此页面上大多数答案的答案
bernando_vialli

@mkheifetz @ user3731622您可能需要安装该软件包:sudo apt-get install python-pyqt5sudo apt-get install python-pyqt5
ttb


0

您可以使用

%matplotlib qt

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.