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]
。两个都不对,都很好用!我将等待错误修复。