Gnuplot—the Grandfather of Graphing Utilities

In these columns, I have covered several different scientific packages for doing calculations in many different areas of research. I also have looked at various packages that handle graphical representation of these calculations. But, one package that I've never looked at before is gnuplot (http://www.gnuplot.info). Gnuplot has been around since the mid-1980s, making it one of the oldest graphical plotting programs around. Because it has been around so long, it's been ported to most of the operating systems that you might conceivably use. This month, I take a look at the basics of gnuplot and show different ways to use it.

Gnuplot is a command-line-driven program. As such, it has been co-opted to provide graphic capabilities in several other applications, such as octave. Thus, you may have used gnuplot without even realizing you were doing so. You can use gnuplot in several ways. It not only can accept input data to plot, but it also can plot functions. Gnuplot can send its output either to the screen (in both a static file format display or an interactive display), or it can send output to any of a large number of file formats. Additionally, lots of functions are available to customize your plots, changing the labels and axes, among other things.

Let's start by installing gnuplot. Binaries are available for many different operating systems. Most Linux distributions also should come with a package for gnuplot, so installation should be a breeze. If you want the latest and greatest features available, you always can download the source code and build gnuplot from scratch.

Once gnuplot is installed, you can start it by executing the command gnuplot. When executed this way, you are launched into an interactive session. Let's start by trying to plot a basic function. You should be able to plot any mathematical function that would be accepted in C, FORTRAN or BASIC. These mathematical expressions can be built up from built-in functions like abs(x), cos(x) or Bessel. You can use integer, real and complex data types as arguments to these functions.

When using gnuplot to generate a plot, you either can have all of the commands in a single file and hand them in to gnuplot as a script, or you can start gnuplot up in interactive mode and issue these commands one at a time in the command environment. To run a gnuplot script, you simply need to add it at the end of the command when you run gnuplot—for example:


gnuplot script_to_run

When you run gnuplot in interactive mode, you can quit your session with the command quit. The two most basic commands are plot and splot. plot generates two-dimensional plots, and splot generates three-dimensional plots. To plot a simple function, you can use:


plot sin(x)/x

This generates a plot window, displaying the graphical results (Figure 1). If you want to add a title to the plot, you can add this option to the plot command:


plot sin(x)/x title "Example 1"

Figure 1. Plotting commands open a new window for display.

Figure 2. A Basic Plot of sin(x)/x

You even can plot multiple expressions on the same plot window with:


plot sin(x)/x title "Example 1", sin(x) title "Example 2"

Figure 3. You can plot multiple functions on the same graph.

To plot a three-dimensional graph, simply hand in an expression with two independent variables to splot, such as:


splot x**2+y**2

Figure 4. Gnuplot even can handle 3-D plots.

If you run into a problem, the first place to look is the built-in help function. To get help with the plot command, execute the command:


help plot

This pulls up the help documentation that gnuplot has regarding the plot command.

This is fine if you are just trying to see what some expression looks like when it is plotted out, but in real science, you often collect data in experiments that need to be plotted so you can do some graphical analysis and get ideas as to what may be happening. Gnuplot can handle this type of plotting too. To do so, you simply need to hand in the filename of the file containing the data to be plotted. This file should have the data elements arranged in columns, where the columns are separated by white space of some kind. Any lines that start with # are treated as comments by gnuplot and are ignored. If your data file contains several data columns, you can select which columns are pulled in to be plotted as options to the plot or splot functions. As an example, say you have a data file that has the temperature and pressure for each day. You can plot the temperature with:


plot "weather.dat" using 1:2 title "Temperature"

If you want to get the pressure graph, you would use:


plot "weather.dat" using 1:3 title "Pressure"

If you want to plot all three columns, you can use:


splot "weather.dat"

There are two ways of customizing your plots when using gnuplot. The first is to use options to the plot and splot commands. In this case, you define things like the title of the plot, the axes or the style. The styles available can be lines, points, linespoints, impulses, dots, steps, fsteps, histeps, errorbars, xerrorbars, yerrorbars or xyerrorbars. To use one of the styles, you can include the option with the with keyword. So, if you want to plot both the lines and points of your graph, you could add with linespoints to your plot command. You also can use shortcuts for these options. For with, you can use w. For the title option, you can use t. For the using option shown earlier, you can use u.

The second option for customizing your plots is to use the set command. With this command, you are free to set the values for several graphing options. Using the second option, you can set all types of options, like the title, xlabel, yrange, xtics or key, among other options. For example, you can set the y-range with:


set yrange [20:500]

After setting the various plotting options, you need to tell gnuplot to redraw the plot you are working on. You can do this with the command:


replot

Many of these set options also use shortcuts. For example, the shortcut version of the above command is:


set yr [20:500]

Gnuplot is not only a capable utility to plot data and functions, but it also can do some analysis on the data being plotted. For example, you can get gnuplot to do curve fitting on the data. To do so, you first need to define a function, as well as some initial guesses before calling the fit command. An example would look like this:


f1=a1*tanh(x/b1)
a1=300; b1=0.005;
fit f1(x) 'data_file.dat' using 1:2 via a1,b1

This tells gnuplot to try to fit the data from the columns 1 and 2 from the file data_file.dat to the function defined by f1(x).

When you have an environment created for a particular research area, you can save all of the settings you may have set up with the command save. This command essentially saves off all of the gnuplot commands you issued to the text file. This text file can be loaded into a new gnuplot session with the load command. This will take all of the commands saved to the save file and re-run them in the new session.

You always can see what options have been set by using the command show. This command shows you what values have been set within the current session. To see all of the options, use the command show all. When you are playing with options, you sometimes can get yourself into an odd condition. Just remember that you always can reset any values created with the set by using the reset command. This command resets these session options to their default values.

Sometimes you may need to interact with the system on which gnuplot is running. In those cases, you need to start a shell session from gnuplot. There are two ways to do so. The first is to use the command system. In this case, you can hand in a string containing the system commands that need to be run outside of gnuplot. The other option is to use the command !. This command actually is just a shortcut for the command system, and the commands can be used interchangeably.

This article has covered only the most basic functions available in gnuplot. It's definitely worth your time to look deeper into the documentation to see what else it can do for you in analyzing your data. Even if you don't use gnuplot directly, learning more about it will help you when you use other applications like octave. Take this article as a jumping-off point and explore just what is possible in data analysis.

Load Disqus comments