Python Matplotlib最佳拟合半对数绘图线

Python Matplotlib最佳拟合半对数绘图线,python,matplotlib,Python,Matplotlib,下面(蓝色虚线)是我尝试对数据进行线性回归时得到的结果。它看起来很不对劲(但可能是正确的?)这是图像(不允许我嵌入): 代码如下: 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.l

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

代码如下:

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), '--')

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

然而,一旦拟合完成,需要使用变换函数的逆函数对数据进行反变换

y=log10(x)
的情况下,相反的是
x=10**(y)
,而
y=log(x)
的情况下,相反的是
x=exp(y)


因此,您需要选择其中一种情况。

您不应该将
np.exp
(基数e=2.72)和
np.log10
(基数10)oops混用。那么我应该用什么来代替呢?我应该把它提高到10的幂吗?它似乎无法解决问题。nvm:我只是把它改成了log,而不是log10