尽管使用了--pylab内联选项,但Matplotlib输出并未在IPython Notebook中显示内联

时间:2013-10-30 06:23:26

标签: python matplotlib ipython-notebook

我正在启动一个IPython Notebook并且matplotlib输出不是内联的,而是像这样:

<matplotlib.figure.Figure at 0x113035310>

以下是代码:

from pylab import *
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plot(X,C)
plot(X,S)

show()

笔记本是用--pylab = inline启动的,当我检查它似乎是正确的时候:

enter image description here

这是IPython 1.1.0。当我使用%pylab内联尝试时,我得到了类似的结果:

enter image description here

情节没有以内联方式显示的原因还有什么?

2 个答案:

答案 0 :(得分:7)

事实证明,内联显示(甚至可能首先生成图像)失败,因为matplotlib无法加载Vera.ttf字体文件。它试图从错误的文件系统位置加载该文件,该位置是在OS X沙箱中运行的进程无法访问的位置。

10/29/13 11:59:02.000 PM kernel[0]: Sandbox: python(24173) deny file-read-data $HOME/Library/Developer/Xcode/DerivedData/IPython_Notebook-adcshxaaibpeztbztvthgauvufsx/Build/Products/Debug/IPython Notebook.app/Contents/Resources/virtualenv/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf

该过程从此位置开始运行:

$HOME/Library/Developer/Xcode/DerivedData/IPython_Notebook-adcshxaaibpeztbztvthgauvufsx/Build/Products/Release/IPython Notebook.app

(“调试”与“发布”)

在我删除Debug位置并重新启动应用程序后,沙盒消息消失了,内联绘图开始工作。当我将应用程序包复制到另一个位置并从那里启动时,它再次失败。沙箱违规报告中的堆栈跟踪表明它是试图从旧位置加载字体的FreeType:

0   libsystem_kernel.dylib          0x00007fff9054f5da __open + 10
1   libfreetype.dylib               0x000000010b789214 FT_Stream_New + 260
2   libfreetype.dylib               0x000000010b789e00 FT_Open_Face + 144
3   libfreetype.dylib               0x000000010b789d5e FT_New_Face + 46
4   ft2font.so                      0x000000010b7259f0 FT2Font::FT2Font(Py::PythonClassInstance*, Py::Tuple&, Py::Dict&) + 698
5   ft2font.so                      0x000000010b735fa6 Py::PythonClass<FT2Font>::extension_object_init(_object*, _object*, _object*) + 116

一些调查显示matplotlib维护一个fontList.cache文件,该文件最终位于应用程序的沙盒容器目录中。移动应用程序包后,该缓存文件中的路径无效/无法访问。我added code到我的应用程序,在启动时删除此缓存文件。

所以不是一个真正的IPython问题,但我想我会发布这个以防万一它也会帮助那些将笔记本嵌入到沙盒OS X应用程序中的人。

答案 1 :(得分:-4)

尝试%matplotlib内联,我认为这只是一个默认问题。