【问题标题】:Matplotlib output not showing up inline in IPython Notebook despite --pylab inline option尽管 --pylab 内联选项,Matplotlib 输出未在 IPython Notebook 中内联显示
【发布时间】:2013-11-09 14:41:46
【问题描述】:

我正在启动一个 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 启动,当我检查时似乎是正确的:

这适用于 IPython 1.1.0。当我尝试使用 %pylab inline 时,我得到了类似的结果:

绘图未内联显示的还有什么原因?

【问题讨论】:

  • 您使用的是哪个 IPython 版本?您可以尝试使用%pylab inline 而不是--pylab=inlinefrom pylab import * 调用吗?
  • 我编辑了问题以添加有关这两点的信息。
  • 您使用的是哪个浏览器以及该浏览器的哪个版本?并非所有浏览器都受支持。另外,我认为--pylab%pylab 正在被弃用,并分别被--matplotlib%matplotlib 取代。
  • 这个问题其实经常遇到,见stackoverflow.com/q/19410042/2870069。您可以尝试使用 import matplotlib.pyplot as plt;plt.plot([1,2]),display(plt.gcf()) 代替任何 pylab 调用吗?
  • 这适用于 OS X 10.9 上的 Safari。关于 %pylab 被弃用的有趣说明。我尝试了 %matplotlib/--matplotlib,结果相同。我还尝试了 Jakob 的 sn-p,它也输出 而不是内联图。很明显这里出了点问题。

标签: python matplotlib ipython-notebook


【解决方案1】:

事实证明,内联显示(甚至可能首先生成图像)失败了,因为 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。
【解决方案2】:

试试%matplotlib inline,我觉得只是默认的问题。

【讨论】:

  • 不,它与 IPython 完全无关,matplotlib 使用的字体缓存存在问题,该问题对 OS X 沙盒不友好。看我的回答。但是感谢您的回答:)
  • 我也用过mac,看来它有助于我生成情节。可能是因为我在我的电脑上安装了一堆模板..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2017-05-05
相关资源
最近更新 更多