尽管其他线程都在讨论寻找基线并将其从数据中减去的方法,但这些线程仅在一张图上进行了基线并使用了某种拟合方法。我的应用程序是相似的,但有所不同,它们的代码不适用于我的应用程序。本质上,我想获取原始数据,形成基线,从基线中减去原始数据,获取每个数据帧的最大值并绘制最大值。对我而言,目前最大的问题是能够形成一个可以在每个数据帧(有160个数据帧)中循环的基线。
因此,我尝试了使用更复杂的拟合或算法的其他方法,但是它们都不起作用或太难以至于无法在我的简单图形中实现。到目前为止,我已经能够找到并绘制所有160个最大值。我需要帮助的是减去背景,使最大值彼此更一致。
filestoprocess = []
peak 1 = []
for filename in filestoprocess:
dfspectra = pd.read_csv(filename, skiprows = 13, delimiter = '\t', header = None, names = ['Wavelength (nm)','Absorbance'])
ymax1 = np.max(dfspectra['Absorbance'][162:218])
peak1.append(ymax1)
time = range(0,160)
x = np.array(time)
ax.plot(x, peak1)
这是我到目前为止的代码。它只是将最大值放入数组并绘制数组。我不知道如何开始制作另一个基线,从每个数据帧中减去它,然后绘制这些最大值。
由于某些原因,我无法上传剧情。但这仅仅是具有高斯形状的平坦的吸收光谱。我不知道基线减去是否需要某种高斯拟合。但是我希望基线只是我所拥有光谱的一个更稳定,更平坦的版本,这将有助于标准化最大值。
编辑*:
这里有我在另一个尝试过的线程中看到的代码,但不确定我是否正确使用了它。我不知道它是否适用于我的应用程序
def baseline_als(y, lam, p, niter=10):
L = len(y)
D = sparse.csc_matrix(np.diff(np.eye(L), 2))
w = np.ones(L)
for i in xrange(niter):
W = sparse.spdiags(w, 0, L, L)
Z = W + lam * D.dot(D.transpose())
z = spsolve(Z, w*y)
w = p * (y > z) + (1-p) * (y < z)
return z