【问题标题】:xlsxwriter: how to load a BytesIO png files created with matplotlib.pyplotxlsxwriter:如何加载使用 matplotlib.pyplot 创建的 BytesIO png 文件
【发布时间】:2019-07-23 18:53:25
【问题描述】:

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”,也无济于事:

Traceback(最近一次调用最后一次):文件“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章 self._prepare_drawings() 文件“C:\Users...\Python35\lib\site-packages\xlsxwriter\workbook.py”,行 1073,在_prepare_drawings中 self._get_image_properties(filename, image_data) 文件“C:\Users...\Python35\lib\site-packages\xlsxwriter\workbook.py”,行 第1143章 data = image_data.getvalue() AttributeError: 'bytes' 对象没有属性 'getvalue'

【问题讨论】:

  • 当你在你的例子中使用 insert_image() 和 image_data 时,你可以给出任何名称作为文件名,例如“image.png”。
  • 谢谢,我已经编辑了以上内容以反映建议的结果。

标签: matplotlib python-3.5 xlsxwriter


【解决方案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})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2017-02-05
    • 2018-03-19
    • 1970-01-01
    相关资源
    最近更新 更多