使用离线情节图将jupyter笔记本导出为pdf;缺少图表

时间:2017-08-18 17:20:46

标签: python pdf jupyter-notebook plotly

我正在尝试创建我的课程计划的pdf导出,并且我使用plotly offline for the graphs。在下面的MWE中,绘图将显示在Jupyter Notebook中,但在导出为pdf时不会显示。我使用File-->Download as-->PDF via Latex (.pdf)导出。

我想制作一个pdf而不是使用html。我理解将html导出转换为pdf可能需要额外的一步,但我只是想知道是否有更直接的路由(代码修改?),这将允许我直接通过File-->Download as-->PDF via Latex (.pdf)

from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
init_notebook_mode(connected=True)
import plotly.graph_objs as go

data = [go.Scatter(
    x=[1, 2, 3],
    y=[3, 2, 1])
]
iplot(data)

4 个答案:

答案 0 :(得分:1)

我认为因为情节图是svg对象并且是由javascript生成的,所以我没有导出到我的jupyter笔记本中工作的PDF,所以我无法检查并确认我的答案。

Plotly offline没有显示为图像,你可以在线使用plot来做到这一点,它可以自由生成图形,

您需要创建一个在线帐户,还需要从plotly网站粘贴用户名和API密钥(API密钥可以在设置中找到)。

  

注意:如果这些地块是公共或私人共享的,请以情节方式进行检查,我不负责您的地块公开。

无论如何,这将为您提供图表的图像输出,您可以将其导出为PDF

<强>代码:

import plotly
import plotly.graph_objs as go

plotly.plotly.sign_in('<<username goes here>>', '<<api key goes here>>')
trace = go.Bar(x=[2, 4, 6], y= [10, 12, 15])
data = [trace]
layout = go.Layout(title='A Simple Plot', width=800, height=640)
fig = go.Figure(data=data, layout=layout)

plotly.plotly.image.save_as(fig, filename='a-simple-plot.png')

from IPython.display import Image
Image('a-simple-plot.png')

答案 1 :(得分:1)

一个简单的解决方案是使用image_bytes = fig.to_image(format='png')而不是使用Image(image_bytes)进行显示,但是首先您应该安装orca
pip3 install psutil requests
示例:

fig = go.Figure()
""" here goes some code to draw """

image_bytes = fig.to_image(format='png', , width=1200, height=700, scale=1) # you can use other formats as well (like 'svg','jpeg','pdf')

#instead of using fig.show()
from IPython.display import Image
Image(img_bytes)

您可以阅读更多here

比起您可以使用File -> Download as -> PDF或使用终端机jupyter nbconvert --to pdf <notebook_name>.ipynb来进行转换

答案 2 :(得分:1)

我没有上述确切问题的解决方案。但是,如果您想考虑.html格式,这是一个对我有用的不错的解决方案。毕竟,我的目标仅仅是与没有安装jupyter的人共享笔记本。

使用plotlyhtmlexporter执行到.html的转换。 这是一段您可以复制粘贴的代码:

  pip install plotlyhtmlexporter
  jupyter nbconvert --to plotlyhtml mynotebook.ipynb

然后,您可能想尝试从浏览器中将.html保存为.pdf,但我认为这等同于将原始笔记本打印为.pdf。正如我所说,就我而言,拥有一个独立于jupyter的.html文件就足够了。

答案 3 :(得分:1)

您需要指定适当的Default Renderer(或渲染器,如果您想在Notebook中对其进行可视化,以及使用您提到的File-->Download as-->PDF via Latex (.pdf)选项导出为PDF时)。

我自己也为此奋斗了几个小时,但最终为我工作的设置如下:

import plotly.io as pio
pio.renderers.default = "notebook+pdf"  # Renderer for Notebook and HTML exports + Renderer for PDF exports
# init_notebook_mode(connected=True)  # Do not include this line because it may not work

请注意,您可以使用+符号连接任意数量的渲染器,何时使用它们,Plotly将magically know连接起来。