使用 plotly 离线生成图形作为图像

Posted

技术标签:

【中文标题】使用 plotly 离线生成图形作为图像【英文标题】:Use plotly offline to generate graphs as images 【发布时间】:2016-04-29 16:58:57 【问题描述】:

我正在离线使用 plotly 并且能够使用生成 html 文件

plotly.offline.plot("data": data, "layout": layout)

效果很好。该图已正确生成,并且 html 文件被保存到我的当前目录中。

不过,我想要的是,使用 plotly 离线保存一个图像(.png、.jpg 等)文件。我在正确的轨道上吗?我需要从这里做什么?

【问题讨论】:

我会退回到 Matplotlib(只是提一下,以防你不知道 lib) 我使用 filename='file', image='jpeg' 参数作为绘图函数,然后让脚本打开 html 文件并将下载的 jpeg 从我的下载文件夹复制到 html 文件的目录。坦率地说,这是一种可怕的方法,但它确实有效...... @JohnCH,感谢您的评论,但我无法清楚地了解图像文件保存在哪个文件夹中。 【参考方案1】:

试试这个

import plotly.offline
import plotly.graph_objs as go

plotly.offline.plot("data": [go.Scatter(x=[1, 2, 3, 4], y=[4, 3, 2, 1])],
                     "layout": go.Layout(title="hello world"),
                     image='jpeg', image_filename='test')

在 Chrome 中打开

【讨论】:

虽然不得不打开浏览器很糟糕,但从 SO 和 plotly 论坛的大量阅读来看,这 在离线时唯一/最好的方法那一刻。 你会考虑让这个完全可重现吗? 编辑:删除了我的建议/请求,只是为您完成。随意改变你想要的任何东西。只是认为它可以让人们尝试而不会对潜在的导入/命名错误感到困惑。 @LordK,图片文件保存在哪里?【参考方案2】:

我在这里的文档中找到了解决方案:

https://plot.ly/python/static-image-export/

所以一个最小的例子是:

import plotly.plotly as py
import plotly.graph_objs as go
import numpy as np

N = 1000
random_x = np.random.randn(N)
random_y = np.random.randn(N)

trace = go.Scatter(
    x = random_x,
    y = random_y,
    mode = 'markers'
)

data = [trace]

py.image.save_as('data':data, 'scatter_plot', format='png')

【讨论】:

我也看到了这个,但它不是从笔记本保存图像,而是从他们的服务器保存图像。 好吧,显然您确实需要连接到服务器,但该图表随后不会出现在您的 plotly 帐户中,因此它不是公开的。你可以吗? 我想要完成的是根本不必连接到 plotly 服务器。这是为了支持更快的图表创建。我希望在不打开图表且不涉及绘图服务器的情况下将生成的图表保存为图像文件。我目前认为没有办法做到这一点。此外,我不想使用他们的 javascript 版本,因为此图表代码根本不会进入浏览器,而是会在幕后将图表保存在 pdf 中。 好吧,我猜你的未来是有希望的,因为plotly离线刚刚发布。也许他们将来会让我们离线保存。 现在可以将 Plotly 的 orca 添加到您的网站 @Matt。见here。您可以制作图像而不显示它。【参考方案3】:

离线使用python plotly graphs的简单方法:

1) 编写导入语句

import plotly.graph_objs as go
import plotly as plotly
import plotly.express as px

2) 编写您的绘图代码,例如

data = px.data.gapminder()

data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',
             hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
             labels='pop':'population of Canada', height=400)

3) 为您的人物命名(提供便于阅读的名称:))

plotly.offline.plot(fig, filename= output_filename + ".html")

4) 干得好!如果您喜欢我的回答,请添加 cmets!

【讨论】:

是的,要将文件保存为 .png 格式,只需执行以下操作:plotly.offline.plot(fig, filename= output_filename + ".png") 不,只是生成一个名为output_filename.png.html的html文件 删除最后的.html 并替换为.png @ShantanuDeshmukh 这个文件将保存在哪里?实际上我正在使用 plotly.offline.iplot()【参考方案4】:

使用 ipython notebook 的一种可能性是显示图形,然后手动选择“将绘图下载为 png”选项。

【讨论】:

除非我不想显示它。该程序是网站的一部分,该网站生成图表作为 pdf 的一部分,并通过电子邮件发送给客户。顺便说一句,感谢您的回复。【参考方案5】:

Here 说要使用

import plotly.plotly as py
# Generate the figure

trace = Bar(x=[1,2,3],y=[4,5,6])
data = [trace]
layout = Layout(title='My Plot')
fig = Figure(data=data,layout=layout)

# Save the figure as a png image:
py.image.save_as(fig, 'my_plot.png')

【讨论】:

你真的试过这个吗?它不可重现(您需要plotly.graph_objs,您可能会在本地导入它)并且它没有按照用户的要求离线。运行这个产生PlotlyRequestError: You must be authenticated to generate an image via json.

以上是关于使用 plotly 离线生成图形作为图像的主要内容,如果未能解决你的问题,请参考以下文章

将配置模式添加到 Plotly.Py 离线 - 模式栏

使用 python 绘制图形并使用 HTML 显示它

在 Jupyter 中使用 plotly 在离线模式下创建动画图表

python - 如何离线使用python中的仪表板API?

Python可视化 | Python可视化进阶必备 - plotly

jupyter实验室中的plot.ly离线模式不显示绘图