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

How can I open the interactive matplotlib window in IPython notebook?

我将i python与--pylab=inline结合使用,有时希望快速切换到交互式可缩放matplotlib GUI以查看绘图(在终端python控制台中绘制某些内容时弹出)。我怎么能做到?最好不要离开或重新启动我的笔记本。

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

1
2
from matplotlib import interactive
interactive(True)

1
interactive(False)

但那没什么作用。我在网上也找不到任何提示。


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

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

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

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

我希望这有帮助。


如果您所要做的就是从内联图切换到交互式和后退(以便您可以平移/缩放),最好使用%Matplotlib Magic。

1
2
#interactive plotting in separate window
%matplotlib qt

回到HTML

1
2
#normal charts inside notebooks
%matplotlib inline

%pylab magic导入了许多其他东西,甚至可能导致冲突。它执行"从Pylab导入*"。

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

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

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

还可以查看PivotTableJS(PIP安装PivotTableJS)

1
2
from pivottablejs import pivot_ui
pivot_ui(df)

不管交互式数据探索多么酷,它都会完全破坏再现性。它发生在我身上,所以我试着只在很早的时候使用它,一旦我对数据有了感觉,就切换到纯内联matplotlib/seaborn。


从Matplotlib1.4.0开始,现在笔记本中有一个交互式后端系统。

1
%matplotlib notebook

有几个版本的ipython没有注册该别名,返回如下:

1
%matplotlib nbagg

如果这不起作用,更新你的ipython。

要玩这个,请转到tmpnb.org。

和粘贴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%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演示笔记本)


我在"jupyter qtconole"中使用ipython,来自Anaconda,www.continuum.io/downloads,5/28/20117。

下面是一个使用IPythonMagic在单独的窗口和内联绘图模式之间来回切换的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
>>> 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...


更好的解决方案可能是图表库。它使您能够使用优秀的海图JavaScript库来制作漂亮的交互式绘图。HighCharts使用html svg标记,因此所有图表实际上都是矢量图像。

一些功能:

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

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


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

1
%matplotlib tk

有关更多信息,请使用matplotlib进行绘图