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

如何用openpyxl基于离散列创建双轴图表?

使用openpyxl创建指定列的双轴折线图

要实现你需要的双轴图表,核心是创建两个折线图实例分别对应两组数据,再将第二个图表绑定到右侧辅助轴并合并到主图表中。以下是具体实现步骤和代码:

关键步骤说明

  1. 加载工作簿与工作表:指定目标Excel文件和工作表。
  2. 主图表配置:对应左侧Y轴,以A列为分类轴,添加B、D列的数据(可通过多次add_data或range_string指定非连续列)。
  3. 次图表配置:对应右侧Y轴,以A列为分类轴,添加C列的数据。
  4. 双轴绑定:将次图表的Y轴设为辅助轴,再合并到主图表。

完整代码

from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference, SecondaryAxis

# 替换为你的Excel文件路径
wb = load_workbook("your_excel_file.xlsx")
ws = wb["sheet_name"]  # 替换为目标工作表名

# 创建主折线图(左侧Y轴:B、D列数据)
main_chart = LineChart()
# 设置分类轴为A列(包含表头)
categories = Reference(ws, min_col=1, min_row=1, max_row=ws.max_row)
main_chart.set_categories(categories)

# 方式1:分别添加B、D列数据
data_b = Reference(ws, min_col=2, min_row=1, max_row=ws.max_row)
main_chart.add_data(data_b, titles_from_data=True)

data_d = Reference(ws, min_col=4, min_row=1, max_row=ws.max_row)
main_chart.add_data(data_d, titles_from_data=True)

# 方式2:用range_string一次性指定非连续列(二选一即可)
# data_bd = Reference(ws, range_string=f"{ws.title}!B1:B{ws.max_row},D1:D{ws.max_row}")
# main_chart.add_data(data_bd, titles_from_data=True)

# 创建次折线图(右侧Y轴:C列数据)
secondary_chart = LineChart()
data_c = Reference(ws, min_col=3, min_row=1, max_row=ws.max_row)
secondary_chart.add_data(data_c, titles_from_data=True)
secondary_chart.set_categories(categories)

# 将次图表的Y轴设置为右侧辅助轴
secondary_chart.y_axis = SecondaryAxis()
# 合并次图表到主图表
main_chart += secondary_chart

# 将图表插入到工作表的M1位置
ws.add_chart(main_chart, "M1")
# 保存结果文件
wb.save("test.xlsx")

注意事项

  • 确保Excel表第一行是表头,titles_from_data=True会自动将表头作为系列名称。
  • 使用range_string时,格式需严格遵循工作表名!列行:列行,列行:列行的形式,动态获取最大行数可适配不同数据量。
  • 导入SecondaryAxis类是实现双轴的关键,不要遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:25:22