Linux上的ipython笔记本运行matplotlib与nbagg交互的VM

时间:2014-11-13 05:24:06

标签: python linux matplotlib vagrant ipython-notebook

我想在我的ipython笔记本中显示按钮和其他交互式matplotlib对象。 screenshot

以下是我所做的:

  1. 已安装http://datasciencetoolbox.org,它是一个安装了ipython且matplotlib版本为1.3.1的流浪盒。

  2. 我需要将matplotlib升级到最新版本,因为它具有执行内联交互式绘图的功能。 What's new in Matplotlib 1.4.1
    我需要运行sudo apt-get install pkg-config
    sudo pip install matplotlib --upgrade为了实现这一目标。

  3. 然后,为了生成下面的漂亮(即无错误)屏幕截图,我进入了.ipython/dst-profile/ipython_notebook_config.py文件并清除了关于IPKernelApp.pylab='inline'的行,以便能够运行{ {1}}命令。

  4. 然后我就可以在下面创建截图了。然而,事情看起来仍然很糟糕。那些按钮不是按钮。那是按钮的图像。请告知如何使这些按钮变得生动!

  5. 哦......如果这有助于我帮助我,请检查this

    谢谢!

    screenshot

1 个答案:

答案 0 :(得分:8)

基本上你面临两个问题

  • %pylab inline调用会覆盖matplotlib.use('nbagg')调用,使用内联后端而不是 nbagg 后端,而您实际上是缺憾。如果您使用最新版本的IPython(2.3),则可以直接使用%matplotlib nbagg(或%matplotlib notebook)来加载nbagg后端,而不是%pylab来电。

  • 启用 nbagg 后端后,您需要明确显示它,即。在脚本末尾添加plt.show()来电 - > 更新:使用IPython 2.3.1不再需要(感谢@tcaswell提示)

通过这种方式,您可以获得嵌入在IPython笔记本中的交互式matplotlib体验。但是,快速尝试代码不会产生预期的结果。 Button会做出反应并执行回调,但print调用并未显示任何内容。无论如何,要看到它正在运行,请尝试以下简单示例(需要IPython 2.3):

%matplotlib nbagg
from matplotlib.widgets import Button
import matplotlib.pyplot as plt
def callback(event):
    plt.text(event.xdata, event.ydata, 'clicked')

f,a = plt.subplots(1)
b1 = Button(a,'Button1')
b1.on_clicked(callback)
plt.show()

顺便说一下。强烈建议使用%matplotlib而不是%pylab,因为后面会产生一些副作用,请参阅here