2013-01-10 107 views
87

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

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

from matplotlib import interactive 
interactive(True) 

interactive(False) 

试验,但没有做任何事情。我也找不到任何提示。

+4

另一种可能的解决方案,你原来的问题是让你的在线地块,这是现在可能缩小,因为我在这里已经描述:http://stackoverflow.com/a/22949003/145823 – yonilevy

+1

'%matplotlib笔记本'作品 – 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

我低估了这一点,因为它不适合我,但仍然没有,但显然这是[问题1927](https://github.com/ipython/ipython/issues/1927),它应该已经修复与[合并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魔法进口了一堆其他的事情,甚至可能导致冲突。它确实“从pylab导入*”。

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

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

如果你想在你的图表更多的互动,你可以看看mpld3背景虚化。如果你没有吨的数据点(例如< 5k +),并且你想使用普通的matplotlib语法,但是与%matplotlib笔记本相比有更多的交互性,mpld3非常棒。 Bokeh可以处理大量数据,但是由于它是一个单独的库,因此您需要了解它的语法。

你也可以检查出pivottablejs(PIP安装pivottablejs)

from pivottablejs import pivot_ui 
pivot_ui(df) 

但是冷静交互式数据探索,它可以重现完全混乱。它发生在我身上,所以我只在最初的阶段尝试使用它,一旦我获得了数据的感觉,就切换到纯联机matplotlib/seaborn。

3

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

一些特点:

  • 向量图,你可以以.png,jpg和.SVG格式下载,所以你永远不会遇到解析问题
  • 互动式图表(放大缩小,幻灯片,点鼠标悬停在,...)
  • 可在IPython笔记本中使用
  • 使用异步绘图功能可以同时探索数百个数据结构。

免责声明:我的图书馆

+0

一个不错的图书馆!我一定会尝试一下:) – metakermit

+0

谢谢!让我知道你对github的看法,如果你遇到任何问题,请提交问题:) – arnoutaertgeerts

+0

尽管这个答案显然是相关的,但我不一定称之为“更好的解决方案”。这很可能是过去造成倒计时的原因。 – volodymyr

13

与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')  

成码单元(或者只是修改现有的蟒蛇演示笔记本)

1

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

%matplotlib tk 

对于mo re info去Plotting with matplotlib

2

我在Anaconda的“jupyter QTConsole”中使用ipython,网址为www.continuum.io/downloads on 5/28/20117。

下面是一个使用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'结尾的错误:没有名为'PyQt4'的模块 – user3731622

+0

我得到了与user3731622完全相同的问题。可以做什么?这是本页面的大部分答案 – mkheifetz

相关问题