使用 matplot 绘制不等距刻度的 x 轴

时间:2021-04-09 12:34:44

标签: python matplotlib

我正在构建 ML 模型并绘制了不同百分比的完整数据的召回值,如下所示:

enter image description here

y 轴表示召回值,x 轴表示数据完整性的百分比(因此 0.6 完整数据表示删除了 > 40% 缺失数据的记录,0.7 表示缺失数据 > 30% 的记录已删除被删除等)。

这是我用来生成这个图的代码:

fig = plt.figure()
fig.suptitle("True Positive Rate")
ax = fig.add_subplot(111)

subsets=[0.5, 0.6, 0.7, 0.8, 0.9, 1]

ax.plot(subsets, recall_results, marker = "o", linestyle = "--")
    
ax.set_ylabel("True Positive Rate")
ax.set_xlabel("% complete data in samples")
plt.show()

为了了解在删除与原始数据相比缺失值百分比不同的记录时模型性能如何变化,我想在 x 点 0 添加基线召回值,因此(将此值添加到我的recall_values列表)我将代码更改为:

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]

ax.plot(subsets, recall_results, marker = "o", linestyle = "--")
    
ax.set_ylabel("True Positive Rate")
ax.set_xlabel("% complete data in samples")
plt.show()

enter image description here

从图中可以看出,添加了点 0 处的新召回值,但 x 值已从 0.5、0.6、0.7、0.8、0.9、1 更改为 0.0、0.2、0.4、0.6, 0.8、1.0。我知道写在新图中的 x 点彼此之间的距离相等,而不是从 0 跳到 0.5。

从技术角度来看,新图没有任何问题,但我宁愿写入的 x 值是那些我有 [0, 0.5, 0.6, 0.7, 0.8, 0.9, 1]。谁能帮帮我?

谢谢!

1 个答案:

答案 0 :(得分:0)

如@JohanC 的评论所述,有 3 种可能的解决方案:

  1. 仅在子集中的位置有刻度
ax.set_xticks(subsets) 

enter image description here

  1. 每 0.1 个刻度
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(0.1))

enter image description here

  1. 将子集更改为字符串以仅包含这些数字的等距刻度
    subsets=["0.0", "0.5", "0.6", "0.7", "0.8", "0.9", "1"]

enter image description here