Enter gnuplot environment with 'gnuplot' command. In the interactive shell you can use the following commands.
To load a command file, which contains other commands for the gnuplot interactive shell. Lines starting with '#' are ignored.
load "plot_data.gp"
You can also directly load it when starting gnuplot, in shell:
gnuplot -persist plot_data.gp
If the file ends with “pause -1”, you can omit the “-persist” argument.
set grid
set title ""
set key autotitle columnheader
set pointsize 0.33333333
set datafile separator ","
clear
plot "data.dat"
plot "data.dat" using 4 plot "data.dat" using 4:5
plot "data.dat" using 4:5 every 2::50::1050
set datafile separator ","
plot "data1.dat" using 4:5, "data2.dat" using 6:7
plot \ "data1.dat" using 4:5, \ "data2.dat" using 6:7
plot "data1.dat" using 4:5 title "my curve"
a=2 plot "data1.dat" using 4:5 title sprintf("curve for a=%.5g",a)
show palette colornames plot "data1.dat" using 4:5 lt rgb "red" plot "data1.dat" using 4:5 lt rgb "#FF0000"
# line plot "data1.dat" using 4:5 with lines # line with custom style plot "data1.dat" using 4:5 with lines linestyle 1 # line with custom line width plot "data1.dat" using 4:5 with lines lw 4 # points plot "data1.dat" using 4:5 with points # points of custom type plot "data1.dat" using 4:5 with points pt 19 # lines AND points plot "data1.dat" using 4:5 with linespoints pt 1 # labels in addition to points plot "data1.dat" using 4:5:1 with labels offset 0.7,0.7 # to find out point types and line width available test
plot "data1.dat" using 4:($5/2+14) # where $n means column n
plot i=1, "data1.dat" using 1:(column(i+1))
help functions
).theta=7.72 * (2*pi/360) dx=6.7866 dy=10.1704 rotation_x(x,y)=(x-dx)*cos(theta)-(y-dy)*sin(theta) rotation_y(x,y)=(x-dx)*sin(theta)+(y-dy)*cos(theta) plot "gps.dat" using (rotation_x($3,$4)):(rotation_y($3,$4))
colors="red blue green" print word(colors,3)
max(x,y)=(x>y?y:x)
Ignore line under condition:
use(x)=(x>0?x:0/0)
plot for [file in "run1.dat run2.dat run3.dat"] file using 1:2
plot for [i=1:3] run.dat using i t sprintf("curve %s", columnheader(i))
file(n) = sprintf("run_%d.dat",n) plot for [i=1:3] file(i) using 1:2
prev_x=0 tmp=0 sum_prev(x)=(tmp=prev_x, prev_x=x, x+tmp)
sum=0 cumulated(x)=(sum=sum+x, sum) plot "idSlamDala.dat" using (cumulated($2)):6
plot sum=0, "idSlamDala.dat" using (sum=sum+$2,sum):6
t0=0 deltat(t)=((t0<=1)?(t0=t,0):(t-t0)) plot "idSlamDala.dat" using (deltat($1)):2
plot prev=-9999, "idSlamDala.dat" using 1:(dt=(prev==-9999?0/0:$2-prev), prev=$2, dt)
k=0 prev_a=0 continuous(a)=((prev_a>pi/2&&a<-pi/2 ? k=k+1 : (prev_a<-pi/2&&a>pi/2 ? k=k-1 : k)), prev_a=a, a+k*2*pi)
awk
to have a more explicit program, but it won't automatically ignore comment lines:plot "< awk '{sum=sum+$2; print sum,$6}' idSlamDala.dat" using 1:2 plot "< awk 'NR==1 { prev=$2 } NR>1 { dt=$2-prev; prev=$2; print $1,dt; }' idSlamDala.dat" using 1:2
myplot(x,t) = sprintf("plot \"< awk '\ NR==1 { i=0; s=0; for(j=0;j<$ARGV_NMEAN;j++) tab[j]=0; } \ NR>=1 { s=s-tab[i]; tab[i]=\$%d; s=s+tab[i]; i=(i>=($ARGV_NMEAN-1)?0:i+1); } \ NR>$ARGV_NMEAN { if (i==0) print s/$ARGV_NMEAN; }' $ARGV_FILE\"\ using 1 t \"%s\"", x, t) eval myplot(2, "ax")
plot "< gunzip -c $ARGV_FILE | awk '\ NR==1 { k=0; prev_a=0; i=0; pi=3.14159265358979 } \ NR>=1 { a=\$2; k=(prev_a>pi/2 && a<-pi/2 ? k+1 : (prev_a<-pi/2 && a>pi/2 ? k-1 : k)); prev_a=a; a=a+k*2*pi; t=\$1; taba[i]=a; tabt[i]=t; i=(i>=($ARGV_NMEAN-1)?0:i+1); } \ NR>$ARGV_NMEAN { bias=(a-taba[i])/((t-tabt[i])/3600); print t,bias; }' "\ using (deltat(\$1)/3600):(\$2*180/pi) with points pt 0 lt rgb "red" title "bias"
paste
can help.plot "< paste file1.dat file2.dat" using 1:($4-$2)
gunzip
can help.plot "< gunzip -c file.dat" using 1:($4-$2) plot "< zcat file.dat" using 1:($4-$2) plot "< tar -Oxjf file.dat.tar.bz2" using 1:($4-$2)
f(x) = a*x**2 + b*x + c fit f(x) "file.dat" u 1:2 via a,b,c plot "file.dat" u 1:2, f(x)
#!/bin/sh ARGV1=$1 gnuplot << EOF plot "$ARGV1" using 1:(\$2*3) EOF
./plot.gp run.dat
You can also build a more complicated plot file with multiple steps (for multiplot or multiple curves):
#!/bin/sh ###### script_header=`cat<<EOF set term wxt size 1024,768 set grid plot \ EOF ` script=$script_header ###### for host in $*; do script_loop=`cat<<EOF "file_$host.log" u 4:5 w l lt rgb "blue" t "Position $host", \ EOF ` script="$script$script_loop" done ###### script_footer=`cat<<EOF pause -1 EOF ` script="$script$script_footer" gnuplot<<EOF $(echo "$script") EOF
#!/bin/sh export ARGV1=$2; export ARGV2=$3; export ARGV3=$4; export ARGV4=$5; cat $1 | gnuplot export -n ARGV1; export -n ARGV2; export -n ARGV3; export -n ARGV4;
#!gplaunch plot "`echo $ARGV1`" using 1:($2*3)
gplaunch plot.gp run.dat ./plot.gp run.dat # if gplaunch is installed on the system
sed
(but difficulty to deal with relative paths):#!/bin/sh cat $1 | sed "s/\$ARGV1/$2/g" | sed "s/\$ARGV2/$3/g" | sed "s/\$ARGV3/$4/g" | sed "s/\$ARGV4/$5/g" | gnuplot
#!gplaunch plot "$ARGV1" using 1:($2*3)
gplaunch plot.gp run.dat ./plot.gp run.dat # if gplaunch is installed on the system
In general be sure that you don't have another “set term” command in your plotting code.
set terminal postscript eps color "Times-Roman" 16 set output 'plot.eps' # your plotting code (can be included using the load command) set output !epstopdf --outfile=plot.pdf plot.eps quit
By default, when exporting to ps or pdf, gnuplot changes the lines style with dashes so that they can be recognized when printed in black and white. If you want to keep your lines plain, you can either add the “solid” option to the terminal command, or add the “ls 1” command:
plot [...] with lines ls 1 lw 2 lt rgb "red"
Also the grid is black by default, if you want to set it to grey:
set grid lc rgb "grey"
set terminal png size 450,360 small set output 'plot.png' # your plotting code (can be included using the load command) quit
If you need dashes but want raster PNG output (eg because the eps would be too large), you can use the eps terminal and convert the file to png at the end with imagemagick:
set output !convert -density 600x600 -background white -flatten plot.eps plot.png quit
When converting eps to png, convert creates a png with non visible alpha data even if flatten, and some viewers like evince
fail to antialias them. So you have to convert it twice:
set output !convert -density 600x600 -background white -flatten plot.eps ppm:- | convert - plot.png quit
#!/bin/sh TITLE=plot if [[ $1 == "pdf" ]]; then GTERM='set terminal postscript eps color "Times-Roman" 16 solid size 5,2.9 ; set output "$TITLE.eps"' OUTPUT='!epstopdf --outfile=$TITLE.pdf $TITLE.eps' GRIDCOLOR='lc rgb "grey"' shift elif [[ $1 == "png" ]]; then GTERM='set terminal pngcairo font "Times,32" size 1830,1780 ; set output "$TITLE.png"' OUTPUT='' GRIDCOLOR='' shift else GTERM='set term wxt size 1024,768' OUTPUT='' GRIDCOLOR='' fi gnuplot -persist << EOF $GTERM set grid $GRIDCOLOR # your plotting code (can be included using the load command) set output $OUTPUT EOF
bind "a" "plot x*x"
plot "file.dat" u 1 while(1) { replot ; pause 0.2 }
set terminal x11 bind "c" "update=1-update ; while(update) { replot ; pause 0.1 }" plot "file.dat" u 1 update=1 while(update) { replot ; pause 0.2 }
This is a typical example that uses the most useful features to plot data from a file. It is easy to copy and adapt for your own use.
set term wxt size 1024,768 # file to plot: file="rtslam.log" # to have smaller crosses: set pointsize 0.3333333333333 # to have the same scale along x and y axis: #set size ratio -1 # to display a grid: #set grid # to have a different right y axis: set y2tics auto set ytics nomirror # titles set title "Accelerometer biases and g estimation" set xlabel "Time (s)" set ylabel "Acceleration (m/s2)" set y2label "Angle (deg)" # to define some functions: norm3(x,y,z)=sqrt(x*x+y*y+z*z) pitch(x,y,z) = atan2(-x, z)*180/pi roll(x,y,z) = atan2(y, z)*180/pi # to define some variables: t0=1281469302 # now plot: plot \ file using ($1-t0):15 with points pt 1 lt rgb "red" title "Bias AX", \ file using ($1-t0):16 with points pt 1 lt rgb "dark-red" title "Bias AY", \ file using ($1-t0):17 with points pt 1 lt rgb "orange" title "Bias AZ", \ file using ($1-t0):(norm3($21,$22,$23)/100) with points pt 1 lt rgb "blue" title "Norm g / 100", \ file using ($1-t0):(pitch($21,$22,$23)) axes x1y2 with points pt 1 lt rgb "green" title "Pitch g", \ file using ($1-t0):(roll($21,$22,$23)) axes x1y2 with points pt 1 lt rgb "dark-green" title "Roll g" # prevent window from closing at the end pause -1