我有一个 iPython 笔记本,其中包含一个内联图(即它包含命令plot(x,y))。当我发出命令ipython nbconvert --to latex --post PDF --SphinxTransformer.author='Myself' MyNotebook.ipynb生成的 .PDF 文件包含该图,但它已导出为 .PNG,所以它没有看起来非常好(像素化)。如何告诉nbconvert将所有绘图/图形导出为 .EPS?
谢谢
我有一个 iPython 笔记本,其中包含一个内联图(即它包含命令plot(x,y))。当我发出命令ipython nbconvert --to latex --post PDF --SphinxTransformer.author='Myself' MyNotebook.ipynb生成的 .PDF 文件包含该图,但它已导出为 .PNG,所以它没有看起来非常好(像素化)。如何告诉nbconvert将所有绘图/图形导出为 .EPS?
谢谢
首先,notebook 不负责创建绘图,但matplotlib可以将您的绘图渲染为 eps、pdf、svg 等,以高质量包含在出版物中。
我同意默认的内联绘图格式,即png
由于多种原因不适用于出版物。正如您在答案中发布的 github 问题中给出的那样,内联后端可以配置为使用svg
而不是png
通过调用
%config InlineBackend.figure_format = 'svg'
在代码单元中。有了这个,新创建的图将是矢量的,(正如马特所说,已经渲染的 png 将不会被转换!)。这些 svg 嵌入到笔记本中(现代浏览器可以呈现 svg),随后通过 nbconvert 转换为 pdf。这些 pdf 满足出版准备图的要求。但是,请注意 svg 可能非常大(与 png 相比)并且可能会显着减慢笔记本的处理速度。
您最初的问题是关于eps
图形的。如上所述,matplotlib 可以渲染 eps,因此,您始终可以执行诸如savefig('plot1.eps')
创建所需图形之类的操作。这实际上是我创建出版物图形的方式(笔记本中的 png,纸中的 eps)。假设我们会让 IPython 生成 eps 文件(嵌入但不能在浏览器中呈现)。nbconverttex
生成的文件旨在与pdflatex一起使用。如果输入 eps 文件,pdflatex会将这些文件转换为 pdf 以包含在最终文档中。所以基本上它与nbconvert目前对 svgs 的作用相同。因此,没有任何好处。
最后,我想指出的是,即使 nbconvert 生成的 tex 文件看起来很棒(尤其是使用 master 分支创建的那些),恕我直言,没有任何方法可以使用这些文件(例如添加标题、缩放图像、. ..)。因此,您始终可以将这一步的 eps 文件包含到您的论文中。
NBconvert 不会运行您的代码。因此,如果您没有使用 SVG matplotlib 后端进行绘图,这是不可能的。如果您这样做了,那么您需要编写一个执行 svg-> eps 的 nbconvert 预处理器并扩展相关模板以了解如何嵌入 EPS。
显然这是 nbconvert 中缺少的功能。目前没有办法在最终 PDF 中获得出版质量图:https ://github.com/ipython/ipython/issues/3603