使用stats-command从循环生成辅助数据文件

时间:2016-11-07 00:00:17

标签: 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   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)

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

1 个答案:

答案 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,以便我能更好地了解正在发生的事情。

enter image description here