【问题标题】:Jupyter notebook matplotlib figures missing in exported pdf导出的 pdf 中缺少 Jupyter 笔记本 matplotlib 数字
【发布时间】:2016-05-20 05:43:24
【问题描述】:

在 jupyter notebook 中生成 pdf 时,一切正常,但我想将内联数字保留在 pdf 以及 notebook 中。

这是我的代码:

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('png', 'pdf')

save_figures = True

x = np.arange(0, 20, 0.1)
y = np.sin(x)
plt.figure()
plt.plot(x, y)
if save_figures:
    plt.savefig('test.png')
plt.show()

数字显示为内联,但在 pdf 中打印的是:

<IPython.core.display.Javascript object>

<IPython.core.display.HTML object>

如果我从 Web 导出或使用 nbconvert 从命令行导出为 pdf,则会出现相同的内容。

是否需要调用任何其他命令才能使其正常工作?

【问题讨论】:

  • 我遇到了同样的问题。我想将它用于 3d 绘图以调整视角等,所以%matplotlib inline 不适合我。有没有办法解决这个问题?

标签: matplotlib ipython-notebook jupyter jupyter-notebook nbconvert


【解决方案1】:

如果您将%matplotlib notebook 更改为%matplotlib inline,那么使用 jupyter 的 nbconvert 导出 PDF 对我来说效果很好。 %matplotlib notebook 魔术以交互方式渲染绘图,我怀疑 LaTeX 无法正确识别,它在 PDF 转换期间使用。

或者,如果您出于某种原因必须使用 %matplotlib notebook,使用 jupyter 的 nbconvert (jupyter nbconvert --to='html' Test.ipynb) 导出到 HTML 似乎可以保留情节。然后,我可以从网络浏览器将此 HTML 文件打印为 PDF,并且该图出现在最终的 PDF 中。

【讨论】:

  • 完美!是的,似乎没有渲染交互式绘图,但使用 inline 可以正常工作。谢谢!
  • 你知道是否有办法从命令行覆盖%matplotlib notebook,以便导出静态数字?
  • %matplotlib inline 为我做了。
【解决方案2】:

交互问题的粗略解决方案: 在交互功能中将图形保存到文件中

fig.savefig("pieCharts.png")

在下一个单元格中显示一个文件:

from IPython.display import Image
Image("pieCharts.png")

在 PDF 中,只有第 2 行的输出将与交互功能中更改的图像一起显示。

【讨论】:

  • 这适用于我的 PDF 导出,还解决了笔记本文件大小和图像缓存的问题。
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 2017-05-22
  • 2017-02-03
  • 2017-05-15
  • 2021-03-22
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多