xlsxwriter:如何加载使用matplotlib.pyplot创建的BytesIO png文件

xlsxwriter:如何加载使用matplotlib.pyplot创建的BytesIO png文件,matplotlib,python-3.5,xlsxwriter,Matplotlib,Python 3.5,Xlsxwriter,python==3.5.2,matplotlit==3.0.0,pandas==0.24.0。在windows 10上,numpy==1.15.4 当使用matplotlib的savefig保存matplotlib图形并使用xlsxwriter将其导出到excel文件时,有时保存到png文件的过程比导出到excel的过程稍慢,导致无法看到png文件,因此无法导出到excel。 我想把这个数字保存到一个缓冲区: import numpy as np import pandas as pd impo

python==3.5.2,matplotlit==3.0.0,pandas==0.24.0。在windows 10上,numpy==1.15.4

当使用matplotlib的savefig保存matplotlib图形并使用xlsxwriter将其导出到excel文件时,有时保存到png文件的过程比导出到excel的过程稍慢,导致无法看到png文件,因此无法导出到excel。 我想把这个数字保存到一个缓冲区:

import numpy as np
import pandas as pd
import xlsxwriter
import matplotlib.pyplot as plt
from io import BytesIO

df = pd.DataFrame(np.random.random(size=(10, 3)),
                                   columns=['a', 'b', 'c'])
# make plot
fig, ax = plt.subplots()
df.plot(ax =ax)

# save plot
buffy = BytesIO()
fig.savefig(buffy, format='png')
buffy.seek(0)
img_data = buffy.read()

# export plot to an xlsx file
wb  = xlsxwriter.Workbook('test_BytesIO.xlsx')
ws = wb.add_worksheet('the_pic')
ws.insert_image('A1', 'image.png', {'image_data': img_data})

wb.close()
但是,我正在努力使用xlsxwriter将文件导出到excel工作表。 任何线索都将不胜感激

编辑

@jmcnamara:添加任何文件名(如“image.png”)都没有帮助:

回溯最近一次调用:文件C:…\binary\u save\u plt.py, 第24行,在 wb.close文件C:\Users…\Python35\lib\site packages\xlsxwriter\workbook.py,第行 306,接近 self.\u store\u工作簿文件C:\Users…\Python35\lib\site packages\xlsxwriter\workbook.py,第行 637,店内工作手册 self.\u prepare\u绘图文件C:\Users…\Python35\lib\site packages\xlsxwriter\workbook.py,第行 1073,正在准备图纸 self.\u get\u image\u属性filename,image\u数据文件C:\Users…\Python35\lib\site packages\xlsxwriter\workbook.py,第行 1143,in_get_image_属性 data=image\u data.getvalue AttributeError:“字节”对象没有属性“getvalue”

image_data参数需要是BytesIO对象,而不是来自它的数据。您可以为图像指定任何合适的名称作为文件名。请参阅上的文档

以下方面应起作用:

buffy = BytesIO()
fig.savefig(buffy, format='png')

wb  = xlsxwriter.Workbook('test_BytesIO.xlsx')
ws = wb.add_worksheet('the_pic')
ws.insert_image('A1', 'image.png', {'image_data': buffy})

当您将insert_图像与示例中的图像_数据一起使用时,您可以使用任何名称作为文件名,例如“image.png”。谢谢,我已对上述内容进行了编辑,以反映建议的结果。