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

met*_*mit 113 python matplotlib jupyter-notebook

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

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

from matplotlib import interactive
interactive(True)
Run Code Online (Sandbox Code Playgroud)

interactive(False)
Run Code Online (Sandbox Code Playgroud)

但那没有做任何事情.我也无法在线找到任何提示.

Adr*_*tin 120

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

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

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

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

我希望这有帮助.

  • 不幸的是,你不能来回切换.如果你在开始使用pylab = inline或pylab = qt后尝试切换,你会得到:这个对matplotlib.use()的调用没有效果,因为已经选择了后端; 必须在*pylab,matplotlib.pyplot或matplotlib.backends第一次导入之前调用matplotlib.use(). (11认同)
  • 我贬低了这个因为它对我不起作用,但仍然没有,但显然这是[问题1927](https://github.com/ipython/ipython/issues/1927)并且应该已经修复了[merge 2179](https://github.com/ipython/ipython/pull/2179).@yarox,如果你编辑你的答案以包含这些信息,我将撤消我的downvote. (3认同)
  • 这是'%pylab qt`.在OS X中不起作用.也许在Ubuntu中它会有所帮助. (2认同)
  • 使用ipython v1.1.0和MPL 1.3.0在OSX上运行正常 (2认同)

vol*_*myr 56

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

#interactive plotting in separate window
%matplotlib qt 
Run Code Online (Sandbox Code Playgroud)

并回到HTML

#normal charts inside notebooks
%matplotlib inline 
Run Code Online (Sandbox Code Playgroud)

%pylab magic导入了许多其他东西,甚至可能导致冲突.它"来自pylab import*".

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

#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook 
Run Code Online (Sandbox Code Playgroud)

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

你也可以查看pivottablejs(pip install pivottablejs)

from pivottablejs import pivot_ui
pivot_ui(df)
Run Code Online (Sandbox Code Playgroud)

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

  • qt magic 命令的“导入错误:无法导入任何 qt 绑定” (4认同)
  • `警告:无法更改为不同的 GUI 工具包:笔记本。使用 qt 代替“%matplotlib notebook”。 (2认同)

tac*_*ell 29

从matplotlib 1.4.0开始,现在有一个用于笔记本的交互式后端

%matplotlib notebook
Run Code Online (Sandbox Code Playgroud)

有几个版本的IPython没有注册别名,后退是:

%matplotlib nbagg
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请更新您的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')    
Run Code Online (Sandbox Code Playgroud)

进入代码单元格(或只是修改现有的python演示笔记本)


sus*_*097 8

您可以使用

%matplotlib qt

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


arn*_*rts 6

您的问题的更好解决方案可能是Charts库。它使您能够使用优秀的Highcharts javascript 库来制作漂亮的交互式绘图。Highcharts 使用 HTMLsvg标签,因此您所有的图表实际上都是矢量图像。

一些特点:

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

免责声明:我是库的开发者


Bil*_*ore 5

我在 20117 年 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...
Run Code Online (Sandbox Code Playgroud)