Jupyter 导出高清 Matplotlib 图片

Jupyter 导出高清 Matplotlib 图片

Jupyter notebook 中如果使用 %matplotlib inline 来显示 Matplotlib 输出的话,效果很差很模糊。

如果用 %matplotlib notebook 的方式的话,Matplotlib 输出会以 Widget 的形式呈现,效果会好很多。

不过问题是当我们导出到 PDF 或 html 时,这些 Widget 竟然没有了,查阅了大量 Issue 后发现要保存 Widget state 或者关闭所有 widget 才行,总之一顿操作后,依然没成功…

最后终于在一个博客[1] 中找到了一个靠谱的答案:

import matplotlib as mpl
%matplotlib inline

mpl.rcParams['figure.dpi'] = 300
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('png', 'pdf')

原理很简单,就是告诉 Jupyter 同时保存 png 和 pdf 格式的 Matplotlib 输出。

这样在 Jupyter notebook 中就用 png 格式的内容显示,然后导出到 PDF (by LaTeX) 的时候就直接用矢量图的 pdf 图。

同时,inline 模式下,Matplotlib 输出的 png 图像实在时模糊,所以我们需要简单修改下 dpi 为 300,不过这样保存到文件的时候会占用更加大的空间(都 2020 年了,也不用在乎这点空间吧)。

最后,Jupyter notebook 通过 LaTeX 导出到 PDF 需要 Pandoc 和 TeX (推荐 MikTeX) 依赖。

不过在带有中文的 Jupyter notebook 导出成 PDF 时,中文字符都会出问题,这是因为 Jupyter notebook 的 LaTeX 模板默认不支持中文。

所以我们只需要简单的修改下模板文件 ../nbconvert/templates/latex/base.tex.j2 (不同 Jupyter 版本可能在不同文件哦),加入 ctex 包 (\usepackage{ctex}) 就好啦。

啊,就这样水了一篇博客~

References


上一篇
在英伟达 30 系显卡上使用 Tensorflow 1.15 在英伟达 30 系显卡上使用 Tensorflow 1.15
TLDRRequirements: CUDA 11.x (installed in the Anaconda environment) Python 3.8 or Python 3.6 (other versions may not wo
2021-11-18
下一篇
Chromebook 折腾记之二 Chromebook 折腾记之二
引子前面提到过在旧款 chromebook 上折腾 chromefy 的故事, 最近我这里有台新的 Windows 笔记本 (HP 笔记本, 而且竟然带一个小黑点(山寨 ThinkPad 小红点)). 鉴于之前的 chromebook 没有
2019-12-13
目录