微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在绘图中的配件上设置限制

如何解决在绘图中的配件上设置限制

我有一个数据图,并对其应用了线性拟合,但是,我不确定为什么,但是拟合线与数据本身相距甚远。我将如何对这条线施加限制,以使其恰好适合我的数据(并且最好使数据也成为图表的焦点!)

下面的图形输出代码

Linear Fitted Data

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]

安培= [77.78630383833547,62.92926582239441,63.84025706577048,55.4890668704381​​65,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.220280471815858、0.5726686031033587、0.5465322281618783、0.5185100682386156、0.575055917739342、0.5681697592593679]]

标注错误,我设法使图形进行了一些更新,但是现在拟合完全失败了。

Graph 2

我也将上面的代码更新为新版本。

解决方法

使用xlimylim

    plt.plot(np.log(ts),amps,"1",ms=5,label="Schmitt Analysis (Log(Amplitude) 
    against Time)")
    
    
    y1,r,*_ = np.polyfit(amps,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(0,10)
    plt.legend()
    
    plt.savefig('A_Schmitt.jpg'

)
,

这里有两个问题-错字和-inf的出现。
首先是错字-您认为合适的原因是将logtsamps分别归因于yx,而反之亦然。
其次,拟合例程不能很好地处理-inf在对数转换的时间数组中的存在。我们可以使用logts[1:]手动排除第一点。

import numpy as np
from matplotlib import pyplot as plt

#recreating your input - seemingly log(ts) is a numpy array
logts = np.asarray([-np.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]

#plot raw data
plt.plot(logts,label="Schmitt Analysis (Amplitude against Log(Time))")

#linear fit excluding the first point that is an outlier
y1,*_ = np.polyfit(logts[1:],amps[1:],full=True)
f1 = np.poly1d(y1)

#get min and max of logts excluding nan and inf values
logtsmin = np.floor(np.nanmin(logts[logts != -np.inf]))
logtsmax = np.ceil(np.nanmax(logts[logts != np.inf]))
#evenly spaced x-values for the fit line plot 
xlogts = np.linspace(logtsmin,logtsmax,1000)
plt.plot(xlogts,f1(xlogts),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(logtsmin,logtsmax)
plt.legend()

plt.show()

样本输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。