당신은 모든 피크를 얻을 수 scipy
argrelextrema를 사용하여 최대를 해결 한 다음 플롯 할 피크 마스크 배열을 구축 할 수 있습니다. 플롯 코드 : 이것은 별도의 피크를 결정하는 것을 해결하기 위해 mincutoff 같은 것들을 사용하여 데이터를 기준으로하면 결과는 다음입니다
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
#Setup and plot data
fig, ax = plt.subplots(1,2)
y = np.array([0,0,0,0,0,6.14,7.04,5.6,0,0,0,0,0,0,0,0,0,0,0,16.58,60.06,99.58,100,50,0.,0.,0.])
x = np.linspace(3.92,161,y.size)
ax[0].plot(x,y)
#get peaks
peaks_indx = argrelextrema(y, np.greater)[0]
peaks = y[peaks_indx]
ax[0].plot(x[peaks_indx],y[peaks_indx],'o')
#Get maxpeak
maxpeak = 0.
for p in peaks_indx:
print(p)
if y[p] > maxpeak:
maxpeak = y[p]
maxpeak_indx = p
#Get mask of data around maxpeak to plot
mincutoff = 0.
indx_to_plot = np.zeros(y.size, dtype=bool)
for i in range(maxpeak_indx):
if y[maxpeak_indx-i] > mincutoff:
indx_to_plot[maxpeak_indx-i] = True
else:
indx_to_plot[maxpeak_indx-i] = True
break
for i in range(y.size-maxpeak_indx):
if y[maxpeak_indx+i] > mincutoff:
indx_to_plot[maxpeak_indx+i] = True
else:
indx_to_plot[maxpeak_indx+i] = True
break
ax[1].plot(x[indx_to_plot],y[indx_to_plot])
plt.show()
,
UPDATE를 완벽하게 제어 할 줄 것이다 오직 가장 큰 피크. 난 아직도 알고리즘이 제대로 작동하기 위해 두 피크 음모를 꾸미고 제안
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
#Setup and plot data
y = np.array([0,0,0,0,0,6.14,7.04,5.6,0,0,0,0,0,0,
0,0,0,0,0,16.58,60.06,99.58,100,50,0.,0.,0.])
x = np.linspace(3.92,161,y.size)
#get peaks
peaks_indx = argrelextrema(y, np.greater)[0]
peaks = y[peaks_indx]
#Get maxpeak
maxpeak = 0.
for p in peaks_indx:
print(p)
if y[p] > maxpeak:
maxpeak = y[p]
maxpeak_indx = p
#Get mask of data around maxpeak to plot
mincutoff = 0.
indx_to_plot = np.zeros(y.size, dtype=bool)
for i in range(maxpeak_indx):
if y[maxpeak_indx-i] > mincutoff:
indx_to_plot[maxpeak_indx-i] = True
else:
indx_to_plot[maxpeak_indx-i] = True
break
for i in range(y.size-maxpeak_indx):
if y[maxpeak_indx+i] > mincutoff:
indx_to_plot[maxpeak_indx+i] = True
else:
indx_to_plot[maxpeak_indx+i] = True
break
#Plot just the highest peak
plt.plot(x[indx_to_plot],y[indx_to_plot])
plt.show()
... 난 당신이 임의의 피크를 식별 항상 아마 지저분한 데이터 사소한 아니라고 찾을 것이라 생각합니다.
"그래프를 작성하고 가장 낮은 피크를 버릴 때 가장 높은 피크 만 선택"은 무엇을 의미합니까? 그래프에서 가장 높은 피크를 찾았습니다. 당신이하고 싶은 다음 단계는 정확히 무엇입니까? –
입력은 데이터 포인트 세트 (x, y)입니다. 그래프를 보면 여러 개의 피크가 나타납니다. 그러나 그래프에만 단일 피크와 가장 높은 피크, 즉 출력이 무엇인지, 데이터 포인트에서 가장 높은 피크 그래프가 있으면 좋겠어요! 감사합니다 – aBiologist
얻은 플롯의 스크린 샷을 첨부 할 수 있습니까? 적절한 데이터/출력이 없으면 문제를 재현하는 것이 실제로 불가능합니다. –