如何用openpyxl交换散点图X/Y轴且不修改Excel数据?
实现openpyxl散点图X/Y轴交换且保留数据标签的方案
核心思路:无需修改工作表内的数据结构,只需在创建散点图系列时,交换x_values和y_values的数据源引用,同时保留title_from_data=True配置即可实现轴的交换。
具体实现代码:
from openpyxl import Workbook from openpyxl.chart import ScatterChart, Reference, Series # 初始化工作簿和工作表 wb = Workbook() ws = wb.active # 填充示例数据(与官方示例数据结构一致,未修改原始数据顺序) rows = [ ["size", "percentage"], [10, 20], [20, 30], [30, 40], [40, 50], [50, 60], ] for row in rows: ws.append(row) # 创建散点图实例 chart = ScatterChart() chart.style = 13 # 设置轴标题,匹配交换后的轴含义 chart.x_axis.title = "percentage" chart.y_axis.title = "size" # 关键操作:交换x/y轴的数据源引用 # x_values指向原percentage列(作为横轴数据),y_values指向原size列(作为纵轴数据) x_vals = Reference(ws, min_col=2, min_row=2, max_row=6) y_vals = Reference(ws, min_col=1, min_row=2, max_row=6) # 创建系列并保留title_from_data=True,自动从y_values的上方单元格取标签 series = Series(y_vals, x_values=x_vals, title_from_data=True) chart.series.append(series) # 将图表插入工作表 ws.add_chart(chart, "A8") wb.save("scatter_axis_swapped.xlsx")
细节说明:
title_from_data=True会自动从y_values引用范围的上方单元格(即A1的"size")提取系列标签,完全符合需求,无需手动指定标题。- 若存在多个数据系列,只需对每个系列重复交换
x_values和y_values的数据源引用步骤即可。 - 轴标题为可选配置,目的是让图表的轴含义更直观,可根据实际需求调整或省略。
内容的提问来源于stack exchange,提问作者tab
相关产品推荐
相关产品推荐

