我有一个数据图,并对其应用了线性拟合,但是,我不知道为什么,但拟合线与数据本身相差甚远。我该如何对这条线施加限制,使它正好适合我的数据(最好使数据也成为图表的焦点!)
图形输出和代码如下:
plt.plot(np.log(ts), amps, "1", ms=5, label="Schmitt Analysis (Amplitude against Log(Time))")
##Plot Linear Fit
y1, r, *_ = np.polyfit(amps, np.log(ts), 1, full=True)
f1 = np.poly1d(y1)
plt.plot(amps, f1(amps), label=f"linear ($\chi^2$ = {r[0]:0.2f})")
plt.xlabel("Log(Time)")
plt.ylabel("Amplitude")
plt.title("Schmitt Analysis (Amplitude against Log(Time))")
plt.xlim(0,10)
plt.ylim(-40,80)
plt.legend()
plt.savefig('A_Schmitt.jpg')
正在使用的实际数据:
log(ts) = [ -inf 2.89037176 3.58351894 3.98898405 4.49980967 4.68213123 4.83628191 4.9698133 5.08759634 5.19295685 5.28826703 5.37527841 5.45532112 5.52942909 5.59842196 5.7235851 5.78074352 5.83481074 5.9348942 6.02586597 6.06842559 6.10924758 6.1484683 6.22257627 6.25766759 6.32435896 6.38687932 6.41673228 6.44571982 6.50128967 6.52795792 6.5539334 6.71901315 6.78219206]
amps = [77.78630383833547, 62.92926582239441, 63.84025706577048, 55.489066870438165, 38.60797989548756, 40.771390484048545, 14.679073842876978, 33.95959972488966, 29.41960790300141, 32.93241034391399, 30.927428194781815, 31.086396885182356, 21.52771899125612, 4.27684299160886, 6.432975528727562, 7.500376934048583, 18.730555740591637, 4.355896959987761, 11.677509915219987, 12.865482314301719, 0.6120306267606219, 12.614420497451556, 2.2025029753442404, 9.447046999592711, 4.0688197216393425, 0.546672901996845, 1.12780050608251, 2.2030852358874635, 2.202804718915858, 0.5726686031033587, 0.5465322281618783, 0.5185100682386156, 0.575055917739342, 0.5681697592593679]
注意到我犯了一个错误,我设法让图表更新了一点,但现在拟合完全失败了。
我也将上面的代码更新为新版本
这里有两个问题-打字错误和存在
-inf
。首先是打字错误-您根据自己的情况将
logts
和amps
分别归因于y
和x
,反之亦然。其次,fit例程无法很好地处理日志转换时间数组中存在的
-inf
。我们可以用logts[1:]
手动排除第一个点样本输出:
使用
xlim
和ylim
相关问题 更多 >
编程相关推荐