Gnuplot中stats命令无法计算统计量,如何修改代码解决?
问题分析与修复方案
原代码执行时stats命令报错,核心原因有三个:
- 数据块索引错误:
$Data是单个完整数据块,没有定义V1、V2子块,但代码中使用index word(DATA_BLOCKS, i)指定索引,导致找不到对应数据。 - 分组匹配逻辑错误:循环变量
j是1、2、3的序号,代码中用column(GROUP_COLUMNS) == j匹配分组,但实际分组值是2、3、4,两者不匹配,过滤后无有效数据点。 - 未处理无数据场景:当
stats未找到有效数据时,STATS_records变量未定义,直接打印会触发错误。
具体修改内容
- 移除
DATA_BLOCKS相关的循环和index参数,直接使用完整的$Data数据块; - 分组判断改为匹配
GROUP_LABELS中的实际数值:column(GROUP_COLUMNS) == int(word(GROUP_LABELS, j)); - 提前初始化
STATS_records为0,避免未定义变量报错。
修正后的完整代码
reset session $Data <<EOD AK lA rA lH rH 4 8820 3861 4954.7 2093.5 4 6294.4 2604.3 4251.9 1733.1 4 8671.5 3271.7 4912 2075.7 4 9447.3 3454.1 5054.1 2220.5 4 8070.9 2919.6 4434.8 1920.8 2 8951.2 3548.1 4838.1 1946.2 4 7809.1 2573.1 3913 1723.8 4 7985.3 3228.1 4816.9 1897 2 9239 3970.7 5011.8 2161 2 7549.9 3104.6 3854.8 1681.7 2 8706.2 3167.6 4713.1 2191.5 4 10121.5 3890.7 5599.5 2377.3 4 9153.3 3114.2 4890.2 1930 4 8327.5 3741.6 4793.4 2140.1 3 7091.6 3013.2 4053.9 2224.8 3 6878.2 3298.8 4238.6 1900 2 6940.4 2751.3 3810.6 1581.8 2 7232.9 3296.6 4342 1540.1 3 8722 3851.3 5646.5 2213 4 7723.4 3541.9 4588.6 2380.7 2 8272.8 3184.3 5262.9 1914.6 2 6798.3 2685.9 3208 1665.5 4 7685.6 3132.5 3486.7 1457.2 2 6820.9 2677.6 4388.6 2223 4 6980.2 3062.4 4375.9 1681.9 EOD LABELS = 'lA rA lH rH' GROUP_LABELS = '2 3 4' GROUP_COLUMNS = 'AK' do for [selected_label in LABELS] { do for [j=1:words(GROUP_LABELS)] { # 初始化变量避免未定义 STATS_records = 0 stats $Data using (((column(GROUP_COLUMNS) == int(word(GROUP_LABELS, j))) ? 1.0 : NaN) * column(selected_label)) print sprintf("标签%s,分组%s的记录数:%d", selected_label, word(GROUP_LABELS, j), STATS_records) } pause -1 }
内容的提问来源于stack exchange,提问作者magfan
相关产品推荐
相关产品推荐

