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

请求帮助:在Excel工作表中嵌入数据透视表旁的图表

解决方案:在Excel工作表中插入图表至数据透视表旁

要实现将图表粘贴到数据透视表右侧的需求,你需要结合matplotlib生成图表,并通过openpyxl操作Excel工作表完成插入。以下是修改后的完整代码及关键说明:

依赖库导入

先确保安装所需依赖,再导入相关库:

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl.drawing.image import Image
from io import BytesIO

修改后的核心代码

# 初始化Excel写入器(mode='a'表示追加,若文件不存在可改为mode='w')
with pd.ExcelWriter('OEE_OKL_WYNIK.xlsx', engine='openpyxl', mode='a') as writer:
    for nazwa in unikalne_nazwy:
        # 1. 筛选数据并生成数据透视表
        wyfiltrowane_dane = df_wynik_podsumowanie[df_wynik_podsumowanie['NAZWA'] == nazwa]
        wyfiltrowane_dane = wyfiltrowane_dane.pivot_table(
            values='SREDNIA_NORMA_OSIAGNIETA_srednia',
            index='P1_v2',
            columns='P2_v2',
            aggfunc='max',
            fill_value=0
        )
        df_suma = pivot.add(wyfiltrowane_dane, fill_value=0)
        df_suma = df_suma[new_order_col].loc[new_order_row]
        
        # 2. 将数据透视表写入对应工作表
        df_suma.to_excel(writer, sheet_name=nazwa)
        
        # 3. 获取当前工作表对象,准备插入图表
        workbook = writer.book
        worksheet = workbook[nazwa]
        
        # 4. 生成图表(可根据需求调整类型)
        plt.figure(figsize=(10, 6))
        # 示例:分组条形图,若需热力图可替换为seaborn的heatmap
        df_suma.plot(kind='bar', ax=plt.gca())
        plt.title(f'{nazwa} - Średnia norma osiągnięta')
        plt.xlabel('P1_v2')
        plt.ylabel('Średnia wartość')
        plt.tight_layout()  # 自动调整布局避免文字截断
        
        # 5. 将图表保存到内存(无需写入本地文件)
        img_buffer = BytesIO()
        plt.savefig(img_buffer, format='png', dpi=100)
        img_buffer.seek(0)
        excel_img = Image(img_buffer)
        
        # 6. 设置图表位置(放在数据透视表右侧,示例从C1开始,可根据数据宽度调整)
        # 数据透视表的列数 = 索引列 + 数据列数,可根据实际情况修改anchor值
        excel_img.anchor = 'C1'
        worksheet.add_image(excel_img)
        
        # 7. 关闭图表释放内存
        plt.close()

关键说明

  • 复用ExcelWriter:将写入器放在循环外,避免重复打开/关闭文件,同时能直接操作工作簿对象。
  • 图表位置控制:通过anchor参数指定图表插入的起始单元格(如C1表示第3列第1行),可根据数据透视表的实际宽度调整(例如数据到B列就用C列,到D列就用F列)。
  • 图表类型调整:
    • 若需要热力图,需先安装seaborn,然后替换图表生成部分为:
      import seaborn as sns
      sns.heatmap(df_suma, annot=True, cmap='YlGnBu', ax=plt.gca())
      
    • 也可根据需求选择line、area等其他图表类型。
  • 内存优化:用BytesIO将图表保存在内存中,避免生成临时文件,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:04:57