gnuplot多列计算统计信息

kir*_*rbo 2 plot gnuplot

我有一个简单的9列文件。我不会为每列计算某些统计数据,然后将其绘制(使用gnuplot)。

1)这是我如何计算除第一列以外的每一列的统计信息。

stats 'data' every ::2 name "stats"
Run Code Online (Sandbox Code Playgroud)

2)在输出屏幕中,我可以看到操作成功。请注意,列数/记录数为8

* FILE: 
  Records:      8
  Out of range: 0
  Invalid:      0
  Blank:        0
  Data Blocks:  1

* COLUMNS:
  Mean:          6.5000       491742.6625
  Std Dev:       2.2913          703.4865
  Sum:          52.0000       3.93394e+06
  Sum Sq.:     380.0000       1.93449e+12

  Minimum:       3.0000 [0]   490312.0000 [2]
  Maximum:      10.0000 [7]   492643.5000 [7]
  Quartile:      4.5000       491329.5000
  Median:        6.5000       491911.1500
  Quartile:      8.5000       492252.2500

  Linear Model: y = 121.8 x + 4.91e+05
  Correlation:  r = 0.3966
  Sum xy:       2.558e+07
Run Code Online (Sandbox Code Playgroud)

3)现在,我可以通过添加_x和_y来访问前两列的统计信息

print stats_median_x
print stats_median_y
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 我如何才能访问其余6列的统计信息(比如中位数)?
  • 我如何绘制一条相对于某个X轴的所有中位数的直线?

我知道我可以简单地添加一个python脚本来预先计算所有这些,但是如果有使用gnuplot本身的简单方法,我宁愿避免使用它。

谢谢!

Has*_*tur 5

简短的答案)

  • “如何访问另一列的统计信息?”
    stats 'data'using n您会进入到第n 列...
  • “例如,如何绘制所有中位数?”
    例如a set print和一个do for循环可以创建可用于绘图的数据文件。

一个可行的解决方案

    set print "StatDat.dat" 
    do for [i=2:9] { # Here you will use i for the column.
      stats  'data.dat' u i nooutput ; 
      print i, STATS_median, STATS_mean , STATS_stddev # ...
    } 
    set print
    plot "StatDat.dat" us 1:2 # or whatever column you want...
Run Code Online (Sandbox Code Playgroud)

关于它的更多信息
寻求帮助gnuplot help stats可能会读到很多有趣的东西:-)

语法:
stats'filename ' [使用N [:M]] [name'prefix'] [[no] output]]
该命令准备文件一两列中数据的统计摘要。使用说明符的解释以同样的方式为剧情的命令。请参阅plot有关的详细信息indexevery以及using指令。

  • 从第一个突出显示的句子中我们可以理解,它每次都会为一列或最多两列准备统计信息(很遗憾,让我们在以后看到...)。
  • 从第二个突出显示的句子中可以看出,它将遵循plot命令的相同语法:
    因此,stats 'data'using 3将为您提供...中的第3列x
    以及stats 'data' using 4:5其中的第4和第5 列的统计信息x,y

关于您的解释的注意事项

  1. 你说

    这就是我如何计算除第一列以外的每一列的统计信息。
    stats 'data' every ::2 name "stats"

    这不是前两列(不包括前两行)的统计信息,实际上它们的计数器从0开始而不是从1开始。

  2. 由于上述假设/解释,当我们阅读

    记录:8

    这意味着线计算哪里8 ; 您的文件有10行(可用),您指定every ::2了该行,而跳过了前两行,因此有8条记录对统计有用。
    的确如此,我们可以更好地理解help stats其中所说的内容

    STATS_records           # total number of in-range data records
    
    Run Code Online (Sandbox Code Playgroud)

    暗示“用于计算此统计量”

在gnuplot 4.6补丁程序级别4 测试在gnuplot
5.0补丁程序级别1上工作