我正在编写一个脚本来从csv中绘制图形(“列A”为“ x”,“列B”为“ y”),并以一个或多个“ y”最大值返回“ x”值。
我目前正在使用scipy find_peaks函数来查找最大值,但是对于如何返回“ x”值我有些困惑。目前,我可以在输入文件中输出“ y”值位置的数组,但随后我被卡住了。我对此很陌生,所以很抱歉,如果我以错误的方式处理了这个问题!
import matplotlib.pyplot as plt
import csv
from scipy.signal import find_peaks
x = []
y = []
with open('data.csv','r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
x.append(float(row[0]))
y.append(float(row[1]))
plt.figure(figsize=(10,5))
plt.plot(x,y, marker=' ')
peaks = find_peaks(y, height=100,)
print(peaks)
我正在Spyder中运行它,下面的图像(链接)具有输出。关键部分是这样:
(array([14, 17, 30], dtype=int64), {'peak_heights': array([1000., 700., 300.])})
理想情况下,我想使用第一个数组中的数字从csv文件中查找“ x”值。这可能吗?
答案 0 :(得分:0)
@PaulH的答案实现了我想做的事情。从上面的评论中包括他的解决方案,现在我将其作为脚本:
import matplotlib.pyplot as plt
import csv
from scipy.signal import find_peaks
import numpy
x = []
y = []
with open('data.csv','r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
for row in plots:
x.append(float(row[0]))
y.append(float(row[1]))
plt.figure(figsize=(10,5))
plt.plot(x,y, marker=' ')
peaks = find_peaks(y, height=100,)
### This section is from @PaulH ###
list = numpy.array(x)[peaks[0]]
print(list)
###################################
输出现在包括以下行:
[-1.5 -0.75 2.5 ]
在我的数据集中包含三个最大值的'x'值。
谢谢!