iPython nbconvert和latex:使用.eps而不是.png来绘制图表

时间:2013-10-29 13:40:59

标签: ipython

我有一个包含内联图的iPython笔记本(即它包含命令 plot(x,y))。当我发出命令 ipython nbconvert --to latex --post PDF --SphinxTransformer.author ='Myself'MyNotebook.ipynb 时,生成的.PDF文件包含该图,但它已导出到。 PNG,所以看起来不太好(像素化)。如何判断 nbconvert 将所有图表/数字导出到.E​​PS?

谢谢

3 个答案:

答案 0 :(得分:15)

首先,笔记本不负责创建绘图,但是 matplotlib ,这样可以将您的绘图以高质量渲染为eps,pdf,svg等,以包含在出版物中。< / p>

我同意由于多种原因,默认的内联图格式,即png不适合用于出版物。正如您在答案中发布的github问题中所述,可以将内联后端配置为使用svg而不是png来调用

%config InlineBackend.figure_format = 'svg'

在代码单元格中。 有了这个,新创建的图将是矢量的(正如Matt所说,已经渲染的png将不会被转换!)。这些svgs嵌入在笔记本中(svgs可以由现代浏览器呈现),然后由nbconvert转换为pdfs。这些pdf满足发布就绪图的要求。但是,请注意svgs可能非常大(与png相比)并且可能会显着降低笔记本处理速度。

您最初的问题是关于eps图片。如上所述,matplotlib可以渲染eps,因此,您可以始终执行savefig('plot1.eps')之类的操作来创建所需的数字。这实际上是我创建出版物数字的方式(png in notebook,paper in paper)。 让我们假设我们会让IPython生成eps文件(嵌入但不能在浏览器中渲染)。 nbconvert 生成的tex文件旨在与 pdflatex 一起使用。如果使用eps文件 pdflatex 将这些转换为pdf以包含在最终文档中。所以基本上它与 nbconvert 目前与svgs一样。因此,没有任何好处。

最后,我想指出,即使nbconvert生成的tex文件看起来很棒(特别是那些使用master分支创建的文件),恕我直言也没有办法在不触摸的情况下使用这些文件(例如添加字幕,缩放图片, ...)。因此,您始终可以将此步骤中的eps文件包含在论文中。

答案 1 :(得分:0)

NBconvert 运行您的代码。因此,如果您没有使用SVG matplotlib后端绘制,则无法实现。 如果你这样做,那么你需要编写一个svg-&gt;的nbconvert预处理器。 eps并扩展相关模板以了解如何嵌入EPS。

答案 2 :(得分:0)

显然这是nbconvert中缺少的功能。目前没有办法在最终PDF中获得发布质量图:https://github.com/ipython/ipython/issues/3603

https://github.com/ipython/ipython/issues/3693