gnuplot での引数と統計の利用と時刻表記データの扱い例

gnuplot では stats コマンドで統計処理を行う事ができ、 その統計データは、STATS_mean_y 等の変数を介して参照することが出来ます。 ここでは併せてコマンドラインからの引数の渡し方と、年月日・時分秒を含むデータファイルの扱い方も紹介します。

Download : 1W2D-1.1.tar.gz — 計測データとプロット例

プロット例

fig.1 室温での出力電圧の変動特性
Vout Short-term drift at room temperature
fig.2 室温での出力電圧の安定度
Vout stability at room temperature

計測データ例

# DUT       : Finetune  F0101VR 1W2D
# Voltmeter : Hioki     DM7276         (NPLC = 100)
#       Date            Time            Vout           Ta
2       2022-09-14      13:43:57        +02.500001E+00  +24.25
3       2022-09-14      13:44:07        +02.500001E+00  +24.16
4       2022-09-14      13:44:17        +02.500001E+00  +24.09
5       2022-09-14      13:44:27        +02.499999E+00  +24.04
6       2022-09-14      13:44:37        +02.500000E+00  +24.01
7       2022-09-14      13:44:47        +02.500000E+00  +24.01
8       2022-09-14      13:44:57        +02.499999E+00  +23.99
9       2022-09-14      13:45:07        +02.499999E+00  +23.93
10      2022-09-14      13:45:17        +02.500000E+00  +23.82
⋮ (中略)
4410    2022-09-15      01:58:38        +02.500003E+00  +24.14
4411    2022-09-15      01:58:48        +02.500002E+00  +24.19
4412    2022-09-15      01:58:58        +02.500003E+00  +24.26

Makefile

REVISION = 1.1
#
# Parameters for the "drift.plt".
#
TARGET  = 1W2D
NAME    = F0101VR
DATE    = 2022-09-14
TIME    = 13:43:57
XDIV    = 1
YDIV    = 10e-6
YNOM    = 2.5
TNOM    = 25
TDIV    = 1
#
# External programs to be used.
#
PS2PDF  = /usr/local/bin/ps2pdf -sPAPERSIZE=a4
GNUPLOT = /usr/local/bin#gnuplot

$(TARGET).pdf: $(TARGET).ps
	$(PS2PDF) $(TARGET).ps

$(TARGET).ps: $(TARGET).dat drift.plt Makefile
	$(GNUPLOT) -e "NAME='$(NAME)'; TARGET='$(TARGET)'; DATE='$(DATE)'; TIME='$(TIME)'; \
	XDIV='$(XDIV)'; YDIV='$(YDIV)'; YNOM='$(YNOM)'; TDIV='$(TDIV)'; TNOM='$(TNOM)'" drift.plt
#       gnuplot のコマンドラインオプション -e を使って引数を渡す。引数間は ; で区切る。
archive:
	tar czvf $(TARGET)-$(REVISION).tar.gz Makefile drift.plt $(TARGET).dat $(TARGET).pdf

drift.plt

# Plot Vout drift/stability of the voltage logged by using Hioki's RmLogger and DM7276
# Rev.1.1 (Sep. 28, 2022) Written by Takayuki HOSODA 
#
# Arguments |  Examples  | Unit
#   TARGET  | 1W2D       | Serial number
#   NAME    | F0101VR    | Name of the DUT
#   DATE    | 2022-09-14 | year-month-day     # 開始年月日
#   TIME    | 13:43:54   | hour:minute:second # 開始時刻
#   XDIV    | 1          | hour              # 時間刻み 1 hr / div
#   YDIV    | 10e-6      | Volt               # 電圧刻み 10 μV / div
#   YNOM    | 2.5        | Volt               # 公称電圧 2.5 V
#   TDIV    | 1          | deg.C              # 温度刻み 1 ℃ / div
#   TNOM    | 25         | deg.C              # 公称温度 25 ℃
#
# Data format: Examples
#   #       date            time            Vout            Ta
#   2       2022-09-15      02:10:44        +02.500002E+00  +25.06
#
reset
set encoding iso_8859_1
set grid 
set style data lines
set key left Left
set key spacing 1.5
readdt(date, time)=(strptime('%Y-%m-%d', strcol(date)) + strptime('%H:%M:%S', strcol(time))) # 年月日・時刻データから秒への変換関数の定義

### Drift characteristics ###
#
set xrange [ * : * ] noreverse writeback
set xtics  XDIV  # Makefile から渡された引数 XDIV から xtics を設定
set xlabel "Elapsed time [hr]" 
Vcenter = YNOM
Vdiv    = YDIV
set yrange [ Vcenter - 10 * Vdiv : Vcenter + 10 * Vdiv ]
set ytics  Vdiv
set format y "%6.5f"
set ylabel "{/Helvetica-Oblique V}_{out} [V] (".sprintf("%g", Vdiv * 1e6)."{/Symbol m}V / div, 100 PLC)" 
set y2range [ 20.000 : 30.000 ]
set y2tics  1
set format y2 "%2.1f"

### DUT dependent
#
DUT = NAME." #".TARGET # . で文字列の連結
set terminal dumb # ダム端末へ表示
stats TARGET.".dat" u ($5):($4) # stats で $5, $4 を X, Y側データとして統計処理。統計結果は STATS_mean_y 等の変数で参照できるようになる
hr_0 = strptime('%Y-%m-%d', DATE) + strptime('%H:%M:%S', TIME) # strptime で秒に変換
set title "{/Helvetica-Oblique V}_{out} drift at room temperature (DUT : ".DUT.")" 
set y2label "{/Helvetica-Oblique T}_{a} [\260C]" 
set terminal postscript solid color enhanced # enhanced でギリシャ文字等が使えるようになる
set output TARGET.".ps" # ファイルのオープン

plot \
TARGET.".dat" u ((readdt(2, 3) - hr_0) / 3600):($5) axis x1y2 t "{/Helvetica-Oblique T}_{a}" lt 3,\
TARGET.".dat" u ((readdt(2, 3) - hr_0) / 3600):($4) t "{/Helvetica-Oblique V}_{out}" lt 1,\
STATS_mean_y t "{/Helvetica-Oblique V}_{/Symbol m} = ".sprintf("%7.7f", STATS_mean_y) lt 2,\ # Y側の平均値 STATS_mean_y を sprintf で文字列に変換
STATS_mean_y + 3 * STATS_stddev_y  t "{/Helvetica-Oblique V}_{{/Symbol m \261} 3 {/Symbol s}} | {/Symbol s} = ".sprintf("%3.3g", STATS_stddev_y) lt 4,\
STATS_mean_y - 3 * STATS_stddev_y  t "" lt 4 # STATS_mean_y は Y側の標準偏差
#set output
hr_elaps = GPVAL_DATA_X_MAX  # GPVAL_DATA_X_MAX には最後に plot した X側データの最大値が入っている

### Stability in scatter graph ###
# 2ページめのプロットの準備
set xrange [ TNOM - 10 * TDIV : TNOM + 10 * TDIV ]
set yrange [ Vcenter - 10 * Vdiv : Vcenter + 10 * Vdiv ]
set xlabel "{/Helvetica-Oblique T}_{a} [\260C]"
set ylabel "{/Helvetica-Oblique V}_{out} [V] (10 {/Symbol m}V/div, 100 PLC)"
set xtics TDIV
set ytics Vdiv
set format y "%7.5f"
set y2label ""
unset y2tics
set title "{/Helvetica-Oblique V}_{out} stability at room temperature (for ".sprintf("%4.1f", hr_elaps)." hours, DUT : ".DUT.")"
set label 1 "{/Helvetica-Oblique V}_{/Symbol m} = ".sprintf("%7.7f", STATS_mean_y)   at graph 0.05, graph 0.125 tc lt 3
set label 2 "{/Helvetica-Oblique V}_{/Symbol s} = ".sprintf("%3.3g", STATS_stddev_y) at graph 0.05, graph 0.075
set label 3 "{/Helvetica-Oblique T}_{/Symbol m} = ".sprintf("%5.2f", STATS_mean_x)   at graph 0.45, graph 0.125 tc lt 3
set label 4 "{/Helvetica-Oblique T}_{/Symbol s} = ".sprintf("%3.3g", STATS_stddev_x) at graph 0.45, graph 0.075
set style data dot
#set terminal postscript solid color enhanced
#set output "stability".TARGET.".ps"
plot TARGET.".dat" u ($5):($4) t "{/Helvetica-Oblique V}_{out}"
set output  # ファイルのクローズ
#    EOF
⚠ 注意 : gnuplot 内部で扱える値の範囲は ±1.7976931348623158E+308 で、print 出来る範囲は ±8.98846567431158E+307

Appendix — Freqently used symbols

α : {/Symbol a}
β : {/Symbol b}
γ : {/Symbol g}
δ : {/Symbol d}
Δ : {/Symbol D}
ε : {/Symbol-Oblique e}
η : {/Symbol-Oblique h}
θ : {/Symbol-Oblique q}
λ : {/Symbol-Oblique l}
μ : {/Symbol m}
ω : {/Symbol-Oblique o}
π : {Symbol p}
σ : {/Symbol s}
Ω : {/Symbol W}
Φ : {/Symbol-Oblique P}
ζ : {Symbol z}
χ : {Symbol c}
≤ : {/Symbol \243}
∞ : {/Symbol \245}
≥ : {/Symbol \263}
≠ : {/Symbol \271}
≈ : {/Symbol \273}
↔ : {/Symbol \253}
← : {/Symbol \254}
↑ : {/Symbol \255}
→ : {/Symbol \256}
↓ : {/Symbol \257}
° : \260
± : {/Symbol \261}
× : {/Symbol \264}
√ : {/Symbol \326}

関連項目

外部リンク


www.finetune.co.jp [Mail] © 2000 Takayuki HOSODA.