GNU图 - 计算峰值数

时间:2016-11-24 11:34:45

标签: plot gnuplot

我有一个非常庞大的文本文件,包含11列。由于我无法发布整个数据,因此我已将文本文件上传到公共仓库,可在此链接中找到:http://s000.tinyupload.com/?file_id=59483318155908771897

有没有办法在Linux中使用GNU plot计算峰值数?从上面的文本文件中,我将第一第七列绘制为x和y列,其中峰值是第7个列的变体,这就是我感兴趣的内容。例如,计算频率峰值的数量,如下图所示。

这是我正在使用的简单绘图脚本。

set key right top
set xrange [:10]


#show timestamp
set xlabel "time in sec"
set ylabel "Freq"


set title "Testing"
plot "data/freq.csv" using 1:7 title "Freq", \

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

Gnuplot用于绘图和次要算术,在信号中找到峰值是一个信号处理任务,你需要像GNU Octave那样做一个合理的工作。如果您加载freq.csv文件并在findpeaks()上运行MinPeakDistance并使用y = dlmread('freq.csv', ' '); [peak_y, peak_x] = findpeaks(y(:,7), "MinPeakDistance", 40); plot(y(:,1), y(:,7), y(peak_x,1), peak_y, '.r'); 的合理值,则可获得以下内容:

Found most peaks

我用来生成上述情节的代码:

findpeaks()

根据您的需要help findpeaks可能已足够,请参阅demo findpeaksinout了解您可以调整的其他选项。

答案 1 :(得分:1)

这有点调整,但这个例子应该有所帮助:

y2=y1=y0=NaN
stat "data/freq.csv" using (y2=y1,y1=y0,y0=$7,(y1>y2&&y1>y0?y1:NaN)) prefix "data"

现在,在变量data_records中,您应该获得第7列中的本地最大数量的COUNT。

您可以通过

打印
print data_records

要了解更多,我在这里发布一个窦功能的例子

set table 'test.dat'
plot sin(x)
unset table
x2=x1=x0=NaN 
y2=y1=y0=NaN
plot 'test.dat' using (x2=x1,x1=x0,x0=$1,x1):(y2=y1,y1=y0,y0=$2,(y1>y2&&y1>y0?y1:NaN)) w p,  'test.dat' u 1:2 w l

应绘制窦和最大点。

如果有几个点具有相同的值:

x2=x1=x0=NaN
y2=y1=y0=NaN
plot 'freq.csv' u 0:7 w l, '' using (x2=x1,x1=x0,x0=$0,x1):(y2=y1,y1=y0,y0=$7,(y1>=y2&&y1>y0?y1:NaN)) w p

plot 'freq.csv' u 0:7 w l, '' using (x2=x1,x1=x0,x0=$0,x1):(y2=y1,y1=y0,y0=$7,(y1>y2&&y1>=y0?y1:NaN)) w p

取决于您想要计算峰值

的高原哪一侧

stat命令变为:

stat 'freq.csv'  using (y2=y1,y1=y0,y0=$7,(y1>=y2&&y1>y0?y1:NaN)) prefix "data"