如何将多张Histogram图片分别插入Excel对应工作表?
问题分析与修正方案
问题根源
- 初始代码:循环中硬编码了图片文件名
"Histogram1.png",导致所有工作表插入同一张图片。 - 修改后的代码:多了一层不必要的
fill循环,使得每个工作表重复插入所有三张图片,完全偏离需求。
正确代码实现
import pandas as pd import matplotlib.pyplot as plt from openpyxl import load_workbook from openpyxl.drawing.image import Image hi = pd.read_excel(path, sheet_name=sheet2, index_col=0) di_hi = list(hi.values()) wb = load_workbook(path) # 生成图片:添加plt.close()避免绘图叠加 for p, hc in enumerate(di_hi, 1): df_hc = pd.DataFrame(hc) df_hc.plot(kind='bar') plt.xlabel("Probe Name") plt.ylabel("Fold Change") plt.axhline() plt.savefig(f'Histogram{p}.png') plt.close() # 关闭当前绘图对象,防止后续绘图干扰 n = 2 + len(ind) sheets = wb.sheetnames for hc_sh in range(len(ind)): # 若HC_sheets无实际用途,可直接删除该行 # HC_sheets = wb[sheets[n+hc_sh]] active = wb[sheet2[hc_sh]] # 通过循环索引匹配对应序号的图片 filename = f"Histogram{hc_sh+1}.png" img = Image(filename) active.add_image(img, "F1") # 循环结束后统一保存文件,提升效率 wb.save(path)
关键修改说明
- 移除冗余内层循环:删除
for fill in range(len(ind)),避免每个工作表重复插入所有图片。 - 图片与工作表一一绑定:利用循环变量
hc_sh(从0开始),通过hc_sh+1生成对应序号的图片文件名,实现第N个工作表插入第N张图片。 - 优化图片生成:添加
plt.close()关闭绘图对象,防止matplotlib复用画布导致图片叠加混乱。 - 统一保存文件:将
wb.save(path)移到循环外部,减少重复IO操作,提升效率同时避免文件锁定问题。
内容的提问来源于stack exchange,提问作者dhananya s
相关产品推荐
相关产品推荐

