149

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

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

from matplotlib import interactive
interactive(True)

interactive(False)

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

4

9 回答 9

179

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

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

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

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

我希望这有帮助。

于 2013-01-11T11:35:29.277 回答
80

如果您只想从内联图切换到交互式图并返回(以便您可以平移/缩放),最好使用 %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 很棒,如果你没有大量的数据点(例如 <5k+)并且你想使用普通的 matplotlib 语法,但与 %matplotlib notebook 相比,它具有更多的交互性。Bokeh 可以处理大量数据,但您需要了解它的语法,因为它是一个单独的库。

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

from pivottablejs import pivot_ui
pivot_ui(df)

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

于 2014-12-08T12:24:27.637 回答
32

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

于 2015-10-10T15:31:57.283 回答
8

您可以使用

%matplotlib qt

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

于 2020-06-27T13:09:19.420 回答
6

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

一些特点:

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

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

于 2015-05-22T13:00:38.197 回答
5

我在 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...
于 2017-05-28T15:43:43.397 回答
4

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

%matplotlib tk

有关更多信息,请转到使用 matplotlib 绘图

于 2017-05-19T18:18:29.947 回答
0

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

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

pip install PyQt5
于 2021-11-12T17:04:07.417 回答
0

matplotlib.use('nbagg')不适用于新版本的 matplotlib。

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

%matplotlib nbagg 

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

import matplotlib
import matplotlib.pylab as plt
%matplotlib inline
%matplotlib nbagg
于 2021-11-29T11:11:01.637 回答