将matplotlib图表直接导出到Excel?无需先保存到文件

时间:2019-03-18 11:09:39

标签: python-3.x matplotlib xlsxwriter

我正在尝试使用xlsx writer将matplotlib图像直接写入Excel文件中-理想情况下不将文件保存到磁盘中。

我找到了这个答案:Writing pandas/matplotlib image directly into XLSX file,但我无法使它正常工作,尤其是在Python 3中。

此:wks1.insert_image(2,2, imgdata不起作用,因为:

  

路径应为字符串,字节,os.PathLike或整数,而不是_io.BytesIO

此:wks1.insert_image(2,2,"",{'image data': imgdata}) 发出警告

  

找不到图片文件“”。

并生成没有图表的Excel文件。

有效的方法是将文件保存在本地-但我想了解是否有避免该文件的方法。

fig.savefig('test.png', format='png')
wks1.insert_image(2,2, 'test.png')

有什么想法吗?完整的代码是:

import xlsxwriter
import numpy as np
import matplotlib.pyplot as plt
import io

x=np.linspace(-10,10,100)
y=x**2

fig,ax=plt.subplots()
ax.plot(x,y)

workbook = xlsxwriter.Workbook('test chart.xlsx')
wks1=workbook.add_worksheet('Test chart')
wks1.write(0,0,'test')

imgdata=io.BytesIO()
fig.savefig(imgdata, format='png')

wks1.insert_image(2,2,"",{'image data': imgdata})
#wks1.insert_image(2,2, imgdata)

workbook.close()

1 个答案:

答案 0 :(得分:1)

According to the documentation(以及您提供的问题的链接),要传递给insert_image的可选参数的正确拼写是image_data(注意下划线_)

import xlsxwriter
import numpy as np
import matplotlib.pyplot as plt
import io

x=np.linspace(-10,10,100)
y=x**2

fig,ax=plt.subplots()
ax.plot(x,y)

workbook = xlsxwriter.Workbook('test chart.xlsx')
wks1=workbook.add_worksheet('Test chart')
wks1.write(0,0,'test')

imgdata=io.BytesIO()
fig.savefig(imgdata, format='png')
wks1.insert_image(2,2, '', {'image_data': imgdata})

workbook.close()