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

Posted

技术标签:

【中文标题】如何在 IPython 笔记本中打开交互式 matplotlib 窗口?【英文标题】:How can I open the interactive matplotlib window in IPython notebook? 【发布时间】:2012-12-25 01:48:33 【问题描述】:

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

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

from matplotlib import interactive
interactive(True)

interactive(False)

但这并没有做任何事情。我在网上也找不到任何提示。

【问题讨论】:

原始问题的另一种可能解决方案是启用放大内联图,正如我在这里描述的那样,这现在是可能的:***.com/a/22949003/145823 %matplotlib notebook 工作 【参考方案1】:

根据documentation,你应该可以像这样来回切换:

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

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

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

我希望这会有所帮助。

【讨论】:

它是%pylab qt。不适用于 OS X。也许在 Ubuntu 中会有所帮助。 很遗憾,您不能来回切换。如果您在使用 pylab=inline 或 pylab=qt 开始后尝试切换,您会得到: 对 matplotlib.use() 的调用无效,因为已经选择了后端; matplotlib.use() 必须在 pylab、matplotlib.pyplot 或matplotlib.backends 首次导入之前调用。 我对此投了反对票,因为它对我不起作用,现在仍然不起作用,但显然这是issue 1927,它应该用merge 2179 修复。 @yarox,如果您编辑答案以包含此信息,我将撤消我的反对意见。 在 OSX 上也可以正常工作,使用 ipython v1.1.0 和 MPL 1.3.0 在 Win7 x64 上使用当前版本的 Python 2.7 现在为我工作 (2014-08)。【参考方案2】:

如果您只想从内联绘图切换到交互式绘图并返回(以便您可以平移/缩放),最好使用 %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 

如果您想在图表中增加交互性,可以查看 mpld3bokeh。 mpld3 很棒,如果你没有大量的数据点(例如

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

from pivottablejs import pivot_ui
pivot_ui(df)

无论交互式数据探索多么酷,它都可能完全破坏可重复性。它发生在我身上,所以我尝试仅在早期阶段使用它,并在对数据有感觉后切换到纯内联 matplotlib/seaborn。

【讨论】:

Warning: Cannot change to a different GUI toolkit: notebook. Using qt instead.%matplotlib notebook ImportError: Failed to import any qt binding 用于 qt 魔法命令 @mLstudent33 收到相同的警告消息,重新启动内核并运行 %matplotlib notebook 再次为我工作(使用 IPython 7.19.0)。【参考方案3】:

Charts 库可能会更好地解决您的问题。它使您能够使用出色的Highcharts javascript 库来制作精美的交互式绘图。 Highcharts 使用 HTML svg 标签,因此您的所有图表实际上都是矢量图像。

一些功能:

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

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

【讨论】:

一个不错的库!我一定会尝试一下:) 谢谢!如果您遇到任何问题,请告诉我您在 github 上的想法并提交问题 :) 虽然这个答案肯定是相关的,但我不一定称其为“更好的解决方案”。这很可能是过去导致投票失败的原因。 投反对票,因为这篇文章没有告诉我如何实际使用图表库来打开交互式绘图窗口。【参考方案4】:

从 matplotlib 1.4.0 开始,现在有一个交互式后端可在 notebook 中使用

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

【讨论】:

【参考方案5】:

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

%matplotlib tk

欲了解更多信息,请转到Plotting with matplotlib

【讨论】:

【参考方案6】:

我在 20117 年 5 月 28 日在 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...

【讨论】:

当我尝试使用%matplotlib 时,我收到一个以ImportError: No module named 'PyQt4' 结尾的错误 我遇到了与 user3731622 完全相同的问题。可以做什么?这是此页面上的大部分答案 @mkheifetz @user3731622 你可能需要安装包:sudo apt-get install python-pyqt5sudo apt-get install python-pyqt5【参考方案7】:

你可以使用

%matplotlib qt

如果您收到错误 ImportError: Failed to import any qt binding,则将 PyQt5 安装为:pip install PyQt5,它适用于我。

【讨论】:

当我在其他后端收到[IPKernelApp] WARNING | No such comm: 9b3ed8f3535aed9 错误时非常有帮助。【参考方案8】:

我找到了解决方案。我卸载了 pyqt5,它是通过 apt 安装的。然后,我通过 pip 再次安装了它。这解决了导入错误。

sudo apt-get remove --auto-remove python-pyqt5

pip install PyQt5

【讨论】:

【参考方案9】:

matplotlib.use('nbagg') 在新版本的 matplotlib 中不起作用。

相反,我们使用魔术函数作为

%matplotlib nbagg 

它适用于新版本的 matplot lib (>3.0)。

import matplotlib
import matplotlib.pylab as plt
%matplotlib inline
%matplotlib nbagg

【讨论】:

以上是关于如何在 IPython 笔记本中打开交互式 matplotlib 窗口?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ipython笔记本中嵌入一个网站

IPython Notebook 会话中的多个目录和/或子目录?

双击打开一个 ipython 笔记本

如何使用现有的 Eclipse MAT 索引进行交互式分析

如何将文本文件 (.py) 加载/编辑/运行/保存到 IPython 笔记本单元格中?

如何将我的整个输出从iPython笔记本保存为.txt文件?