如何以png格式保存Plotly离线图?

时间:2016-10-25 15:05:34

标签: python plotly

我正在使用Plotly离线在python中生成图形。

根据以下文档,

https://plot.ly/python/offline/

这是我的代码,它完美地生成了C:/tmp/test_plot.html文件。

import plotly.offline as offline

offline.init_notebook_mode()

offline.plot({'data': [{'y': [4, 2, 3, 4]}], 
               'layout': {'title': 'Test Plot', 
                          'font': dict(family='Comic Sans MS', size=16)}},
             auto_open=False, filename='C:/tmp/test_plot')

如何将此图保存为png而不是html?

3 个答案:

答案 0 :(得分:6)

offline.plot方法具有image='pngimage_filename='image_file_name'属性,可将文件另存为png

offline.plot({'data': [{'y': [4, 2, 3, 4]}], 
              'layout': {'title': 'Test Plot', 
                         'font': dict(family='Comic Sans MS', size=16)}},
             auto_open=True, image = 'png', image_filename='plot_image',
             output_type='file', image_width=800, image_height=600, 
             filename='temp-plot.html', validate=False)

offline.py内或plotly在线查看详情。

然而,有一点需要注意的是,由于输出图像与HTML绑定,因此它将在浏览器中打开并要求保存图像文件的权限。您可以在浏览器设置中将其关闭。

enter image description here

可替换地, 您可能希望使用plot_mpl来查看matplotlib转换 以下示例来自offline.py

from plotly.offline import init_notebook_mode, plot_mpl
    import matplotlib.pyplot as plt

    init_notebook_mode()

    fig = plt.figure()
    x = [10, 15, 20, 25, 30]
    y = [100, 250, 200, 150, 300]
    plt.plot(x, y, "o")

    plot_mpl(fig)
    # If you want to to download an image of the figure as well
    plot_mpl(fig, image='png')

答案 1 :(得分:4)

快速更新:从plotly.py 3.2.0开始,现在可以在完全脱机的情况下以编程方式将图形导出为静态图像。

这是通过将orca项目集成到plotly.py中来完成的。请查看announcement post,了解更多详细信息。

答案 2 :(得分:2)

您可以自动化PhantomJS以保存屏幕截图,其宽度和高度与打开浏览器下载时的原始图像完全相同。

以下是代码:

import plotly.offline as offline
from selenium import webdriver

offline.plot({'data': [{'y': [4, 2, 3, 4]}],
               'layout': {'title': 'Test Plot',
                          'font': dict(size=12)}},
             image='svg', auto_open=False, image_width=1000, image_height=500)

driver = webdriver.PhantomJS(executable_path="phantomjs.exe")
driver.set_window_size(1000, 500)
driver.get('temp-plot.html')
driver.save_screenshot('my_plot.png')

#Use this, if you want a to embed this .png in a HTML file
#bs_img = driver.get_screenshot_as_base64()