Gnuplot is a terminal based plotting application. This means that you interact with gnuplot by typing commands at a prompt. This turns out to be very convenient, because it means that you can always save or create a gnuplot configuration into a plain text file. Several good tutorial references exist for gnuplot.
Gnuplot Official Site (Tutorial/User Manual PDF): http://www.gnuplot.info/
Gnuplot Not So Frequently Asked Questions: http://t16web.lanl.gov/Kawano/gnuplot/index-e.html
The book, Gnuplot in Action: http://www.manning.com/janert/
If gnuplot is not already installed on your system, you need to install it. The method of install will depend on your OS and distribution. A few common examples are
# must run as root > emerge gnuplot
> sudo apt-get install gnuplot
# must run as root > yum install gnuplot
# must run as root > apt-get install gnuplot
- A windows install file can be downloaded from the gnuplot sourceforge page here.
- Mac OS X
- First, download XQuartz from here and install. Then download the
gnuplot-4.6.0.tar.gzfrom here. Now you will just unpack, configure, build and install gnuplot from source.
> tar xzf gnuplot-4.6.0.tar.gz > cd gnuplot-4.6.0 > ./configure > make > make install # run as root.
- gnuplot can also be installed on Mac OS with MacPorts
- Of course, gnuplot can be built from source on any other Unix based machine such as Mac OS X and Linux.
gnuplot is a program created to plot stuff. You can plot functions, data, or both. The
plot command has the following form
gnuplot> plot function | 'filename' datafile-modifiers [, function2 | 'filename2' datafile-modifiers ]
To plot a function, just give the function to plot to the
gnuplot> plot sin(x)
x is a special variable that gnuplot reconizes as the independent variable in a
Multiple functions can be plotted on the same graph, just separate each with a comma
gnuplot> plot sin(x), cos(x)
The default plot generated by gnuplot is not bad (the background isn't gray), but unless you are just quickly plotting something for your own use, you will need to change this. For example, you will want to label the axes and indicate their units.
Gnuplot allows the way the plot is displayed to be configured by setting options. Options are set with the
gnuplot> set title "Displacement of an Oscillating Spring" gnuplot> set xlabel "time (s)" gnuplot> set ylabel "displacement (m)"
Gnuplot does not redraw the graph automatically after options are set. To update the plot, either reissue the same
plot command, or just use the
gnuplot> replot # redraw the previous plot with new options
See the #Plot Display Options section for a list of common options.
User-Defined Functions and Variables
gnuplot allows the user to define arbitrary functions. Function definitions have the following form
gnuplot> function_name(arg1, [arg2, ...] ) = expression
User-defined functions can be plotted with the plot command.
gnuplot> gauss(x) = exp( - x**2 ) gnuplot> plot gaus(x)
Functions that take more than one argument can also be plotted. Just pass
x to one of the arguments.
gnuplot> gauss(sigma, x0, x) = exp( - (x - x0)**2 / (2*sigma*sigma)) gnuplot> plot gauss(0.1, 5, x), gaus(0.2, 5, x)
Note that, while we used the variable
x in the definition of
gauss, it is not required. The function can be plotted for any one of the arguments
gnuplot> plot gauss(x, 5, 0)
gnuplot also also supports variables. You can set a variable, and then use it in
plot commands or even function definitions.
gnuplot> x0 = 1.5 gnuplot> sigma = 0.75 gnuplot> gauss2(x) = exp( - (x - x0)**2 / (2*sigma*sigma))
This function will use the values stored in
sigma when it is evaluated. Note that the
sigma in the function
gauss defined above will not use the variables. Function argument names will "hide" variable names. In other words, gnuplot variables have scope.
gnuplot> plot gauss(0.5, 1, x), gauss2(x), gauss2(x/sigma)
Plotting Data from a File
gnuplot is very useful for plotting arbitrary functions, but it really shines when it comes to plotting data in a file. gnuplot makes it simple to quickly plot data stored in a plain text file. Typically this has either been generated from a computer model, or collected in an experiment. Here are two small text files containing data that can be used to follow the examples below.
gnuplot reads plain text files in table format: one row per line with columns separated by white space. Each row in the table is used to create one data point on the graph. The simplest file that gnuplot can read contains just two columns of data points,
> cat simple.txt 0.0 1.1 0.1 1.3 0.2 1.4 0.3 1.9
gnuplot can plot this file directly. The first column is used for the x coordinates and the second column is used for the y coordinates,
gnuplot> plot 'simple.txt' # note the quotes. single or double quotes can be used
This turns out to be very convenient because this is about the simplest format to write data to from within a program
// arrays x and y contain the x and y coordinates of our data
// C for(i = 0; i < n; i++) printf( fp, "%f %f\n", x[i], y[i] ); // C++ for(i = 0; i < n; i++) std::cout<<x[i]<<" "<<y[i]<<std::endl;
More Sophisticated Data Files
gnuplot can plot data from files even if there are more than two columns. By default, gnuplot will read the file and use the first two columns and ignore the rest.
> cat simple2.txt 0.0 1.1 2.4 5.4 0.1 1.3 2.7 6.3 0.2 1.4 2.9 7.5 0.3 1.9 3.1 9.1
Plotting this file will give the same graph as the previous file. However, to plot the 3rd column of data, we add the
gnuplot> plot 'simple2.txt' using 1:3
using modifier selects the columns to use in the plot, but can also be used to manipulate the data before it is plotted. For example, to multiply all y values by 4.5 and plotting the results,
gnuplot> plot 'simple2.txt' using 1:(4.5*$3)
Notice the parenthesis and the $3. If an integer is given, the integer is taken to be the column number to use. If a calculation involving columns is to be used, it must be enclosed with parenthesis and the columns are refered to with a '$' (similar to gawk). Calculations involving columns can use data from any column. The using command can be used to do some very powerful things
gnuplot> plot 'simple2.txt' using 1:($2*$1) # plot column 1 times column 2 vs column 1 gnuplot> plot 'simple2.txt', 'simple2.txt' using 1:(1.5 * $1 + 1.1) # plot column 2 vs column 1 and and the line 1.5x + 1.1 using x values from column 1 gnuplot> plot 'simple2.txt' using ($1 - 10):2 # plot column 2 vs column 1, but shift the x axis by 10 gnuplot> plot 'simple2.txt' using (2*$1):(5*exp( $2 ) ) # plot column 2 vs column 1, manipulating both first
Sometimes, it may be useful to only plot some of the points in a data file. For example, if the data file is very large, it can take a while for gnuplot to generate the plot. By plotting only every other point, or every 10th point, the plot time can be shortened. To limit the number of points that are plotted from a data file, use the
gnuplot> plot 'simple2.txt' every 2 # plot every other line in simple2.txt using columns 1 and 2 gnuplot> plot 'simple2.txt' every 3 using 1:3 # plot every 3rd line in simple2.txt using columns 1 and 3
plot Command Modifiers
In its simplest form the plot command just takes a list of functions or files to plot. However, each plot can be modified by specifying a set of modifiers. The modifiers are just given after the function or file to be plotted. For example,
every are modifiers that can be applied to data files.
- select which columns in a data file to plot
gnuplot> plot 'data.txt' using 1:3
- only plot some lines from a data file
gnuplot> plot 'data.txt' every 2
- set the string used for a plot in the key/legend
gnuplot> plot 'data.txt' title "raw data", using 1:(2*$2) title "processed data", x*x 'quadradic'
Plot Display Options
Gnuplot allows fine control over how plots are displayed. The plot display is controlled through options which are set with the
set command. The
set command takes an option name and its value.
Some options can be unset with the
Here is a short list of some common options
- title of plot
gnuplot> set title "string"
- xlabel, ylabel
- labels for x and y axis
gnuplot> set xlabel "string" gnuplot> set ylabel "string"
- xrange, yrange
- set the minimum and maximum values on the x and y axis. the range is specified in [min:max] format
gnuplot> set xrange [0:10] # set x axis range from 0 to 10 gnuplot> set yrange [-5:5] # set y axis range from -5 to 5 gnuplot> set xrange [:5] # set max on x-axis to 5. min is not changed
- xtics, ytics
- set values marked on the x or y axis.
gnuplot> set xtics 1 # mark every whole number on the x axis gnuplot> set ytics 2 # mark every even number on the y axis
- draw a grid on the plot canvas.
gnuplot> set grid #turn grid on gnuplot> unset grid #turn grid off
- set xrange, yrange, or both "automatically" based on domain and range of data being plotted
gnuplot> set autoscale x # autoscale the x axis gnuplot> set autoscale y # autoscale the y axis gnuplot> set autoscale # autoscale both axes
- set logscale for x, y, or both axes. note that gnuplot will complain if one of the axis ranges includes zero
gnuplot> set logscale x # logscale the x axis gnuplot> set logscale y # logscale the y axis gnuplot> set logscale # logscale both axes
- set the placement of the key/legend
gnuplot> set key left # move key to left of plot gnuplot> set key right # move key to right of plot gnuplot> set key top # move key to to top of plot gnuplot> set key bottom # move key to to bottom of plot gnuplot> unset key # remove key
- style data
- plot data points as points, lines, or points connected by lines (linespoints)
gnuplot> set style data points # plot data as points gnuplot> set style data lines # plot data as lines gnuplot> set style data linespoints # plot data as points connected by lines
- the number of samples gnuplot uses when evaluating functions to plot
gnuplot> plot sin(5*x) # peaks of sine wave are jagged because sample rate is too low gnuplot> set samples 1000 # evaluate function of 1000 points when creating plot gnuplot> rep # peaks are smoother because more points are used gnuplot> set samples 5000; rep # wow! even smoother
- set the output terminal (image file format)
gnuplot> set terminal png # write in png format gnuplot> set terminal postscript # write in postscript format gnuplot> set terminal jpeg # write in jpeg format gnuplot> set terminal x11 # send plot to X11 (view plot on the screen) gnuplot> set terminal x11 0 # send plot to X11 first x11 termainal (same as above) gnuplot> set terminal x11 1 # send plot to X11 second x11 termainal (will plot in a new window)
- set name of a file to write output to. this is used together with the
gnuplot> set output "filename.png" # write in png format gnuplot> set output "filename.postscript" # write in postscript format gnuplot> set output "filename.jpeg" # write in jpeg format
gnuplot supports saving plots as an image in several different formats including png, jpg, postscript, and pdf. To save a plot as an image, first set the
terminal option to the format you want to save the plot as, then set the
output option to the name of the file.
gnuplot> set terminal png gnuplot> set output "example.png"
Several different output "terminals" are supported, but different terminals are supported by different systems.
The commands for creation of a gnuplot graph can be assembled as a text file and run as a gnuplot script by executing a command:
Gnuplot will execute the commands within the file. Here, the common use is to set the output terminal to postscript or some other format and viewed by an external viewer, like Okular.
A second method is to load a file from within gnuplot with the load command.
gnuplot> load "script_file-name"
Using this method, additional changes may be made to the graph with the interactive command line.
A number of graphical user interfaces exist for gnuplot. A common interface within Linux is grace. The grace package can typically be found along with gnuplot and installed in a similar fashion as described above.
Graphical interfaces are categorically frowned upon by this Department and its collaborators.
- Visualize your data with gnuplot: an IBM tutorial
- gnuplotting: a blog of gnuplot examples and tips
- spplotters: a blog of gnuplot examples and tips
- gnuplot surprising: a blog of gnuplot examples and tips
- Linux Gazette: piping from C to gnuplot
- Gnuplot Tips Blog: Make publication quality plots with EPS terminal and include symbols