gnuplot“stats”命令意外的min& “超出范围”的结果

时间:2014-07-16 20:53:53

标签: gnuplot histogram

我正在尝试开发直方图脚本。情节本身似乎是正确的,但我有一些问题或疑问:

  1. 我不明白为什么“stats”输出显示我的数据文件有“超出范围”的点。这是什么意思?
  2. “stats”最小值也不正确。从数据文件中,minimum = -0.0312,但stats报告0.0。
  3. 剧本:

    # Gnuplot histogram from "Gnuplot In Action", 13.2.1 Jitter plots and histograms (p. 256)
    
    # these functions put data points (x) into bins of specified width
    bin(x,width)    = width*floor(x/width)
    
    binwidth = 0.01
    set boxwidth binwidth
    
    # data file
    data_file = "sorted.csv"
    png_file    = "sorted.png"
    datapoint_count = 14
    
    # taking explanations from the data file
    set style data linesp
    set key autotitle columnheader
    
    set datafile separator ","  # CSV format
    
    # histogram
    myTitle = "Histogram from \n" . data_file
    set title myTitle
    set style fill solid 1.0
    set xlabel "Slack"
    set mxtics
    set ylabel "Count"
    set yrange [0:*] # min count is always 0
    
    set terminal png    # plot file format
    set output png_file # plot to file
    
    print "xrange="
    show xrange
    print "yrange="
    show yrange
    
    stats data_file using ($1)
    print "STATS_records=", STATS_records
    print "STATS_invalid=", STATS_invalid
    print "STATS_blank=", STATS_blank
    print "STATS_min=", STATS_min
    print "STATS_max=", STATS_max
    
    plot  data_file using (bin($1,binwidth)):(1) smooth frequency with boxes
    

    数据文件:

    slack
    -0.0312219
    -0.000245109
    -4.16338e-05
    -2.08616e-05
    -1.82986e-05
    8.31485e-06
    1.00136e-05
    1.23084e-05
    0
    0.000102907
    0.000123322
    0.000138402
    0.19044
    0.190441
    

    输出:

    gnuplot sorted.gp
    Could not find/open font when opening font "arial", using internal non-scalable font
    xrange=
    
            set xrange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
    
    yrange=
    
            set yrange [ 0.00000 : * ] noreverse nowriteback  # (currently [:10.0000] )
    
    
    * FILE: 
      Records:      9
      Out of range: 5
      Invalid:      0
      Blank:        0
      Data Blocks:  1
    
    * COLUMN: 
      Mean:          0.0424
      Std Dev:       0.0792
      Sum:           0.3813
      Sum Sq.:       0.0725
    
      Minimum:       0.0000 [3]
      Maximum:       0.1904 [8]
      Quartile:      0.0000 
      Median:        0.0001 
      Quartile:      0.0001 
    
    STATS_records=9.0
    STATS_invalid=0.0
    STATS_blank=0.0
    STATS_min=0.0
    STATS_max=0.190441
    

1 个答案:

答案 0 :(得分:3)

如果您为stats命令提供单个列,则yrange用于从此列中选择范围。

乍一看这没有意义,但表现得像只有一列的plot命令,在这种情况下,这一列是y值,行号被选为x值。

因此,只需将set yrange部分移到stats命令后面。

data_file = 'sorted.csv'
stats data_file using 1
show variables all
set yrange [0:*]
plot data_file ...