gnuplot在多个列上计算统计数据

gnuplot在多个列上计算统计数据,plot,gnuplot,Plot,Gnuplot,我有一个简单的9列文件。我不想为每一列计算某些统计数据,然后(使用gnuplot)绘制它 1)这是我计算除第一列之外的每一列的统计信息的方法 stats 'data' every ::2 name "stats" 2)在输出屏幕中,我可以看到操作成功。请注意,列/记录的数量为8 * FILE: Records: 8 Out of range: 0 Invalid: 0 Blank: 0 Data Blocks: 1 * COLUMNS

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

1)这是我计算除第一列之外的每一列的统计信息的方法

stats 'data' every ::2 name "stats"
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
3)现在我可以通过像这样附加x和y来访问前两列的统计信息

print stats_median_x
print stats_median_y
我的问题是:

  • 如何访问其余6列的统计数据(比如中间值)
  • 我怎样才能画出一条线,比如说在所有的中间点上,对着某个X轴
我知道我可以简单地添加一个python脚本来预计算所有这些,但是如果有一种简单的方法可以使用gnuplot本身来实现的话,我宁愿避免使用它

谢谢

简短回答

  • “如何访问其他列的统计信息?”
    使用n
    stats“data”访问第n列
  • “如何绘制例如所有中间带?”
    e、 g.
    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...
再多说几句
使用
帮助统计信息向gnuplot自身寻求帮助
可以阅读很多有趣的东西
:-)

语法:
stats“文件名”[使用N[:M]][名称“前缀”][[no]输出]]
此命令准备文件中一列或两列数据的统计摘要。使用指定符的解释方式与使用绘图命令的方式相同。有关
索引
每个
使用
指令的详细信息,请参见
绘图

  • 从第一个突出显示的句子中,我们可以理解它每次为一列或最多两列准备统计数据(很遗憾,让我们以后再看…)
  • 从第二个突出显示的句子可以看出,它将遵循plot命令的相同语法:
    因此
    stats'data'使用3将为您提供
    x

    x,y
    中使用第4和第5个的4:5统计“数据”
关于您的解释的注释

  • 你说

    这就是我如何计算除第一列之外的每一列的统计信息。
    stats'data'every::2名称“stats”

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

  • 根据上述假设/解释,当我们阅读

    记录:8

    这意味着,计算的线,其中8条;您的文件有10行(可用),您指定
    every::2
    并跳过前两行,因此有8条记录对统计有用。
    确实如此,我们可以更好地理解在
    帮助统计中所说的

    意味着“用于计算此统计数据”

  • 在gnuplot 4.6 patchlevel 4上测试

    正在使用gnuplot版本5.0 patchlevel 1

    谢谢!我错误地认为“stats”能够在一次调用中处理文件中的所有列。变通是非常有帮助的!不客气。它应该是有用的,但似乎仍然不是这样。顺便说一句,如果您的文件长度超过10行(可能是我们从10行开始,然后以100万行结束),您可能希望使用每一次通过两列并在随后的两行上打印x和y,将执行时间减半。。。在这个例子中,我更喜欢保持平面感。使用另一个技巧,您可以避免将统计数据转储到临时文件中。。。但是为了理智起见,最好保持简单,特别是如果您将在一段时间后重用代码。记忆是有限的,至少是我的:-)@starfry…但这是另一个问题<代码>;-)
    由于您在类似Linux的环境中工作,因此可以在
    do
    循环中使用
    firstrow=system('head-1'.data)
    然后
    打印单词(firstrow,i),STATS\u median,STATS\u mean,STATS\u stddev#…
    。。。
    STATS_records           # total number of in-range data records