2016-10-25 12 views
5

Używam funkcji Twardy offline, aby wygenerować wykres w python.Jak zapisać wykres Plotly Offline w formacie png?

zgodnie z poniższą dokumentacją

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

Oto mój kod, który doskonale generuje C: /tmp/test_plot.html plików.

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

Jak zapisać ten wykres jako png zamiast html?

Odpowiedz

5

offline.plot metoda ma atrybuty image='png i image_filename='image_file_name', aby zapisać plik jako 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) 

Zobacz więcej szczegółów wewnątrz offline.py lub online na plotly.

Jednak jednym zastrzeżeniem jest to, że ponieważ obraz wyjściowy jest powiązany z HTML, otworzy się on w przeglądarce i poprosi o uprawnienia do zapisania pliku obrazu. Możesz wyłączyć to w ustawieniach przeglądarki.

enter image description here

Alternatywnie Możesz zajrzeć do plotly do matplotlib konwersję za pomocą plot_mpl.
Poniższy przykład jest z 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') 
+0

Dostaję błąd, natomiast oddanie obrazu w argumencie. Polecenie plot_mpl() otrzymało nieoczekiwany argument słowa kluczowego "image"/plot() otrzymało nieoczekiwany argument słowa kluczowego "image". Działa w wersji 1.9.6. –

+0

Zaktualizowałem do spiskowej wersji 1.12.9, działa zgodnie z oczekiwaniami. czy istnieje sposób, aby skonfigurować zapisywanie png bezpośrednio bez dostępu do html? –

+0

Chciałam skomentować, że możesz chcieć ulepszyć, ale już zrobiłeś :-). Opierając się na moich dotychczasowych badaniach, nie sądzę, że sprawdziłem również sprytne fora. Możesz tam zapytać. Najlepszą metodą jest przekierowanie działki na matplotlib i zapisanie. Lub użyj metody online. zobacz tutaj: https: //plot.ly/python/static-image-export/ –

1

można zautomatyzować PhantomJS zapisać zrzut ekranu z dokładnie tej samej szerokości i wysokości co oryginalnego obrazu będzie, gdy jest on pobierany przez otwarcie przeglądarki.

Oto kod:

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() 
Powiązane problemy