如何利用从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
相关产品推荐
相关产品推荐

