设置matplotlib xticks后X轴仅显示单个刻度问题排查
问题
我用以下代码通过Seaborn绘制训练分数与测试分数随alphas变化的折线图,提供了完整的score_train、score_test和alphas数值用于复现:
alphas = [0.00000000e+00, 3.12213617e-05, 3.41931065e-05, 9.09382510e-05, 1.42111604e-04, 1.50323881e-04, 2.89300778e-04, 3.20398837e-04, 3.26079390e-04, 3.67602501e-04, 4.24184679e-04, 4.34481263e-04, 4.90132981e-04, 5.62078948e-04, 5.85072664e-04, 6.78360178e-04, 7.93980204e-04, 8.07864745e-04, 9.61382275e-04, 1.29066450e-03, 1.40562637e-03, 1.46742025e-03, 1.66062768e-03, 1.72203321e-03] score_train = [0.0104715802718085, 0.010458280337911519, 0.010443714475584676, 0.010443714475584676, 0.010344437970874143, 0.010280401760789704, 0.010280401760789704, 0.010157163022360027, 0.009881770880034169, 0.00988177088003428, 0.0097251765261126, 0.009544478827850478, 0.008756729180697365, 0.008038412062383204, 0.008038412062383316, 0.007789177969584338, 0.007211231010840424, 0.006528863850344235, 0.006528863850344235, 0.0055695183357952205, 0.0055695183357952205, 0.0043456341750442995, 0.0043456341750444105, 0.0014375284078337325] score_test = [-0.013180580298218336, -0.013160472761265751, -0.013151821204646863, -0.013151821204646863, -0.013165861122794942, -0.013197005960391195, -0.013197005960391195, -0.013046889005794426, -0.013122528043505444, -0.013122528043505444, -0.013673242248775308, -0.013585443618303605, -0.01417799133998554, -0.014195521870022931, -0.01419552187002271, -0.009323258408655777, -0.0023269067131193033, -0.00362963279693429, -0.003629632796934512, -0.0045420007912404525, -0.0045420007912404525, -0.0018079981576566428, -0.0018079981576566428, -0.00034014856624420275] import seaborn as sns import matplotlib.pyplot as plt import numpy as np sns.set() plt.figure(figsize=(14,7)) sns.lineplot(y=score_train,x=alphas,label="Training Score") sns.lineplot(y=score_test,x=alphas,label="Testing Score") plt.xticks(ticks=np.arange(0.000000,0.0001,0.001000)) plt.show()
生成的图表X轴仅显示单个刻度,无法看到完整的刻度值,请问哪里操作错误?
解决方法
问题出在plt.xticks(ticks=np.arange(0.000000,0.0001,0.001000))这一行:
np.arange(start, stop, step)是左闭右开区间,你设置的start=0,stop=0.0001,但step=0.001,步长远大于区间长度,所以只会生成[0.0]这一个刻度值,导致X轴只显示单个刻度。- 另外你的
alphas最大值约为0.0017,当前设置的X轴区间(0到0.0001)完全没覆盖数据的主要范围。
修正后的代码如下:
alphas = [0.00000000e+00, 3.12213617e-05, 3.41931065e-05, 9.09382510e-05, 1.42111604e-04, 1.50323881e-04, 2.89300778e-04, 3.20398837e-04, 3.26079390e-04, 3.67602501e-04, 4.24184679e-04, 4.34481263e-04, 4.90132981e-04, 5.62078948e-04, 5.85072664e-04, 6.78360178e-04, 7.93980204e-04, 8.07864745e-04, 9.61382275e-04, 1.29066450e-03, 1.40562637e-03, 1.46742025e-03, 1.66062768e-03, 1.72203321e-03] score_train = [0.0104715802718085, 0.010458280337911519, 0.010443714475584676, 0.010443714475584676, 0.010344437970874143, 0.010280401760789704, 0.010280401760789704, 0.010157163022360027, 0.009881770880034169, 0.00988177088003428, 0.0097251765261126, 0.009544478827850478, 0.008756729180697365, 0.008038412062383204, 0.008038412062383316, 0.007789177969584338, 0.007211231010840424, 0.006528863850344235, 0.006528863850344235, 0.0055695183357952205, 0.0055695183357952205, 0.0043456341750442995, 0.0043456341750444105, 0.0014375284078337325] score_test = [-0.013180580298218336, -0.013160472761265751, -0.013151821204646863, -0.013151821204646863, -0.013165861122794942, -0.013197005960391195, -0.013197005960391195, -0.013046889005794426, -0.013122528043505444, -0.013122528043505444, -0.013673242248775308, -0.013585443618303605, -0.01417799133998554, -0.014195521870022931, -0.01419552187002271, -0.009323258408655777, -0.0023269067131193033, -0.00362963279693429, -0.003629632796934512, -0.0045420007912404525, -0.0045420007912404525, -0.0018079981576566428, -0.0018079981576566428, -0.00034014856624420275] import seaborn as sns import matplotlib.pyplot as plt import numpy as np sns.set() plt.figure(figsize=(14,7)) sns.lineplot(y=score_train,x=alphas,label="Training Score") sns.lineplot(y=score_test,x=alphas,label="Testing Score") # 修正X轴刻度:覆盖alphas的取值范围,设置合适步长,并旋转刻度避免重叠 plt.xticks(ticks=np.arange(0, 0.002, 0.0002), rotation=45) # 可选:设置X轴标签格式为科学计数法,更清晰 plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter('%.5f')) plt.xlabel('Alphas') plt.ylabel('Scores') plt.title('Training vs Testing Scores with Different Alphas') plt.legend() plt.show()
关键修改点:
- 将
np.arange的参数调整为np.arange(0, 0.002, 0.0002),覆盖了alphas的最大值(约0.0017),步长0.0002保证有足够多的刻度。 - 添加
rotation=45让X轴刻度旋转,避免文字重叠。 - 可选添加刻度格式设置,让小数显示更清晰。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

