Python matplotlib绘图时elif分支被跳过,区间判断异常颜色不符
问题原因
- 你代码里所有判断都在做字符串的字典序比较,不是数值大小比较,这是错误的根本原因。
- 字符串比较是逐位按ASCII码值比对的:比如
'86' < '106'的结果是False,因为第一位字符'8'的ASCII码远大于'1',哪怕实际数值86比106小,字符串比较也会判定'86'更大,所以落在86-200区间的字符串值都会命中最后一个zlist > '201'的条件。 - 前两个判断能正常触发是因为你比较的都是两位数的字符串,逐位比对的结果刚好和数值比对结果一致,才没出问题。
修复方案
先把zlist转成数值类型再做比较,修改后的判断逻辑参考如下:
# 先转成整数,如果zlist存的是小数就改成float()转换 z_value = int(zlist) if z_value < 55: plt.scatter(x = xlist, y = ylist, color = 'green') plt.xticks(rotation=90) plt.text(xlist, ylist, zlist) elif 55 < z_value < 71: plt.scatter(x =xlist, y =ylist, color = 'yellow') plt.xticks(rotation = 90) plt.text(xlist, ylist, zlist) elif 71 < z_value < 86: plt.scatter(x =xlist, y =ylist, color = 'orange') plt.xticks(rotation = 90) plt.text(xlist, ylist, zlist) elif 86 < z_value < 106: plt.scatter(x =xlist, y =ylist, color = 'red') plt.xticks(rotation = 90) plt.text(xlist, ylist, zlist) elif 106 < z_value < 201: plt.scatter(x =xlist, y =ylist, color = 'purple') plt.xticks(rotation = 90) plt.text(xlist, ylist, zlist) elif z_value > 201: plt.scatter(x =xlist, y =ylist, color = 'maroon') plt.xticks(rotation = 90) plt.text(xlist, ylist, zlist)
额外说明:你当前的区间判断没有包含边界值,比如刚好等于55、71、86这类数值时不会命中任何分支,可根据实际需求调整为<=或明确边界归属。
内容的提问来源于stack exchange,提问作者PewPewPanda
相关产品推荐
相关产品推荐

