【问题标题】:Matplotlib semilog plot line of best fit最佳拟合的 Matplotlib 半对数图线
【发布时间】:2026-01-08 08:15:02
【问题描述】:

下面(蓝色虚线)是我尝试对数据进行线性回归时得到的结果。它看起来很不对劲(但也许它是正确的?)这是图像(不允许我嵌入):

这里是代码:

mm, cs, err = get_cols(data)
a = np.asarray(mm, dtype=float)
b = np.asarray(cs, dtype=float)
ax.errorbar(a, b, xerr=None, yerr=err, fmt='o', c='b', label='Detection Rate')
logB = np.log10(b)
m, y0 = np.polyfit(a, logB, 1)
ax.plot(a, np.exp(a*m+y0), '--')

【问题讨论】:

  • 你不应该混合np.exp(基数 e = 2.72)和np.log10(基数 10)
  • 哎呀。那我应该用什么代替呢?我应该把它提高到 10 次方吗?它似乎无法解决问题。 nvm:我只是将其更改为 log 而不是 log10

标签: python matplotlib


【解决方案1】:

matplotlib 的对数刻度默认使用以 10 为底的对数。因此,使用np.log10(b) 转换数据以进行拟合是有意义的。

但是,一旦完成拟合,就需要使用变换函数的逆函数对数据进行反向变换。

如果是y = log10(x),则相反的是x = 10**(y),而
y = log(x) 的情况下,倒数是x = exp(y)

所以你需要决定其中一种情况。

【讨论】: