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”
答案 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})