Gnuplot: 将最后一个数据点存储为变量

7
我想知道是否有一种简单的方法,使用Gnuplot从数据文件data.txt中获取最后一个点,并将值存储在变量中。根据这个问题accessing the nth datapoint in a datafile using gnuplot,我知道可以使用stats和GP_VAL_DATA_X_MAX变量来获取X-Value,但是是否有一个简单的技巧来获取相应的y-value?
4个回答

5

第三种可能性是在绘图过程中将每个纵坐标值写入同一个用户变量中。最后一个值保留下来:

 plot dataf using 1:(lasty=$2)
 print lasty

1
你的意思是 使用 1:(latsy=$2) 吗? - Tom Solid

4
如果您想使用Gnuplot,可以:
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

3

如果你知道你的文件是如何组织的(分隔符,尾部空行),并且你可以访问标准的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。)

请注意,如果通过这种方式获取,则 xy 是字符串,但对于大多数应用程序来说,这并不重要。如果必须进行转换,仍然可以加零


这个答案也适用于任何分隔符,例如 cut -d ' ' 1。 - Jack

1

让我添加第四个解决方案,因为:

  • 非常精确地说,OP询问的是最后一个x值和相应的y值。 @TomSolid的解决方案将返回最大的x值及其相应的y值。 但是,严格来说,除非x数据按升序排序,否则最大值可能不一定是最后一个值。 下面的示例结果将是1014,而不是818

  • @Karl的解决方案将返回最后一个y值以及绘制某些内容,尽管您可能只想提取该值并绘制其他内容。理想情况下,您可以结合提取和绘图。

  • @Wrzlprmft的解决方案使用Linux函数tail,这不是平台无关的(对于Windows,您首先必须安装此类实用程序)

因此,这里是一个解决方案:

  • 平台无关且仅限于gnuplot
  • 返回最后一个x值和相应的y值
  • 不创建任何虚拟图

脚本:

### 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接