How to specify a directory in which to save an image using plotly py.image.save_as
我想将生成的绘图图像保存到特定目录中,但是
我正在使用以下代码来保存图
是否可以指定目录?
为了将文件保存在特定的文件路径中,您需要使用
1 2 | import plotly.plotly as py help(py.image) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | Helper functions wrapped around plotly's static image generation api.
|
| Class methods defined here:
| save_as(figure_or_data, filename, format=None, width=None, height=None, scale=None) from builtins.type
| Save a image of the plot described by `figure_or_data` locally as
| `filename`.
|
| Valid image formats are 'png', 'svg', 'jpeg', and 'pdf'.
| The format is taken as the extension of the filename or as the
| supplied format.
|
| positional arguments:
| - figure_or_data: The figure dict-like or data list-like object that
| describes a plotly figure.
| Same argument used in `py.plot`, `py.iplot`,
| see https://plot.ly/python for examples
| - filename: The filepath to save the image to
| - format: 'png', 'svg', 'jpeg', 'pdf'
| - width: output width
| - height: output height
| - scale: Increase the resolution of the image by `scale` amount
| Only valid for PNG and JPEG images.
使用文件名和路径(离线):
However, this results in a HTML file that's opened in a new tab of the
browser. The image is saved to the 'Downloads' folder, and it's not
possible to specify the path at which the image should be saved.
1 2 3 4 5 | from plotly.offline import py from plotly.graph_objs import Scatter plot([Scatter(x=[14, 19, 24, 29, 34, 39, 89], y=[30, 15, 18, 30, 24, 27, 50])], filename='2/billympoufo.html') |
因此,您将在指定的文件夹中拥有html文件(下载文件夹中的图像),以便绕过浏览器行为,您可以:
(1)从
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import os import plotly import plotly.graph_objs as go import time from shutil import copyfile img_name = 'billympoufo' dload = os.path.expanduser('~/Downloads') save_dir = '/tmp' data = [go.Scatter(x=[14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79, 84, 89, 1], y=[30, 15, 18, 30, 24, 27, 50, 36, 39, 42, 50, 48, 51, 54])] plotly.offline.plot(data, image_filename=img_name, image='svg') ### might need to wait for plot to download before copying time.sleep(1) copyfile('{}/{}.svg'.format(dload, img_name), '{}/{}.svg'.format(save_dir, img_name)) |
for more offline options: (2) check chromium or (3) Firefox download
behavior. By using the parameterauto_open=False it
should save the image in the folder without opening a tab in your
browser but this was an an issue, check here: Directly save image
(without opening in browser) #880 and plotly didn't plan to
add this feature at that time.
Also you can (4) use selenium to screenshot the page
在Jupiter中,对于离线保存,您可以执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import os import pandas as pd import plotly import plotly.graph_objs as go import time from selenium import webdriver from PIL import Image from pyvirtualdisplay import Display ### from bokeh/io, slightly modified to avoid their import_required util ### didn't ultimately use, but leaving in case I figure out how to stick wtih phentomjs ### - https://github.com/bokeh/bokeh/blob/master/bokeh/io/export.py def create_default_webdriver(): '''Return phantomjs enabled webdriver''' phantomjs_path = detect_phantomjs() return webdriver.PhantomJS(executable_path=phantomjs_path, service_log_path=devnull) ### based on last SO answer above ### - https://stackoverflow.com/questions/38615811/how-to-download-a-file-with-python-selenium-and-phantomjs def create_chromedriver_webdriver(dload_path): display = Display(visible=0) display.start() chrome_options = webdriver.ChromeOptions() prefs = {"download.default_directory": dload_path} chrome_options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(chrome_options=chrome_options) return driver, display df = pd.DataFrame( {'fruits': ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'], 'counts': [5, 3, 4, 2, 4, 6] }) data = [go.Bar(x=df['fruits'],y=df['counts'])] dload = os.path.expanduser('~/Downloads') html_file = 'plotly-fruit-plot.html' fname = 'plotly-fruit-plot' ### original code contained height/width for the display and chromium webdriver ### I found they didn't matter; specifying the image size to generate will ### produce a plot of that size no matter the webdriver plotly.offline.plot(data, filename=html_file, auto_open=False, image_width=1280, image_height=800,image_filename=fname, image='png') ### create webdrive, open file, maximize, and sleep driver, display = create_chromedriver_webdriver(dload) driver.get('file:///{}'.format(os.path.abspath(html_file))) # make sure we give the file time to download time.sleep(1) ### was in the SO post and could be a more robust way to wait vs. just sleeping 1sec # while not(glob.glob(os.path.join(dl_location, filename))): # time.sleep(1) driver.close() display.stop() image = Image.open('{}.png'.format(os.path.join(dload, fname))) image |
(来源:木星)
或在线文件夹:
1 2 3 4 5 6 7 8 9 10 11 | import plotly.plotly as py import plotly.graph_objs as go # sign in data = [ go.Scatter( x=[14, 19, 24, 29, 5, 10, 22], y=[15, 18, 30, 24, 27, 30, 40] ) ] plot_out = py.plot(data, filename='all_my_graphs/my_new_plot') |
我发现的最简单方法,如有任何疑问,请遵循文档https://plotly.com/python/static-image-export/
安装之前>> pip install -U kaleido
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import plotly.graph_objects as go import os fig = go.Figure() fig.add_trace(go.Bar(x=["A"], y=[25], marker_color='rgb(55, 83, 109)', name="A" )) fig.add_trace(go.Bar(x=["B"], y=[50], marker_color='rgb(26, 118, 255)', name="B" )) fig.update_layout( title='Test', xaxis_tickfont_size=14, yaxis=dict( title='Time (ms)', titlefont_size=16, tickfont_size=14, ), legend=dict( x=1.0, y=1.0, bgcolor='rgba(255, 255, 255, 0)', bordercolor='rgba(255, 255, 255, 0)' ), barmode='group', bargap=0.02, bargroupgap=0.6, width=500, height=400 ) #fig.show() if not os.path.exists("images"): os.mkdir("images") fig.write_image("images/fig1.pdf") |
如果我对您的理解正确,则希望使用python将图像保存在文件夹中。如果您进行搜索,该问题已经有答案。
我使用的功能是
savefig()
示例:
1 2 3 4 5 | plot = dtf.plot() fig = plot.get_figure() fig.savefig("output.png") or fig.savefig("output.pdf") ... |
此外,您还必须导入matplotlib库:
1 | import matplotlib.pyplot as plt |