如何用openpyxl基于离散列创建双轴图表?
使用openpyxl创建指定列的双轴折线图
要实现你需要的双轴图表,核心是创建两个折线图实例分别对应两组数据,再将第二个图表绑定到右侧辅助轴并合并到主图表中。以下是具体实现步骤和代码:
关键步骤说明
- 加载工作簿与工作表:指定目标Excel文件和工作表。
- 主图表配置:对应左侧Y轴,以A列为分类轴,添加B、D列的数据(可通过多次
add_data或range_string指定非连续列)。 - 次图表配置:对应右侧Y轴,以A列为分类轴,添加C列的数据。
- 双轴绑定:将次图表的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
相关产品推荐
相关产品推荐

