以下是我的数据文件示例:
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 for [t in "0 3 6 15 24"] 'data.tsv' using 5:((stringcolumn(2) eq t) ? $4 : 1/0) w p
产生按变量" t"分组的点集。另外,我想用一条线连接每组的质量中心。为此,我有一个带有stats命令的循环(我可以从中获得x和y的平均值):do for [t in "0 3 6 15 24"]{
stats 'data.tsv' using 5:((stringcolumn(2) eq t) ? $4 : 1/0)
...}
我无法弄清楚如何捕获变量STATS_mean_x和STATS_mean_y并将它们的每个t值附加到$ datablock或单独的文件中,以后可以绘制。 (gnuplot 5.0 patchlevel 4)
对不起,如果这只是另一个愚蠢的问题:)我花了很长时间寻找解决方案,但没有找到任何可行的方法。
答案 0 :(得分:1)
您可以在字符串中收集STATS_mean值并将其写入临时文件。然后你可以绘制这个临时文件的内容:
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:我已将plot w p
替换为plot with lp
,以便我能更好地了解正在发生的事情。