【gnuplot小ワザまとめ】読み込んだファイルのプロパティを取得


概要

測定等で得たデータをgnuplotで描画する上で便利だと思ったstatsについてまとめました
前回の記事↓
【gnuplot小ワザまとめ】グラフを描画する際の位置指定方法(margin)

本題

読み込んだデータファイルをgnuplotで描画するときに、データの最大/最小に合わせて軸の範囲を自動的に変えて描画したいと思った(手動はめんどいので)

デフォルトの設定でもある程度自動で合わせてくれるがコレジャナイ感がある時がある

そんなときはstatsコマンドでファイルを読み込むと最大値や最小値、平均、総データ数、標準偏差等を表示してくれる



例えばこんなデータの場合、

gnuplot> pl "data1.dat" u 1:2 w lp

僕の環境では最大値が軸の上限ギリギリになってしまった

手動でset range[-2:6]とやっても良いが、
まず、statsコマンドでファイルの詳細を取得すると...

gnuplot> stats "data1.dat" u 1:2

* FILE: 
  Records:           100  #総データ数
  Out of range:        0
  Invalid:             0
  Column headers:      0
  Blank:               0
  Data Blocks:         1

* COLUMNS:
  Mean:               0.0000  #1列目の平均  0.8180  #2列目の平均
  Std Dev:            5.8315              1.7579  
  Sample StdDev:      5.8609              1.7668
  Skewness:           0.0000              1.1884
  Kurtosis:           1.7998              3.2259
  Avg Dev:            5.0505              1.3627
  Sum:           1.24345e-14             81.8029
  Sum Sq.:         3400.6742            375.9459

  Mean Err.:          0.5832              0.1758
  Std Dev Err.:       0.4124              0.1243
  Skewness Err.:      0.2449              0.2449
  Kurtosis Err.:      0.4899              0.4899

  Minimum:          -10.0000 [  0]       -1.0847 [ 27]  #最小[何列目]
  Maximum:           10.0000 [ 99]        4.9915 [ 50]  #最大[何列目]
  Quartile:          -5.0505             -0.2859
  Median:             0.0000              0.3412
  Quartile:           5.0505              1.1445

  Linear Model:       y = -3.905e-18 x + 0.818
  Slope:              -3.905e-18 +- 0.03045
  Intercept:          0.818 +- 0.1776
  Correlation:        r = -1.295e-17
  Sum xy:             -3.109e-15



取得されたプロパティはそれぞれ以下の変数に格納されている

変数 説明
STATS_min_x x軸の最小値
STATS_max_x x軸の最大値
STATS_min_y y軸の最小値
STATS_max_x y軸の最大値
STATS_mean_x x軸の平均
STATS_mean_y y軸の平均

他にも変数があるが、詳細はこちらを参考に
http://www.ss.scphys.kyoto-u.ac.jp/person/yonezawa/contents/program/gnuplot/stats.html

例えばこんな感じに使うと...

gnuplot> set yrange[STATS_min_y -1:STATS_max_y +1]  
gnuplot> pl "data1.dat" u 1:2 w lp

扱うデータのスケールにもよるが、レンジの指定の部分をもう少し複雑にすればより自動的にキレイな描画ができるかもしれない

最後に

今回は最大/最小について取り上げたが、そのほかのパラメータも取得することができるので、gnuplotだけでもっと複雑な操作ができるかもしれない

参考にしたサイト

有用な情報ありがとうございました