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

时间:2019-03-01 17:38:39

标签: matplotlib python-3.5 xlsxwriter

python == 3.5.2,matplotlit == 3.0.0,大熊猫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_save_plt.py”,   第24行,在       wb.close()文件“ C:\ Users ... \ Python35 \ lib \ site-packages \ xlsxwriter \ workbook.py”,行   306,收盘价       self._store_workbook()文件“ C:\ Users ... \ Python35 \ lib \ site-packages \ xlsxwriter \ workbook.py”,行   637,在_store_workbook中       self._prepare_drawings()文件“ C:\ Users ... \ Python35 \ lib \ site-packages \ xlsxwriter \ workbook.py”,行   1073,在_prepare_drawings中       self._get_image_properties(文件名,图像数据)文件“ C:\ Users ... \ Python35 \ lib \ site-packages \ xlsxwriter \ workbook.py”,行   1143,在_get_image_properties中       data = image_data.getvalue()AttributeError:“字节”对象没有属性“ getvalue”

1 个答案:

答案 0 :(得分:1)

image_data参数必须是BytesIO对象(而不是其数据)。您可以为图像指定任何合适的名称作为文件名。请参阅insert_image()上的文档。

以下方法应该起作用:

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