在 Sphinx 文档中嵌入绘图图

Posted

技术标签:

【中文标题】在 Sphinx 文档中嵌入绘图图【英文标题】:Embed plotly graph in a Sphinx doc 【发布时间】:2018-02-26 09:41:07 【问题描述】:

我尝试使用 nbsphinx 嵌入一个包含绘图的 Jupyter 笔记本,但这些绘图没有显示在文档中,即使它们在 Jupyter 笔记本上看起来不错。

如何在 Sphinx documentation 中嵌入绘图图?我可以将它们包含为图像,但有更好的方法吗?有互动就好了!

我想做的是复制this page。它具有 Jupyter 笔记本风格的进出块,并显示使用 plotly 制作的交互式绘图。我该怎么做?

GitHub 问题提出here.

【问题讨论】:

这里有同样的问题。存在github.com/plotly/plotlyhtmlexporter。不确定如何从 nbsphinx 使用它。它还会弄乱我笔记本中的其他 HTML 单元格。 @phantomas1234 我已经用我提出的 GitHub 问题的链接更新了问题。试试那里的解决方案,看看它是否适合你。 使用 plotly 你可以输出带有output_type='div'的html。 使用新的FigureWidget 更容易。如果有兴趣,我可以准备一个答案。 【参考方案1】:

图表本身是 jupyter notebook 文件中的 HTML。 您可以在任何文本编辑器中打开 notebook.ipnb 文件,找到图形的 HTML 开始位置,将所有这些 html 复制到 html 文件中并保存,例如 a.html,然后在 RST doc 中插入原始 html。

.. raw:: 
    :file: a.html

【讨论】:

【参考方案2】:

我可以看到两种解决方案,可以在 sphinx 文档中嵌入带有情节图形的笔记本单元格。

    使用 nbconvert 或 nbsphinx 将笔记本转换为 html。请务必使用 notebook 渲染器以包含 plotly javascript 包(也许这就是您的数字未显示的原因):有关 plotly 渲染器的文档,请参阅 https://plot.ly/python/renderers/。然后,您可以使用各种解决方案在您的 sphinx 文档中包含 html(请参阅Include standalone HTML page in sphinx document)。 使用 sphinx-gallery (https://sphinx-gallery.github.io/) 和它的情节刮板。使用 sphinx-gallery,您可以将文档页面编写为 python 脚本,该脚本由 sphinx 的 sphinx-gallery 扩展转换为 rest。要配置刮板,请参阅https://sphinx-gallery.github.io/advanced.html#integrate-custom-scrapers-with-sphinx-gallery。我们还有一个最小的存储库,展示了如何在https://github.com/plotly/plotly-sphinx-gallery 中一起使用 plotly 和 sphinx-gallery。 https://github.com/plotly/plotly-sphinx-gallery

【讨论】:

【参考方案3】:

在 Python 中,您可以使用 plotly.tools.get_embed 函数生成 HTML 代码以嵌入 Plotly 图。

import plotly.tools as tls

tls.get_embed('https://plot.ly/~chris/1638')

【讨论】:

【参考方案4】:

您可以将Jupyter Sphinx Extension 与 Plotly 的FigureWidget 结合使用:

... jupyter-execute::

   import plotly.graph_objects as go

   trace = go.Scatter(
       x=[0, 1, 2, 3, 4],
       y=[0, 1, 4, 9, 16],
   )
   layout = go.Layout(title='Growth')
   figure = go.Figure(data=[trace], layout=layout)

   go.FigureWidget(figure)

【讨论】:

这似乎不适用于我的 pdflatex...文档前面有一些 jupyter-execute 设置吗? @MattRuge 我没有尝试过 LaTeX 输出,所以我不知道。 :-) 我通过让 jupyter-execute 转储 IMG 字节取得了一些进展,在乳胶 pdf 中显示为 png ``` .. jupyter-execute:: :hide-code: # Creates figure ## 为简洁而编辑 img_bytes = fig.to_image(format="png") Image(img_bytes) `` 我相信 plotly 默认不会生成静态图,除非您使用plotly.com/python/static-image-export 明确配置它。我目前正在寻找在 Github 存储库中具有交互式绘图图的 README.rst 文件,到目前为止,我已经设法使用静态图像。【参考方案5】:

当 Sphinx 生成文档时,它没有描述 plotly 库,所以将以下行添加到您的 HTML 页面中:

<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>

然后页面将再次活跃。

【讨论】:

以上是关于在 Sphinx 文档中嵌入绘图图的主要内容,如果未能解决你的问题,请参考以下文章

Python绘图matplotlib

Python图表绘制:matplotlib绘图库入门

在 tkinter 画布中嵌入来自 Arduino 的 Matplotlib 实时绘图数据

从 PDF 中提取绘图

VUE开发--二维绘图(四十)

如何调整包含绘图的 div 以绘制尺寸,使其不与文档重叠