Matplotlib在semilogx图上分布标记

问题描述 投票:0回答:1

我想在Matplotlib中以semilogx刻度绘制曲线。我有两个大小为17874的矢量fprtpr。我想在同一条曲线上显示标记。但由于积分太多,我使用了markevery=0.1,如图所示。来自matplotlib页面的this example。但是,在这种情况下使用markevery在semilog图中没有任何标记(右图):

fig = plt.figure(figsize=(12, 4))
ax = fig.add_subplot(1, 2, 1)
plt.plot(fpr, tpr, marker='o', markevery=0.1)
ax = fig.add_subplot(1, 2, 2)
plt.semilogx(fpr, tpr, marker='o', markevery=0.1) 
plt.show()

enter image description here

然后,我尝试使用切片对象。如下图所示,左图中的标记均匀分布,但在右半图中,标记仅显示在曲线的一半。所以我想知道是否有任何方法可以解决此问题的可变切片间隔。

ROC plot on a normal scale and the semilogx

我目前的代码如下:

fig = plt.figure(figsize=(12, 4))
ax = fig.add_subplot(1, 2, 1)
plt.plot(fpr, tpr, marker='o', markevery=slice(0, 20000, 1000))
ax = fig.add_subplot(1, 2, 2)
plt.semilogx(fpr, tpr, marker='o', markevery=slice(0, 20000, 1000))
plt.show()
python-3.x matplotlib plot slice
1个回答
2
投票

我怀疑数据中似乎接近于零的值实际上是零。由于零的对数未定义,因此无法在对数刻度上绘制该点。缺少图中的第一个点虽然不允许计算markevery的间距。 (就像在“计算NaN1的平均值”中一样,这是不可能的。)

一个解决方案当然是忽略这一点,在调用对数刻度的绘图函数时无论如何都无法绘制。

plt.semilogx(fpr[1:], tpr[1:], marker='o', markevery=0.1) 
© www.soinside.com 2019 - 2024. All rights reserved.