使用smooth freq
绘图时,如何获得与y-max对应的x位置?给出一组数据:
#data.dat
7.20051
7.65602
7.87180
8.64177
8.92575
8.65913
8.98814
9.45199
8.40334
8.75102
8.65440
8.21088
8.59719
8.23259
8.34794
8.41658
7.67074
8.44228
8.54347
9.04961
9.18177
....
我尝试了以下内容:
gnuplot
binwidth=0.1
bin(x,width)=width*floor(x/width) + binwidth/2.0
set terminal unknown
plot 'data.dat' u (bin($1,binwidth)):(1.0) smooth freq w l
show variables all
GPVAL_Y2_MAX = 6051.0是我想要的最大y值(峰值),但是如何获得相应的x值?使用stats
不允许使用smooth freq
,我不想将数据预处理到容器中。有没有办法使用gnuplot获取x值?
答案 0 :(得分:2)
您实际上可以使用gnuplot预处理该数据。我们假设您的数据类似于
7.20051
7.65602
7.87180
8.64177
8.92575
8.65913
8.98814
9.45199
8.40334
8.75102
8.65440
8.21088
8.59719
8.23259
8.34794
8.41658
7.67074
8.44228
8.54347
9.04961
9.18177
然后运行脚本的第一部分
binwidth=0.1
bin(x,width)=width*floor(x/width) + binwidth/2.0
plot 'data.dat' u (bin($1,binwidth)):(1.0) smooth freq w l
产生
我们在8.45和8.65处看到3的峰值。
现在,我们不能使用stats命令在提供的数据上找到它,但是我们可以在一些预处理数据上使用它,gnuplot可以在这里进行预处理。
set table "tempfile"
plot 'data.dat' u (bin($1,binwidth)):(1.0) smooth freq
unset table
set table命令使gnuplot将绘图分析推送到文件,而不是用它绘制绘图。结果是文件 tempfile 现在包含分箱数据:
# Curve 0 of 1, 14 points
# Curve title: "$k u (bin($1,binwidth)):(1.0)"
# x y type
7.25 1 i
7.65 2 i
7.85 1 i
8.25 2 i
8.35 1 i
8.45 3 i
8.55 2 i
8.65 3 i
8.75 1 i
8.95 2 i
9.05 1 i
9.15 1 i
9.45 1 i
8.65 1 u
请注意最后一列中的 i 和 u 。 i 表示范围数据, u 表示超出范围数据。平滑的选项几乎总是添加一个最终点,如超出范围。我们只需告诉stat命令忽略那个。
stat "tempfile" u 1:(strcol(3) eq 'i'?$2:1/0)
这里我们使用stat命令仅在第三列(由strcol函数读取为字符串)等于 i 时使用第一列和第二列分析临时文件。 / p>
现在,STATS_max_y和STATS_pos_max_y变量的值分别为3和8.65。这表明第二个峰值。