如何解决matplotlib折线图y轴大数值显示为1、2、3的问题
问题原因及解决方案
核心问题排查方向
- 首先排查
New、Old列表的数据类型:如果两个列表里的元素是带千分位分隔符的字符串(比如'18,965,554'),matplotlib无法将其识别为数值,会默认转换为从0开始的分类索引,这就是y轴仅显示1、2、3这类小数值的最常见原因。 - 其次排查未定义变量问题:你当前提供的代码中
FLMAUB、RandomFL、x1以及L列表里的A~H都没有定义,如果实际运行时这些变量的赋值不符合预期,也会导致坐标轴渲染异常。 - 最后排查绘图逻辑错误:你调用
plt.plot(New, Old)是将New作为x轴坐标、Old作为y轴坐标绘制单条折线,和你预期的“x轴为A~H,分别绘制New、Old两条折线”的需求不符。
修正后的可运行代码
import matplotlib.pyplot as plt plt.rcParams.update({'font.size': 16}) # 修正L列表元素为字符串,避免未定义报错 L = ['A','B','C','D','E','F','G','H'] x = range(len(L)) # 生成x轴位置序列,替换未定义的x1 New = [18965544, 45668787, 46768733, 865533, 32586879, 996665544, 53544222,97775644] Old = [23455, 0,0,0,0, 996665544, 65645, 654535] # 修正绘图逻辑:删除未定义的FLMAUB、RandomFL绘图代码,分别绘制New、Old两条折线 plt.plot(x, New) plt.plot(x, Old) plt.legend(['new', 'old'], loc='upper right') plt.xticks(x, L, rotation=30, horizontalalignment='right') plt.title('New Vs Old') plt.xlabel('Names') plt.ylabel('Cost') # 可选配置:如果y轴数值跨度过大,可开启对数坐标更便于查看小数值 # plt.yscale('log') plt.show()
额外说明
如果你的原始数据是从csv等文件读取的,读取时注意关闭千分位分隔符识别,或者手动将字符串格式的数值转换为整型:New = [int(val.replace(',','')) for val in New]
内容的提问来源于stack exchange,提问作者user12
相关产品推荐
相关产品推荐

