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

Matplotlib自定义刻度报错:刻度位置与标签数量不匹配的解决方法

修复Matplotlib自定义刻度的数量不匹配错误

错误原因

你遇到的ValueError核心问题出在plt.xticks(x, my_xticks)这行代码:

  • 变量x包含21个重复数值(比如X1对应两个1、X2对应四个2等),调用plt.xticks(x, ...)会把每个重复值都当成独立的刻度位置,最终生成21个刻度点。
  • 而my_xticks只有15个标签,两者数量不匹配,触发了Matplotlib的参数校验错误。
  • 同时,重复的刻度位置本身没有实际意义,Matplotlib要求唯一的刻度位置对应每个标签。

修复方案

根据你的数据分布(点集中在x=1到x=5这5个位置,对应X1到X5),调整刻度设置:

  1. 提取x中的唯一值作为刻度位置,确保位置数量和标签数量一致;
  2. 裁剪my_xticks到和数据匹配的5个标签(如果确实需要15个刻度,需调整数据的x值分布到1-15区间)。

修复后的完整代码

import matplotlib.pyplot as plt

x = [1,1,  # plot 2 value at X1
     2,2,2,2,  # plot 4 value at X2
     3,3,3,3,3,
     4,4,4,4,4,
     5,5,5,5,5,] 

y = [0.04,0.005,  # value for plot at X1
     0.3, 0.03,0.02,0.06,  # value for plot at X2
     0.2,0.4,0.07,0.5, 0.009,
     0.1, 0.008, 0.3, 0.007,0.005,
     0.01,0.001,0.0004,0.0006,0.002]   

classes = ['A','B','C','D','E','F','G','H','I','J','K','L','M']
values = [8,12,      # Class to plot at X1
          1,5,6,8,   # Class to plot at X2
          0,2,3,4,5,
          3,2,7, 11,12,
          1,4,10,11,12]

# 保留和数据对应的5个刻度标签
my_xticks = ["X1","X2","X3","X4","X5"]
# 提取x中的唯一值并排序,作为刻度位置
unique_x = sorted(list(set(x)))

plt.xticks(unique_x, my_xticks)

scatter = plt.scatter(x, y, c=values)
# 绑定图例与类别标签
plt.legend(handles=scatter.legend_elements()[0], labels=classes)
plt.show()

补充说明

移除plt.xticks(x,my_xticks)后代码正常运行,是因为Matplotlib会自动根据数据范围生成合适的唯一刻度,避免了手动设置时的数量不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:02:43