将数据集值读入gnuplot变量(X系列的开头)

sda*_*aau 9 gnuplot

我原本以为这可能与gnuplot相同- X系列的开始 - Stack Overflow - 但我认为这稍微更具体一些.

既然我有兴趣找到"X系列的开头",可以这么说 - 我会试着用一个例子来澄清; 说你有这个脚本:

# generate data
system "cat > ./inline.dat <<EOF\n\
10.0 1 a 2\n\
10.2 2 b 2\n\
10.4 3 a 2\n\
10.6 4 b 2\n\
10.8 5 c 7\n\
11.0 5 c 7\n\
EOF\n"

# ranges 
set yrange [0:8]
set xrange [0:11.5]

plot "inline.dat" using 1:2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

如果你绘制它,你会注意到数据从x轴上的10开始:

gnuplot的-startx.png

现在,当然你可以调整xrange- 但有时你会对"从0开始"的"相对位置"感兴趣,可以这么说.因此,人们希望看到数据在x轴上"向左移动",因此它从0开始.由于我们知道数据从10.0开始,我们可以明确地从第一列中减去该数据:

plot "inline.dat" using ($1-10.0):2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

......这基本上就是诀窍.

但是说你不想plot上面的命令中明确指定"10.0" ; 然后 - 知道它是已经加载的数据的第一列的第一个元素,人们希望有一种方法以某种方式在变量中读取这个值 - 比如说,使用类似下面的伪代码:

varval = "inline.dat"(1,1) # get first element of first column in variable
plot "inline.dat" using ($1-varval):2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

......并且使用类似的东西,人们不必在plot命令中手动指定这个"x offset"值.

所以 - 改写 - 有没有办法读取x系列的开头(数据集中给定列的第一个值)作为变量gnuplot

Sun*_* Jo 6

两种方式:

1.首先绘制函数并让gnuplot告诉最小x值:

plot "inline.dat" using 1:2 with impulses linewidth 2

xmin = GPVAL_DATA_X_MIN
plot "inline.dat" using ($1-xmin):2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

2.使用外部脚本确定最小x值:

xmin = `sort -nk 1 inline.dat | head -n 1 | awk '{print $1}'`
plot "inline.dat" using ($1-xmin):2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)