Plot GNU绘图-计算峰值数

Plot GNU绘图-计算峰值数,plot,gnuplot,Plot,Gnuplot,我有一个非常大的文本文件,有11列。由于我无法发布全部数据,我已将文本文件上传至公共回购协议,可在以下链接中找到: 有没有办法在Linux中使用GNU plot计算峰值的数量?从上面的文本文件中,我将1st和7th列绘制为x和y列,其中峰值是7th列的变化,这就是我感兴趣的。例如,将下图中的频率峰值数计为10 这里是我正在使用的一个简单的绘图脚本 set key right top set xrange [:10] #show timestamp set xlabel "time in se

我有一个非常大的文本文件,有11列。由于我无法发布全部数据,我已将文本文件上传至公共回购协议,可在以下链接中找到:

有没有办法在Linux中使用GNU plot计算峰值的数量?从上面的文本文件中,我将1st7th列绘制为x和y列,其中峰值是7th列的变化,这就是我感兴趣的。例如,将下图中的频率峰值数计为10

这里是我正在使用的一个简单的绘图脚本

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", \

感谢您的帮助。

这是一个小小的调整,但是这个例子应该会有所帮助:

y2=y1=y0=NaN
stat "data/freq.csv" using (y2=y1,y1=y0,y0=$7,(y1>y2&&y1>y0?y1:NaN)) prefix "data"
现在在变量
data\u records
中,您应该得到第7列中的局部最大值计数

您可以通过

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

取决于要计算峰值的平台的哪一侧

stat
命令变为:

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

Gnuplot用于绘图和小运算,查找信号中的峰值是一项信号处理任务,您需要像gnuoctave这样的东西来完成合理的工作。如果加载
freq.csv
文件并在其上运行
findpeaks()
,并使用
MinPeakDistance
的合理值,则会得到:

我用于生成上述绘图的代码:

y=dlmread('freq.csv','';
[peak_y,peak_x]=findppeak(y(:,7),“MinPeakDistance”,40);
图(y(:,1),y(:,7),y(peak_x,1),peak_y,'.r');

根据您想要的
findpeaks()
可能就足够了,请参阅
help findpeaks
demo findpeaks
,了解您可以调整的其他选项。

不使用Gnuplot。GNU Octave findpeaks()应该能够做到这一点。做信号分析,就像寻找信号中的峰值一样,需要为此类任务设计的工具,例如GNU倍频程。为什么
sin(x)
?亲爱的,我不明白。你能按照问题中的示例代码编辑它吗?谢谢我已经更新了答案。关于sin的第二部分只是为了说明这一点,因为在您的数据片段中,第7列没有局部最大值。但您只是要求一种计数的方法,而不是绘制它们。数据文件中还有另一个怪癖,它是逗号分隔的数据,所以您需要告诉gnuplot:
设置数据文件分隔符',“
默认情况下,gnuplot查找空格,所以您不应该做任何事情。如果您仍然有问题,请通过更新问题发布您想要绘制的数据OK data是特殊的,因为我正在寻找一个峰值,但在您的情况下,您有几个峰值具有相同的值,因此您可以将第一个或第二个
更改为
=
。我已经上传了对答案的评论。
stat 'freq.csv'  using (y2=y1,y1=y0,y0=$7,(y1>=y2&&y1>y0?y1:NaN)) prefix "data"