我想知道是否有一种简单的方法,使用Gnuplot从数据文件data.txt中获取最后一个点,并将值存储在变量中。根据这个问题accessing the nth datapoint in a datafile using gnuplot,我知道可以使用stats和GP_VAL_DATA_X_MAX变量来获取X-Value,但是是否有一个简单的技巧来获取相应的y-value?
第三种可能性是在绘图过程中将每个纵坐标值写入同一个用户变量中。最后一个值保留下来:
plot dataf using 1:(lasty=$2)
print lasty
plot 'data.txt'
plot[GPVAL_DATA_X_MAX:] 'data.txt'
show variable GPVAL_DATA_Y_MAX
或者
plot 'data.txt'
plot[GPVAL_DATA_X_MAX:] 'data.txt'
print GPVAL_DATA_Y_MAX
如果你知道你的文件是如何组织的(分隔符,尾部空行),并且你可以访问标准的Unix工具,你可以使用Gnuplot的system
命令。例如,如果你没有尾随换行符,并且你的值是用制表符分隔的,你可以执行以下操作:
x = system("tail -n 1 data.txt | cut -f 1")
y = system("tail -n 1 data.txt | cut -f 2")
(tail
用于获取文件的最后 n
行。cut
提取列 f
。)
请注意,如果通过这种方式获取,则 x
和 y
是字符串,但对于大多数应用程序来说,这并不重要。如果必须进行转换,仍然可以加零。
让我添加第四个解决方案,因为:
非常精确地说,OP询问的是最后一个x值和相应的y值。
@TomSolid的解决方案将返回最大的x值及其相应的y值。
但是,严格来说,除非x数据按升序排序,否则最大值可能不一定是最后一个值。
下面的示例结果将是10
和14
,而不是8
和18
。
@Karl的解决方案将返回最后一个y值以及绘制某些内容,尽管您可能只想提取该值并绘制其他内容。理想情况下,您可以结合提取和绘图。
@Wrzlprmft的解决方案使用Linux函数tail
,这不是平台无关的(对于Windows,您首先必须安装此类实用程序)
因此,这里是一个解决方案:
脚本:
### get the last x-value and corresponding y-value
reset session
$Data <<EOD
1 11
2 12
3 13
10 14
5 15
6 16
7 17
8 18
EOD
stats $Data u (lastX=$1,lastY=$2) nooutput
print lastX, lastY
### end of script
结果:
8.0 18.0
使用 1:(latsy=$2)
吗? - Tom Solid