Bash 如何在gnuplot中绘制一个从y数据中自动减去最小值的绘图?

Bash 如何在gnuplot中绘制一个从y数据中自动减去最小值的绘图?,bash,gnuplot,Bash,Gnuplot,我正在绘制gnuplot中大量文件的创建时间,以查看它们是否在时间上以线性方式创建(不是) 这是我的密码: #!/bin/bash stat -c %Y img2/*png > timedata echo "set terminal postscript enhanced colour set output 'file_creation_time.eps' plot 'timedata'" | gnuplot 我遇到的问题是,y数据是自unix启动时间以来的创建时间(以秒为单位),因

我正在绘制gnuplot中大量文件的创建时间,以查看它们是否在时间上以线性方式创建(不是)

这是我的密码:

#!/bin/bash

stat -c %Y img2/*png > timedata

echo "set terminal postscript enhanced colour
set output 'file_creation_time.eps'
plot 'timedata'" | gnuplot
我遇到的问题是,y数据是自unix启动时间以来的创建时间(以秒为单位),因此绘图的y轴上只有1.333…e+09。我希望将第一个文件的创建时间缩放为零,以便相对创建时间是可读的

我在许多数据绘图上下文中遇到了这个问题,因此我希望能够在gnuplot中实现这一点,而不是求助于awk或某些实用程序来预处理数据

我知道第一次是最小的,因为文件是按顺序命名的,所以有没有办法访问文件中的第一个元素,比如

`plot 'data' using ($1-$1[firstelement])`

Gnuplot接受unix命令,因此可以说

gnuplot> plot "< tail -3 test.dat" using 1:2 with lines
gnuplot>使用1:2和行绘制“
以便只绘制最后三行。你可以用这样的东西来达到你的目的。此外,如果你想绘制,让我们假设从第1000行到第2000行

plot "<(sed -n '1000,2000p' filename.txt)" using 1:2 with lines 

plot“我想你可以做这样的事情…(以下内容未经测试,但我认为它应该可以工作…)。基本上,你必须打印文件两次——第一次通过gnuplot获取数据集的统计信息。第二次通过,你使用第一次运行时发现的内容来绘制你真正想要的内容

set terminal unknown
plot 'datafile' using 1:2
set terminal post enh eps color
set output 'myfile.eps'
YMIN=GPVAL_Y_MIN
plot '' u 1:($2-YMIN)
如果您有gnuplot4.6,那么可以使用
stats
命令执行相同的操作。

编辑似乎您希望第一个点提供偏移量(对不起,误读了问题)

如果希望第一个点提供偏移量,可以执行以下操作(同样,未经测试——需要gnuplot>=4.3):


我发现了一个相关的stackoverflow问题,并利用其中一个答案中的awk脚本:

#!/bin/bash

stat -c %Y img2/*png > timedata

echo "set terminal postscript enhanced colour
set output 'file_creation_time.eps'
unset key
set xlabel 'file number'
set ylabel 'file creation time (after first)'
plot \"<awk '{if(NR==1) {shift = \$1} print (\$1 - shift)}' timedata\"" | gnuplot
但是gnuplot(我的版本是4.4.2)没有正确地找到最小值。它非常接近;它看起来像是以y范围的最小值为0的方式绘制的:

这并不能完全回答我的问题——我想从列中的每个值中减去一个常量值。不过,我会尝试利用gnuplot执行UNIX命令的能力。@AndyRasmussen也许您可以将最低值存储在变量中,并使用($1-$var)使用
@Bernhard我想问题是如何找到
$var
(在gnuplot中,它只是
var
而不是
$var
——我想
$var
会给你数据
var
列中的值……你是对的,只是我不知道它是如何完成的。你能像绘图一样将文件转换成变量吗?@Bernhard是的,当gnuplot绘图时,它会提供一些基本信息。)ering——诀窍是绘制到一个空终端,然后使用gnuplot收集的信息(参见上面的答案)。哦,你想让第一个点提供偏移量。我现在明白了。我发布了一个更新的答案,它不依赖于POSIX兼容性——尽管我还没有测试过。我想知道它是否有效(它使用了一个我在gnuplot 4.4中没有花太多时间使用的功能)当然,没问题。很高兴能提供帮助。这个问题与我不久前遇到的问题几乎相同,所以我将它链接到这里:……干杯!
#!/bin/bash

stat -c %Y img2/*png > timedata

echo "set terminal postscript enhanced colour
set output 'file_creation_time.eps'
unset key
set xlabel 'file number'
set ylabel 'file creation time (after first)'
plot \"<awk '{if(NR==1) {shift = \$1} print (\$1 - shift)}' timedata\"" | gnuplot
plot 'timedata'
YMIN=GPVAL_Y_MIN
plot '' u ($1-YMIN)