You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多张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)

关键修改说明

  1. 移除冗余内层循环:删除for fill in range(len(ind)),避免每个工作表重复插入所有图片。
  2. 图片与工作表一一绑定:利用循环变量hc_sh(从0开始),通过hc_sh+1生成对应序号的图片文件名,实现第N个工作表插入第N张图片。
  3. 优化图片生成:添加plt.close()关闭绘图对象,防止matplotlib复用画布导致图片叠加混乱。
  4. 统一保存文件:将wb.save(path)移到循环外部,减少重复IO操作,提升效率同时避免文件锁定问题。

内容的提问来源于stack exchange,提问作者dhananya s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:27:20