Documentation: Gnuplot

2 minute read


Gnuplot(freeware) is a command-driven, interactive, function and data plotting program for producing 2D and 3D graph. Although, This does not have many features compared to commerical plotting software, it isn’t complex to use. Therefore, it is ideal for users those who do not want to learn a difficult major tools.

Structure (Abstract)

  Function            Returns
  -----------      ------------------------------------------
  abs(x)            absolute value of x, |x|
  acos(x)           arc-cosine  of x
  asin(x)           arc-sine    of x  
  atan(x)           arc-tangent of x
  cos(x)            cosine      of x,  x is in radians.
  cosh(x)           hyperbolic cosine of x, x is in radians
  erf(x)            error function of x
  exp(x)            exponential function of x, base e
  inverf(x)         inverse error function of x
  invnorm(x)        inverse normal distribution of x
  log(x)            log of x, base e
  log10(x)          log of x, base 10
  norm(x)           normal Gaussian distribution function
  rand(x)           pseudo-random number generator      
  sgn(x)            1 if x > 0, -1 if x < 0, 0 if x=0
  sin(x)            sine      of x, x is in radians
  sinh(x)           hyperbolic sine of x, x is in radians
  sqrt(x)           the square root of x
  tan(x)            tangent of x, x is in radians
  tanh(x)           hyperbolic tangent of x, x is in radians
  Bessel, gamma, ibeta, igamma, and lgamma functions are also
  supported.  Many functions can take complex arguments.
  Binary and unary operators are also supported.  


   plot {[ranges]}
        {[function] | {"[datafile]" {datafile-modifiers}}}
        {axes [axes] } { [title-spec] } {with [style] }
        {, {definitions,} [function] ...}

Plotting Data

  gnuplot>  plot  "test.dat" using 1:2 title 'Column', \
                  "test.dat" using 1:3 title 'Beam'

*No blank space after the line continuation character, “" .

Example of test.dat format

# X     Y
1.0   1.2
2.0   1.8
3.0   1.6


set command

  Create a title:                  > set title "TITLE NAME"
  Put a label on the x-axis:       > set xlabel "X-AXIS NAME"
  Put a label on the y-axis:       > set ylabel "Y-AXIS NAME"
  Change the x-axis range:         > set xrange [LOWEST_X:HIGHEST_X]
  Change the y-axis range:         > set yrange [LOWEST_Y:HIGHEST_Y]
  Have Gnuplot determine ranges:   > set autoscale
  Move the key:                    > set key X,Y
  Delete the key:                  > unset key
  Put a label on the plot:         > set label "NAME" at X, Y
  Remove all labels:               > unset label
  Plot using log-axes:             > set logscale
  Plot using log-axes on y-axis:   > unset logscale; set logscale y
  Change the tic-marks:            > set xtics 10
  Return to the default tics:      > unset xtics; set xtics auto

C++ library

There is a C++ library for easy use: gnuplot-iostream interface. This basically pushes data arrays and mouse clicks using iostream pipe to plot the data with extrafunctions. This low level interface simply use std::vector<std::vector<std::pair<double, double»> to push data.


For a documentation, click here


To Clone the source code from git:

git clone

For a high lavel interface, refer to gnuplot-cpp library


locate “gnuplot-iostream.h” and include the file, and link boost_iostreams, boost_system, boost_filesystem when you compile.

For example,

 g++ -o test -lboost_iostreams -lboost_system -lboost_filesystem





  1. gnuplot official website
  2. gnuplot manual
  3. T.kawano, (2005). gnuplot tips.
  4. Dan Stahlke. Gnuplot-iostream interface.

Leave a comment