python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图

python3 xlsxwiter模块插入matplotlib保存到io.BytesIO中的图

解决问题

1、xlsxwriter生成excel文件的基础函数;
2、matplotlib生成的图存入io.BytesIO字节流中;
3、xlsxwriter插入存在io.BytesIO中的图对象

代码示例

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

df = pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6],'这个列名真的好长长长啊':[7,8,9]})
imgdata = []
imgdata.append(BytesIO())
fig,ax = plt.subplots(figsize=(9,6))  #图片高度为6英寸,1英寸=2.54cm
plt.plot(df.col1,df.col2,'ro-')
plt.savefig(imgdata[-1])  #将matplotlib生成的fig存入BytesIO中,无需存到本地

workbook = xlsxwriter.Workbook('test.xlsx')  #初始化workbook
fmt1 = workbook.add_format({'align':'center','valign':'vcenter','text_wrap':True,'font_size':15,
                           'bg_color':'silver','font_color':'black','bold':True})
fmt2 = workbook.add_format({'align':'center','valign':'vcenter','text_wrap':True,'font_size':10,
                           'bg_color':'gray','font_color':'black'})
#align:水平对齐方式,valign:垂直对齐方式,text_wrap:自动换行,font_size:字体大小,bg_color:背景颜色
#font_color:字体颜色,bold:字体加粗
worksheet1 = workbook.add_worksheet('sheet1')  #增加worksheet
worksheet1.write_row('A1',df.columns.tolist())  #写入行数据
for i in range(df.shape[0]):
    worksheet1.write_row(i+1,0,df.iloc[i,:])
worksheet1.set_column(0,2,width=17)  #设置列格式
worksheet1.set_row(row=0,height=40,cell_format=fmt1)  #设置行格式
worksheet1.freeze_panes(1,0)  #冻结第一行
for i in range(1,4):
    worksheet1.set_row(row=i,height=25,cell_format=fmt2)
worksheet1.insert_image(6,0,'',{'image_data':imgdata[-1],'x_scale':1/1.1,'y_scale':1/0.93})
#insert_image(row,col,image,options)
#row:int行索引,col:int列索引,image:string图片文件名(含路径)
#options:dict
# {
#     'x_offset': 0,    水平方向偏移像素值
#     'y_offset': 0,    垂直方向偏移像素值
#     'x_scale': 1,     水平方向缩放比例
#     'y_scale': 1,     垂直方向缩放比例
#     'url': None,
#     'tip': None,
#     'image_data': None,      在io.BytesIO中添加内存中的字节流
#     'positioning': 2,        控制图片对象位置
# }
workbook.close()  #保存出xlsx文件

生成的Excel文件结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值