如何使用Matplotlib设置x轴显示自定义不等间距指定刻度
自定义Matplotlib指定不等距x轴刻度的实现方法
核心逻辑
Matplotlib默认会根据x轴覆盖的数值范围自动生成均匀分布的连续刻度,不会主动适配你传入的离散数据点位置。要实现“在指定x值位置显示刻度、其余位置不显示”的效果,需要手动调用接口明确指定刻度的位置与对应展示内容,同时保留x轴本身的真实数值比例。
操作步骤
在原有代码基础上,仅需添加两处刻度配置即可满足需求:
- 调用
ax.set_xticks(),传入你需要展示的x值列表,强制x轴仅在这些坐标位置生成刻度,自动屏蔽列表范围外的默认生成刻度 - (可选)调用
ax.set_xticklabels(),传入与x值一一对应的显示文本,自定义刻度的展示格式(比如统一保留固定小数位)
修改后的完整代码
fig = plt.figure() fig.suptitle("True Positive Rate") ax = fig.add_subplot(111) subsets = [0, 0.5, 0.6, 0.7, 0.8, 0.9, 1] # 替换为你实际的recall_results实测值即可 recall_results = [0.77, 0.81, 0.84, 0.86, 0.875, 0.885, 0.89] ax.plot(subsets, recall_results, marker = "o", linestyle = "--") # 自定义x轴刻度核心配置 ax.set_xticks(subsets) ax.set_xticklabels([f"{val:.1f}" for val in subsets]) ax.set_ylabel("True Positive Rate") ax.set_xlabel("% complete data in samples") plt.show()
注意事项
- 该配置会完全保留x轴的真实数值距离:比如坐标0到0.5的区间长度,是0.5到1区间长度的一半,不会因为刻度设置扭曲x轴代表的数值递进关系
- 避免误用类别轴模式:如果把x轴的绘图位置替换为1、2、3这类均匀排列的序号值,会把所有数据点之间的距离强制拉成相等,完全失去x轴代表数据完整度的数值意义,仅适合需要等距展示离散无序列别的场景
- 如果需要加宽0刻度附近的显示空间,可以额外调用
ax.set_xlim(left=-0.05, right=1.05),让最左侧的基线数据点不会贴在轴边缘
内容的提问来源于stack exchange,提问作者sums22
相关产品推荐
相关产品推荐

