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),调整刻度设置:
- 提取
x中的唯一值作为刻度位置,确保位置数量和标签数量一致; - 裁剪
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
相关产品推荐
相关产品推荐

