使用openpyxl绘制柱状图时字典数据显示异常如何解决?
OpenPyXL柱状图问题修复:数据不符 + Y轴整数设置
一、图表数据与实际不符的解决办法
你的代码里有几个明显问题导致图表显示错误:
- 数据列范围选多了:你往工作表写入的是
[产品名称, 数量],数量仅在第2列,但代码中data的max_col=3,会包含空的第3列数据,直接导致图表数据混乱。 - 标题参数设置错误:
add_data时开启了titles_from_data=True,但你的第一行是真实数据而非表头,程序会把第一行的数量当作系列标题,引发所有数据错位。 - 行数匹配逻辑错误:
max_row用了len(barcode_list),但数据来源是product_quantity字典,应该用len(product_quantity)保证行数与实际数据一致,避免多取或少取数据。
修复后的完整代码片段:
# 写入数据(确保barcode_list的key与product_quantity完全匹配) for key in product_quantity: active_sheet.append([barcode_list[key], product_quantity[key]]) my_chart = BarChart() # 修正数据引用:仅取第2列(数量列),行数对应产品字典长度 data = Reference(worksheet=active_sheet, min_row=1, max_row=len(product_quantity), min_col=2, max_col=2) my_chart.legend = None # 关闭titles_from_data,因为没有表头行 my_chart.add_data(data, titles_from_data=False) # 设置X轴分类(产品名称) categories = Reference(active_sheet, min_col=1, min_row=1, max_row=len(product_quantity)) my_chart.set_categories(categories) # 图表标题设置 my_chart.title = "产品销量统计" my_chart.x_axis.title = '产品编号' my_chart.y_axis.title = '销量' # 将图表添加到工作表A1位置 active_sheet.add_chart(my_chart, "A1")
二、Y轴设置为整数刻度
直接修改图表Y轴的刻度属性与显示格式即可:
# 在添加图表前,加入这段代码配置Y轴 my_chart.y_axis.scaling.majorUnit = 1 # 主刻度间隔设为1 my_chart.y_axis.scaling.min = 0 # 可选:强制Y轴从0开始 my_chart.y_axis.number_format = '0' # 强制显示整数,隐藏小数
设置完成后,Y轴只会显示0、1、2这类整数值。
内容的提问来源于stack exchange,提问作者Will Rideout
相关产品推荐
相关产品推荐

