Gnuplot Tips

Enable Javascript for TOC.

Passing parameters to Gnuplot Script

$ ./pu_selftest_verification/gnuplot_diagram.sh abc
Error: Wrong parameter count

Usage: ./pu_selftest_verification/gnuplot_diagram.sh INPUT_FILE OUTPUT_FILE

  INPUT_FILE    CVS file e.g. pu_ast_sys_diff_100411.log
  OUTPUT_FILE   Image file e.g. pu_ast_sys_diff_100411.png
$
Passing to the shebang the gnuplot path with -c, the parameters can be accessed with ARG0, ARG1, etc.
if (ARGC < 2) {
  print 'Error: Wrong parameter count'
  print ''
  print 'Usage: ', ARG0, ' INPUT_FILE OUTPUT_FILE'
  print ''
  print '  INPUT_FILE    CVS file e.g. pu_ast_sys_diff_100411.log'
  print '  OUTPUT_FILE   Image file e.g. pu_ast_sys_diff_100411.png'
  exit
}
input_file=ARG1
output_file=ARG2
Source: Stackoverflow

Plotting data as Histogram

Using the following data file:
Session;Session Date;Date;AST-Sys Diff
1;2022-10-06T15:59:39;2022-10-06T14:03:19.497394Z;-6588
1;2022-10-06T15:59:39;2022-10-06T14:08:16.059585Z;-3873
1;2022-10-06T15:59:39;2022-10-06T14:08:18.531537Z;-4201
1;2022-10-06T15:59:39;2022-10-06T14:08:21.007526Z;-4484
1;2022-10-06T15:59:39;2022-10-06T14:08:23.527556Z;205
1;2022-10-06T15:59:39;2022-10-06T14:08:25.999621Z;111
1;2022-10-06T15:59:39;2022-10-06T14:08:28.514464Z;20
1;2022-10-06T15:59:39;2022-10-06T14:08:31.058529Z;3
1;2022-10-06T15:59:39;2022-10-06T14:08:33.527563Z;142
With this script a image is generated with the data from the 4th column:
#!/usr/bin/gnuplot -c
#
# Plotting CSV file as Histogram
#

input_file=ARG1
output_file=ARG2
boxw_ratio = 0.7
use_log = 0
binwidth = 200
binstart = -100

set datafile separator ';'
set terminal png size 1000,600 enhanced font 'Helvetica,16'
set output output_file
set title Synchronization Error on device ' . sn

set xlabel 'Synchronization Error [ns]'
if (use_log) {
  set logscale y
  set ylabel 'Occurrence (logarithmic)'
}
else {
  unset logscale y
  set ylabel 'Occurrence'
}

set boxwidth boxw_ratio*binwidth
set style fill solid 0.5
hist = 'u (binwidth*(floor(($4-binstart)/binwidth)+0.5)+binstart):(1.0) smooth freq w boxes'

plot input_file i 0 @hist ls 2 notitle
When having use_log = 0 a histogram with regular axis is printed: If use_log = 1 the axis have logarithmic scale:

Plotting data as multiline Diagram

The input data look like this:
Date;Interface;RX packets;errors;dropped;overruns;frame;TX packets;errors;dropped;overruns;carrier;RX bytes;TX bytes;Load 1m;Load 5m;Load 15m;
2023-06-15 09:46:00;eth_internal;147367327;0;76;0;4;221201173;0;0;0;0;164893180624;285983366415; 0.43; 0.70; 0.64
2023-06-15 09:46:01;eth_internal;147367414;0;76;0;4;221201229;0;0;0;0;164893283396;285983372441; 0.56; 0.72; 0.64
2023-06-15 09:46:02;eth_internal;147367422;0;76;0;4;221201256;0;0;0;0;164893285420;285983374964; 0.56; 0.72; 0.64
2023-06-15 09:46:03;eth_internal;147373803;0;76;0;4;221202149;0;0;0;0;164902740012;285983441976; 0.56; 0.72; 0.64
2023-06-15 09:46:04;eth_internal;147373807;0;76;0;4;221202172;0;0;0;0;164902740264;285983444306; 0.56; 0.72; 0.64
2023-06-15 09:46:05;eth_internal;147373814;0;76;0;4;221202193;0;0;0;0;164902744314;285983446370; 0.56; 0.72; 0.64
2023-06-15 09:46:06;eth_internal;147373822;0;76;0;4;221202220;0;0;0;0;164902746338;285983448893; 0.51; 0.71; 0.64
2023-06-15 09:46:07;eth_internal;147373824;0;76;0;4;221202238;0;0;0;0;164902746464;285983450759; 0.51; 0.71; 0.64
#!/usr/bin/gnuplot -c
#
# Plotting CSV file as multiline Graph
#

if (ARGC < 2) {
  print 'Error: Wrong parameter count'
  print ''
  print 'Usage: ', ARG0, ' INPUT_FILE OUTPUT_FILE [AVG_CNT]'
  print ''
  print '  INPUT_FILE    CVS file e.g. pu_ast_sys_diff_v1.1_100411.log'
  print '  OUTPUT_FILE   Image file e.g. pu_ast_sys_diff_v1.1_100411.png'
  exit
}
input_file=ARG1
output_file=ARG2
event_time="2023-06-15 10:10:24"

set key autotitle columnhead
set datafile separator ';'
set terminal png size 1000,600 enhanced font 'Helvetica,16'

set xdata time
set xlabel 'Localtime (+02:00)'
set format x '%H:%M'
#set timefmt '%Y-%m-%dT%H:%M:%SZ'
set timefmt '%Y-%m-%d %H:%M:%S'

# printing vertical line at given date and time
set arrow from event_time,graph(0,0) to event_time,graph(1,1) lt rgb 'red' nohead

set output output_file
set title 'Load Average'
set ylabel 'Competing Processes'
plot input_file using 1:15 with points pointtype 7 pointsize 0.3 title  '1 minute avg', \
     input_file using 1:16 with points pointtype 7 pointsize 0.3 title  '5 minute avg', \
     input_file using 1:17 with points pointtype 7 pointsize 0.3 title '15 minute avg'

Show Measurement Results over Time


In case that we have 128 samples per second, we can use this formula and have an x-axis in seconds:
$ head XCZU2EG.cap
22.470us
21.580us
21.450us
21.560us
21.260us
21.560us
21.260us
21.320us
21.450us
21.380us
$ gnuplot

	G N U P L O T
	Version 5.2 patchlevel 6    last modified 2019-01-01 

gnuplot> 
gnuplot> plot 'XCZU2EG.cap' using ($0/128):1 with points title "XCZU2EG over time"

Plot every nth Measurement Result


If only every 500th point shall be plotted:
gnuplot> plot 'XCZU2EG.cap' every 500 using ($0*500/128):1 with points title "XCZU2EG over time"