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

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

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

from matplotlib import interactive
interactive(True)

还有

interactive(False)

但是没有任何效果,我在网上也找不到任何线索。

274915 次浏览

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

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


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

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

希望这个能帮上忙。

如果您想要做的只是从内联绘图切换到交互式和返回(以便您可以平移/缩放) ,那么最好使用% matplotlib magic。

#interactive plotting in separate window
%matplotlib qt

回到超文本标记语言

#normal charts inside notebooks
%matplotlib inline

Pylab 魔法导入一大堆其他东西,甚至可能导致冲突。它确实“来自 pylab 导入 *”。

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

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

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

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

from pivottablejs import pivot_ui
pivot_ui(df)

不管交互式数据探索有多酷,它完全可能影响重现性。这种情况在我身上发生过,所以我尝试只在非常早期的阶段使用它,一旦我对数据有了感觉,就切换到纯内联 matplotlib/seborn。

解决您的问题的一个更好的解决方案可能是 图表库。它使您能够使用优秀的 排行榜 javascript 库,使美丽的和交互式的情节。高清图表使用 HTML svg标记,因此所有的图表实际上都是矢量图像。

一些特点:

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

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

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

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

%matplotlib tk

更多信息请访问 用 matplotlib 绘图

我在2017年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...

你可以用

%matplotlib qt

如果您得到错误 ImportError: Failed to import any qt binding,然后安装 PyQt5为: pip install PyQt5,它为我工作。

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

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


pip install PyQt5

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

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

%matplotlib nbagg 

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

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