Matrix gnuplot从统计矩阵中给出错误的结果

Matrix gnuplot从统计矩阵中给出错误的结果,matrix,statistics,gnuplot,Matrix,Statistics,Gnuplot,假设我有一个包含以下内容的文件data.dat: Days 1 2 4 6 10 15 20 30 Group 01 37.80 30.67 62.88 86.06 26.24 98.49 65.42 61.28 Group 02 38.96 72.99 38.24 74.11 39.54 91.59 81.14 91.22 Group

假设我有一个包含以下内容的文件
data.dat

Days          1       2       4       6      10      15      20      30
Group 01    37.80   30.67   62.88   86.06   26.24   98.49   65.42   61.28
Group 02    38.96   72.99   38.24   74.11   39.54   91.59   81.14   91.22
Group 03    82.34   75.25   82.58   28.22   39.21   81.30   41.30   42.48
Group 04    75.52   42.83   66.80   20.50   94.08   74.78   95.09   53.16
Group 05    89.32   56.78   30.05   68.07   59.18   94.18   39.77   67.56
Group 06    70.03   78.71   37.59   60.55   46.40   82.73   67.34   93.38
Group 07    67.83   88.73   48.01   62.19   49.40   67.68   25.97   58.98
Group 08    61.15   96.06   59.62   39.42   60.06   94.18   76.06   32.02
Group 09    65.61   72.39   54.07   92.79   56.58   39.14   81.81   39.16
Group 10    59.65   77.81   40.51   68.49   66.15   80.33   87.31   42.07
最终目的是使用
直方图聚集
创建直方图
除了图形之外,我还需要
data.dat
中的一些值,例如
size\u x
size\u y
min
max
平均值
。为了完成我使用的最后一项任务

set datafile separator tab
stats 'data.dat' skip 1 matrix
总产出为:

* MATRIX: [9 X 10]
  Minimum:            0.0000 [ 0 0 ]
  Maximum:           98.4900 [ 6 0 ]
  Mean:              56.0549
size\u x
size\u y
值正确–
9列
10行
–但
min
值不正确。
这是因为第一列是字符串类型

当我包含
每个

set datafile separator tab
stats 'data.dat' skip 1 matrix every ::1
要跳过第一列,汇总输出为:

* MATRIX: [9 X 8] 
  Minimum:           20.5000 [ 0 3 ]
  Maximum:           98.4900 [ 5 0 ]
  Mean:              63.0617
这一次
min
max
的值是正确的,但是
size_y
(显示
8
,预期
9
)和
min
(预期
[3]
)中的
索引
不正确


发生了什么事?我犯了一些错误?我没有注意到什么?

程序试图从每行的第一个字段中读取一个值,看到“Group xx”,最后为该条目填入0。您需要告诉它跳过第一列

修改后的答案

我认为这里有一个bug,以及文档和实际实现之间的混淆。由
every
选择器实现的矩阵行和列的索引从0到N-1,这与C语言数组一样。文档错误地说明或至少暗示第一行和第一列是矩阵[1][1],而不是[0][0]。所以你的案子需要的全部命令是

gnuplot> set datafile sep tab
gnuplot> stats 'data.dat' every 1:1:1:1 matrix 
         warning: matrix contains missing or undefined values

* FILE: 
  Records:           80
  Out of range:       0
  Invalid:            0
  Header records:     0
  Blank:             10
  Data Blocks:        1

* MATRIX: [9 X 8] 
  Mean:              63.0617
  Std Dev:           20.6729
  Sample StdDev:     20.8033
  Skewness:          -0.1327
  Kurtosis:           1.9515
  Avg Dev:           17.4445
  Sum:             5044.9400
  Sum Sq.:       352332.2181

  Mean Err.:          2.3113
  Std Dev Err.:       1.6343
  Skewness Err.:      0.2739
  Kurtosis Err.:      0.5477

  Minimum:           20.5000 [ 0 3 ]
  Maximum:           98.4900 [ 5 0 ]
也就是说,
每1:1:1:1
告诉它,对于行和列,索引增量都是1,子矩阵从[1][1]开始,而不是从原点[0][0]开始。
输出值都是正确的,但为大小[9 x 8]和最小/最大项显示的索引是错误的。我将为这两个问题提交一份错误报告。

我试图描述原始答案所揭示的错误,但忘了提到一个更简单的替代方案。对于一行列标题和一列列列标题的特定情况,gnuplot提供了一种特殊语法,可以正常工作:

set file separator tab
stats 'data.dat' matrix rowheaders columnheaders

当我只使用
stats'data.dat'跳过1 every::2矩阵时
(之前没有
设置数据文件分隔符选项卡
),输出是
*矩阵:[10 X 8];最小值:20.5000[7 2]
。如果我包括
设置数据文件分隔符选项卡
,则输出为
*矩阵:[9 X 7];最低:20.5000[5 2]
。两个都不对,都很好用!我将等待错误修复。