web-dev-qa-db-fra.com

Comment enregistrer le graphe Plotly Offline au format png?

J'utilise Plotly offline pour générer un graphique en python.

Selon la documentation ci-dessous, 

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

Voici mon code, qui génère parfaitement le fichier 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')

Comment puis-je enregistrer ce graphique en png au lieu de html?

6
Dave D.

La méthode offline.plot possède les attributs image='png et image_filename='image_file_name' pour enregistrer le fichier sous la forme 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)

Voir plus de détails dans offline.py ou en ligne à plotly.

Toutefois, étant donné que l'image de sortie est liée à HTML, elle s'ouvre dans le navigateur et demande l'autorisation de sauvegarder le fichier image. Vous pouvez désactiver cela dans les paramètres de votre navigateur.

 enter image description here

Alternativement, Vous voudrez peut-être regarder complotement la conversion matplotlib en utilisant plot_mpl.
L'exemple suivant est tiré de 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')
6
Anil_M

Vous pouvez automatiser PhantomJS pour enregistrer une capture d'écran avec exactement la même largeur et la même hauteur que l'image d'origine lors du téléchargement en ouvrant le navigateur.

Voici le code:

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

Mise à jour rapide: depuis la version 3.2.0 de plotly.py, il est maintenant possible d'exporter par programmation des images sous forme d'images statiques en mode totalement déconnecté.

Cela a été accompli en intégrant le projet orca dans plotly.py. Consultez le message d'annonce pour plus de détails.

2
Jon Mease