Gnuplot 使用stats命令从循环生成辅助数据文件

Gnuplot 使用stats命令从循环生成辅助数据文件,gnuplot,Gnuplot,以下是我的数据文件示例: Opt1 0 A -1.3 3.9 Opt1 0 B -1.3 3.9 Opt3 0 B -1.4 3.9 Opt1 3 A -2.4 14.7 Opt2 3 A -2.3 13.2 Opt3 3 A -2.5 17.2 Opt1 6 A -2.9 21 Opt3 6 A -2.9 25 Opt3 6

以下是我的数据文件示例:

Opt1    0   A   -1.3    3.9
Opt1    0   B   -1.3    3.9
Opt3    0   B   -1.4    3.9
Opt1    3   A   -2.4    14.7
Opt2    3   A   -2.3    13.2
Opt3    3   A   -2.5    17.2
Opt1    6   A   -2.9    21
Opt3    6   A   -2.9    25
Opt3    6   B   -2.9    25.3
Opt1    15  B   -4.2    22.4
Opt3    15  A   -4.1    24.8
Opt3    15  B   -4.2    25.5
Opt1    24  B   -5.9    23.8
Opt2    24  B   -5.3    20.1
Opt3    24  A   -5.6    22.8
Opt3    24  B   -5.7    23.2
基本上是X,Y数据,还有一些额外的列用于排序

这是我的plot命令:

使用5:((stringcolumn(2)eq t)$4:1/0)w p绘制[t in“03 6 15 24”]“data.tsv”的曲线图

它生成按变量“t”分组的点集。另外,我想用一条线连接每组的重心。为此,我有一个带有stats命令的循环(从中我可以得到x和y的平均值):
do For[t in“03 6 15 24”]{
使用5:((stringcolumn(2)eq t)统计“data.tsv”?$4:1/0)
…}

我无法理解的是如何捕获变量STATS_mean_x和STATS_mean_y,并将它们附加到$datablock或单独的文件中,这些文件稍后可以打印出来。(gnuplot 5.0补丁级别4)


抱歉,如果这只是另一个愚蠢的问题:)我花了很长时间寻找解决方案,但没有找到任何可行的方法

您可以收集字符串中的统计值并将其写入临时文件。然后可以打印此临时文件的内容:

t_string = "0 3 6 15 24"

temp_data = ""
do for [t in t_string]{
  stats 'data.tsv' using 5:((stringcolumn(2) eq t) ? $4 : NaN)
  temp_data = temp_data.sprintf("%f %f\n", STATS_mean_x, STATS_mean_y)
}

set print "temp.dat"
print temp_data
unset print

set terminal png
set output "graph.png"
plot for [t in t_string] 'data.tsv' using 5:((stringcolumn(2) eq t) ? $4 : NaN) title t w lp, \
     'temp.dat' title "average" w lp
set output
PS:我已将您的
绘图w p
替换为
绘图与lp
,以便我能更好地看到发生了什么