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

如何利用从Excel提取的Series在Matplotlib中绘图?

利用Excel图表的Series在Matplotlib中绘图

当然可以,核心思路是解析Excel图表Series的数据源,读取对应单元格的数据后,再用Matplotlib重新绘制。以下是具体实现步骤:

1. 理解Excel SERIES公式的结构

你的示例输出=SERIES('Ensemble L'!$Q$11,'Ensemble L'!$C$12:$C$63,'Ensemble L'!$Q$12:$Q$63,5)各部分含义:

  • 'Ensemble L'!$Q$11:系列名称(对应单元格的内容)
  • 'Ensemble L'!$C$12:$C$63:X轴数据的单元格区域
  • 'Ensemble L'!$Q$12:$Q$63:Y轴数据的单元格区域
  • 5:该系列在图表中的序号(绘图时可忽略)

2. 修改代码提取实际数据

直接解析SERIES公式字符串容易出错(比如特殊字符、工作表名带空格等),建议通过win32com直接读取对应单元格的数据,而非仅解析公式:

import win32com.client as client
import matplotlib.pyplot as plt

def get_chart_series(chart):
    series_list = []
    print(f'\t图表名称:{chart.Name}')
    for sc in chart.SeriesCollection():
        # 提取系列名称、X/Y数据区域
        series_name = sc.Name
        x_range = sc.XValues
        y_range = sc.Values
        
        # 读取区域内的实际数据(转换为Python列表)
        x_data = [cell.Value for cell in x_range]
        y_data = [cell.Value for cell in y_range]
        
        series_list.append({
            'name': series_name,
            'x': x_data,
            'y': y_data
        })
        print(f"系列名称:{series_name},X数据点数量:{len(x_data)},Y数据点数量:{len(y_data)}")
    return series_list

# 读取Excel文件
ef = "你的Excel文件路径.xlsx"  # 替换为实际文件路径
xl = client.Dispatch('Excel.Application')
xl.Visible = False  # 后台运行Excel,不显示界面
wb = xl.Workbooks.Open(ef)
sh = wb.Sheets('Calc Tool')  
print(f"正在处理工作表:{sh.Name}")

# 遍历所有图表并提取系列数据
for ch in sh.ChartObjects():
    print(f"\n===== 处理图表:{ch.Name} =====")
    chart_series = get_chart_series(ch.Chart)
    
    # 用Matplotlib绘制当前图表的所有系列
    plt.figure(figsize=(10, 6))
    for series in chart_series:
        plt.plot(series['x'], series['y'], label=series['name'])
    
    plt.title(ch.Name)
    plt.xlabel("X轴")
    plt.ylabel("Y轴")
    plt.legend()
    plt.grid(True)
    plt.show()
    
    print('*********************')

# 关闭Excel资源
wb.Close(False)
xl.Quit()

3. 关键说明

  • 避免直接解析SERIES公式:通过sc.XValues和sc.Values直接获取数据区域对象,再读取单元格值,能兼容各种复杂的工作表命名和数据格式。
  • 数据类型转换:Excel单元格的数值、日期等类型会被win32com转换为Python对应类型,无需额外处理即可用于Matplotlib绘图。
  • 图表样式自定义:可以根据需要修改Matplotlib的绘图样式(如折线/柱状图、颜色、标记等),匹配原Excel图表的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:06