一段时间后隐藏在 jupyterlab 中的 svg 图形

svg figures hidden in jupyterlab after some time

我最近发现我可以在我的 jupyterlab 笔记本中默认使用 SVG 制作我所有的 matplotlib 图

import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_formats = ['svg']

但是,如果我刷新页面,数字就会消失,留下

<Figure size 864x576 with 1 Axes>

如果不更改内联后端,则不会出现此效果。刷新后我的阴谋人物也仍然出现。我宁愿不必重新 运行 单元格。查看实际的 ipynb 文件,SVG 就在实际文件中。如何在不重新 运行 单元格的情况下显示此图?

该行为看起来符合 security model of Jupyter

  • Untrusted HTML is always sanitized
  • Untrusted Javascript is never executed
  • HTML and Javascript in Markdown cells are never trusted
  • Outputs generated by the user are trusted
  • Any other HTML or Javascript (in Markdown cells, output generated by others) is never trusted
  • The central question of trust is “Did the current user do this?”

因为 SVG 可以有 <script> 个标签,所以有一个攻击面。因此,您有两种显示 SVG 的选项:

  1. Re-运行 生成 SVG 的单元格(上面最后一点)。
  2. Explicitly trust 笔记本,jupyter trust /path/to/notebook.ipynb.

备注:

  1. Plotly 在单元格的输出中保存 image/png 版本。它在笔记本加载时显示。但是加载的(不是重新运行的)单元格也具有交互性。不确定该豁免如何运作。
  2. 附带说明一下,当前 JupyterLab 的行为因不同形式的 SVG 显示而异(参见 issue#10464),但这不是这里的问题。