【问题标题】:Plotting x axis with unequally spaced ticks using matplot使用 matplotlib 绘制具有不等间距刻度的 x 轴
【发布时间】:2021-04-09 12:34:44
【问题描述】:

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

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()

从图中可以看出,点 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]。谁能帮帮我?

谢谢!

【问题讨论】:

  • 到底是什么问题?
  • @iacob 我想要一个具有 x 值 (0, 0.5, 0.6, 0.7, 0.8, 0.9, 1) 的图表我已经通过绘制而不是其他 x 值 (0.0, 0.2, 0.4, 0.6、0.8、1.0)。
  • 为了清楚起见:你想保持图表不变,只是将刻度线的位置更改为数据点的位置吗?或者,您是否希望所有数据点的间距相等,即使前两个实际上相距 0.5?
  • 你可以做ax.set_xticks(subsets) 只在这些位置有刻度。或ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(0.1)) 每隔0.1 有一个刻度。或者将 subsets 更改为字符串,以仅具有这些数字的等距刻度。
  • 那是完美的@JohanC,谢谢。

标签: python matplotlib


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多