【问题标题】:ipython notebook on linux VM running matplotlib interactive with nbagg运行 matplotlib 与 nbagg 交互的 Linux VM 上的 ipython 笔记本
【发布时间】:2015-01-10 04:27:27
【问题描述】:

我希望按钮和其他交互式 matplotlib 对象出现在我的 ipython 笔记本中。

这是我所做的:

  1. 安装了http://datasciencetoolbox.org,它是一个安装了ipython和matplotlib 1.3.1版本的vagrant box。

  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' 的行,以便能够运行matplotlib.use('nbagg') 命令。

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

哦...如果这对您有帮助,请查看 this

谢谢!

【问题讨论】:

  • 另外,如果您只针对交互式绘图的笔记本,您可能会使用@interact 做得更好,这是一些黑魔法,可以让您成为一个可以进行交互的 javascript 小部件。
  • @tcaswell,我将如何使用@interact?
  • 查文档,没实际用过,只看过demo
  • 也许我现在不需要。不过我会记住的。谢谢。而且升级很棒。

标签: python linux matplotlib vagrant ipython-notebook


【解决方案1】:

基本上你面临两个问题

  • %pylab inlinecall 覆盖 matplotlib.use('nbagg')call,以使用 inline 后端而不是您真正想要的 nbagg 后端。如果您使用最新版本的 IPython (2.3),您可以直接使用 %matplotlib nbagg(或 %matplotlib notebook)来加载 nbagg 后端,而不是您的 %pylabcall。

  • 启用 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

【讨论】:

  • 调用 show 的明确需要应该通过升级 mpl/ipython 的某种组合来解决,但我不确定多远(参见 github.com/ipython/ipython/pull/6587 )。 +1 关于不使用 pylab,我们不能实际上从源代码中删除它,但正在努力从文档中删除它(mpl + IPython)
  • 自从这篇原始帖子:dropbox.com/s/co17ndyts0v8a4q/… 以来,我已经升级了 ipython,然后我编辑了我的笔记本配置文件。 dropbox.com/s/ox1i4k5vl355e06/… 最后,我启动了一个新笔记本,并在没有第一行和最后一行的情况下运行了您的代码(所以没有plt.show()):dropbox.com/s/wyy0wosbkupnbtg/…
  • 这样就解决了 tcaswell 的 plt.show 问题,它解决了我花了 5 个多小时修补的问题。现在我终于可以使用带有交互式绘图的 ipython notebook 了!耶。谢谢@Jakob。
猜你喜欢
  • 2020-08-24
  • 2013-07-28
  • 2012-12-25
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多