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

如何使用openpyxl为散点图系列添加字母数字类型的数据标签

解决openpyxl散点图自定义数据标签问题

问题原因

你之前触发类型报错,是因为Series构造函数的dLbls参数预期接收DataLabelList类型的标签配置对象,你直接传入了标签列的单元格引用对象,类型不匹配导致报错。

解决方法

只需要两步即可实现A列内容作为数据点标签:

  • 给系列指定类别源为A列的单元格引用
  • 开启系列的类别标签显示,关闭不需要的默认标签项

具体修改代码

你只需要替换原代码中注释*** WHAT I WANT IS TO ADD "A", "B", "C", etc... as labels to chart points... but HOW? ***的部分,添加以下代码即可:

# 导入需要的标签类
from openpyxl.chart.label import DataLabelList
# 给系列指定类别源为A列的标签数据
series_data.cat = chart_ref_l
# 配置标签显示规则
series_data.dLbls = DataLabelList()
series_data.dLbls.showCatName = True # 开启类别名称显示,也就是A列的内容
series_data.dLbls.showVal = False # 关闭默认的Y值显示
series_data.dLbls.showSerName = False # 关闭系列名称显示

如果想在创建Series时直接指定,也可以把原来创建series的行改成:

series_data = xl.chart.Series(values=chart_ref_y, xvalues=chart_ref_x, cat=chart_ref_l)

效果和单独给series_data.cat赋值完全一致。修改后运行代码,生成的Excel文件中散点图的每个数据点就会显示对应的A列字母标签。

完整修改后代码

import openpyxl as xl
from openpyxl.chart.label import DataLabelList

# Create workbook and data sheet
wb = xl.Workbook()
ws = wb.active
ws.title = "Data"
# Prepare data
headers = ["Labels", "X values", "Y values"]
data = [["A", "B", "C", "D", "E"], [12, 23, 34, 45, 56], [65, 45, 38, 92, 17]]
# Write data in sheet
for col in range(1, 4):
    ws.cell(row=1, column=col).value = headers[col - 1]
    for row in range(2, 7):
        ws.cell(row=row, column=col).value = data[col - 1][row - 2]

# Select data for chart
mr = ws.max_row
chart_title = "Scatter chart"
chart_ref_x = xl.chart.Reference(ws, min_col=2, min_row=2, max_row=mr) # X values
chart_ref_y = xl.chart.Reference(ws, min_col=3, min_row=2, max_row=mr) # Y values
chart_ref_l = xl.chart.Reference(ws, min_col=1, min_row=2, max_row=mr) # Data labels

# Make scatter chart
scatter_chart = xl.chart.ScatterChart()
scatter_chart.title = chart_title
scatter_chart.x_axis.title = "X values"
scatter_chart.y_axis.title = "Y values"
scatter_chart.legend = None
# Create series
series_data = xl.chart.Series(values= chart_ref_y, xvalues= chart_ref_x)
series_data.graphicalProperties.line.noFill = True
series_data.marker = xl.chart.marker.Marker('diamond')
series_data.marker.size = 8

# 自定义标签配置
series_data.cat = chart_ref_l
series_data.dLbls = DataLabelList()
series_data.dLbls.showCatName = True
series_data.dLbls.showVal = False
series_data.dLbls.showSerName = False

# Add series to chart
scatter_chart.series.append(series_data)
# Create chartsheet and add chart
chart_sheet = wb.create_chartsheet(title="Scatter chart")
chart_sheet.add_chart(scatter_chart)
# Save workbook
wb.save("labels.xlsx")
# Close it
wb.close()

内容的提问来源于stack exchange,提问作者Dario de Judicibus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:03