web-dev-qa-db-ja.com

Plotly Offlineグラフをpng形式で保存する方法は?

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')

このグラフをHTMLではなくpngとして保存するにはどうすればよいですか?

9
Dave D.

offline.plotメソッドには、ファイルをpngとして保存するためのimage='pngおよびimage_filename='image_file_name'属性があります。

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でオンラインで詳細をご覧ください。

ただし、注意点の1つは、出力画像はHTMLに関連付けられているため、ブラウザで開き、画像ファイルを保存する権限を要求することです。ブラウザの設定でオフにできます。

enter image description here

あるいは、plot_mplを使用してplotlyから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')
7
Anil_M

クイックアップデート:plotly.py 3.2.0以降、完全にオフラインでプログラムでFigureを静的画像としてエクスポートできるようになりました。

これは、 orca プロジェクトをplotly.pyに統合することで実現されました。詳細については アナウンス投稿 をご覧ください。

4
Jon Mease

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()
2
user8365688