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
,以便我能更好地看到发生了什么