在linux上运行matplotlib的ipython笔记本与nbagg交互

我想从我的ipython笔记本中出现button和其他交互式matplotlib对象。 截图

这是我所做的:

  1. 安装了http://datasciencetoolbox.org ,它是一个安装了ipython和matplotlib版本1.3.1的stream浪盒子。

  2. 我需要将matplotlib升级到最新版本,因为它具有内联交互式绘图function。 Matplotlib 1.4.1有什么新function
    我需要运行sudo apt-get install pkg-config
    sudo pip install matplotlib --upgrade升级为了得到这个。

  3. 然后,为了生成下面的漂亮的(即没有错误的)截图,我进入了.ipython/dst-profile/ipython_notebook_config.py文件,并删除了关于IPKernelApp.pylab='inline'行,以便能够运行matplotlib.use('nbagg')命令。

  4. 然后我可以创build下面的截图。 然而,事情仍然看起来很差。 这些button不是button。 这是一个button的图像。 请告知如何使这些button来生活!

噢…检查一下 ,如果这有助于你帮助我。

谢谢!

截图

基本上你面临着两个问题

  • %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体验。 但是,快速尝试一下你的代码不会得到期望的结果。 按钮作出反应,并执行回调,但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,因为稍后会导致一些副作用,请参阅此处 。