在 gnuplot 中比较数据并绘图

在 gnuplot 中比较数据并绘图

我拥有的数据在文本文件中采用以下格式:

#REY2_0  REY1_0  alpha1     alpha2   omega

100      200    (-0.1,0)    (1,0)   (0.94379237,-0.052310783)

值列表很长。我需要找到 REY2_0 和 REY1_0 的值,其中 omega 的第二部分值为 0(在上面的例子中,第二部分是指值 -0.052310783)。我可以使用 gnuplot 执行此搜索操作并绘制 REY2_0 v/s REY1_0 吗?此外,由于大多数值并不完全为零,我还想获取 REY2_0 和 REY1_0 的值,其中前三位数字为零(即其形式为 0.000xxxxxx)

答案1

让我们提前清理你的数据(。linux)命令sed是一个不错的选择(column -t会给出一个很好的格式)

  sed 's/[(,)]/\t/g' data.dat | column -t > data02.dat

我们假设您的原始文件名为data.dat,我们将创建一个名为 的新文件data02.dat。新文件将有 8 列。在格努普特您可以访问单个列,并选择using ($1):($8)使用第一列的数据作为X以及第八列的数据

现在诡计:定义一个函数来回答如果满足条件,则使用加法,如果不满足条件,则使用加法。这是因为 gnuplot 将跳过值是无限的。所以格努普特你可以写

myf(y,t)= t == 0 ? y : 1.0/0.
plot 'data2.dat' us ($1):(myf($2,$8))

当然,您可以采用更紧凑的方式来执行此操作,但在我看来,这样写更容易理解。

对于第二个问题,可以在函数中设置不同的条件

myf2(x,y)= ( 0.001 > abs(x) ) && ( 0.001 > abs(y) ) ? y : 1.0/0
plot 'data2.dat' us ($1):(myf2($1,$2))

其中abs(x)返回一个数字的绝对值(没有符号的数字)。

注意:好吧,我很懒,而不是using我只写usGnuplot明白它。

相关内容