我希望按钮和其他交互式matplotlib对象出现在我的ipython笔记本中.
这就是我所做的:
>安装了http://datasciencetoolbox.org,它是一个安装了ipython的流浪盒和matplotlib的1.3.1版本.
>我需要将matplotlib升级到最新版本,因为它具有执行内联交互式绘图的功能. What’s new in Matplotlib 1.4.1
我需要运行sudo apt-get install pkg-config和
sudo pip install matplotlib –upgradein为了实现这一目标.
>然后,为了生成下面的漂亮(即无错误)屏幕截图,我进入了.ipython / dst-profile / ipython_notebook_config.py文件,删除了关于IPKernelApp.pylab =’inline’的行,以便能够运行matplotlib.use(‘nbagg’)命令.
>然后我就可以在下面创建截图了.然而,事情看起来仍然很糟糕.那些按钮不是按钮.那是按钮的图像.请告知如何使这些按钮变得生动!
哦……如果这有助于你帮我检查this.
谢谢!
解决方法:
基本上你面临着两个问题
>%pylab inlinecall覆盖了matplotlib.use(‘nbagg’)调用,使用内联后端而不是你真正想要的nbagg后端.如果您使用最新版本的IPython(2.3),您可以直接使用%matplotlib nbagg(或%matplotlib笔记本)来加载nbagg后端而不是%pylabcall.
>一旦你启用了nbagg后端,你需要明确地显示它,即.在脚本末尾添加一个plt.show()调用 – >更新:使用IPython 2.3.1不再需要(感谢@tcaswell提示)
通过这种方式,您可以获得嵌入在IPython笔记本中的交互式matplotlib体验.但是,快速尝试代码并不能达到预期的效果. Button做出反应并执行回调,但打印调用没有显示任何内容.无论如何,要看到它正在运行,请尝试以下简单示例(需要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.