Difference between revisions of "Gnuplot"
(→plotting data from a file) |
(→plotting data from a file) |
||
Line 132: | Line 132: | ||
We often need to plot data that is stored in a file. Typically this has either been generated from a computer model, or collected in an experiment. gnuplot has a very powerful set of utilities for plotting data from a file. The data files used in the examples that follow can be downloaded here. | We often need to plot data that is stored in a file. Typically this has either been generated from a computer model, or collected in an experiment. gnuplot has a very powerful set of utilities for plotting data from a file. The data files used in the examples that follow can be downloaded here. | ||
− | + | [[file:simple.txt]] | |
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, | 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, |
Revision as of 06:33, 15 March 2012
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.
Contents
Installation
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
- Gentoo
# must run as root > emerge gnuplot
- Ubuntu
> sudo apt-get install gnuplot
- Fedora
# must run as root > yum install gnuplot
- Debian
# must run as root > apt-get install gnuplot
- Windows
- A windows install file can be downloaded from the gnuplot sourceforge page here
- Other
- Of course, gnuplot can be built from source on any other Unix based machine such as Mac OS X and Linux.
Plotting
gnuplot is a program created to plot stuff. You can plot functions or data. There are two commands for plotting, plot
and splot
. plot
is used to plot 2D functions while splot
is used to plot 3D functions.
plotting functions
The plot
command has the following form
gnuplot> plot [ function | 'filename' datafile-modifiers ]
gnuplot has great support for all common (and many uncommon) functions. For example, to plot sin(x),
gnuplot> plot sin(x)
Note that x
is a special variable that gnuplot reconizes as the dependent variable. Multiple functions can be plotted on the same graph, just separate each with a comma
gnuplot> plot sin(x), cos(x)
We control the what and how our plot is displayed by setting options. Options are set with the set
command. For example, to set the graph title, we set the title
option to a string containing the title.
gnuplot> set title "Sine and Cosine"
Notice that the graph does not change after you set the title option. gnuplot will not redraw the graph until we either issue another plot
command, or tell it to replot what we previously plotted with the ...replot
command.
gnuplot> replot # redraw the previous plot with new options
Other important options include xlabel
(the x-axis label), ylabel
(the y-axis label) and key
(sets the position of the legend). The legend is located in the top-right corner of the graph by default, which is in the way in the example above. To label the axis and move the key,
gnuplot> set xlabel "time (s)" gnuplot> set ylabel "current (A)" gnuplot> set key top left gnuplot> replot
By default, gnuplot will "autoscale" the y axis (when plotting data from a file, the x axis is autoscaled too). To set the x and y axis ranges, set the xrange
and yrange
options.
gnuplot> xrange[0:10] gnuplot> yrange[-2:2] gnuplot> replot
You can also set the range directly in the plot command.
gnuplot> plot [x=0:10] sin(x)
Autoscaling can always be re-enabled by setting the autoscale
option
gnuplot> set autoscale
or, to enable autoscaling for the x or y axis individually,
gnuplot> set autoscale x # autoscale the x axis gnuplot> set autoscale y # autoscale the y axis
gnuplot allows aritrarly complex functions to be plotted. These can either be built directly in the plot
command,
gnuplot> plot sin(x) + cos(2*x) + 3*sin(4*x)
or you can define a function and plot it
gnuplot> f(x) = sin(x) + cos(2*x) + 3*sin(4*x) gnuplot> plot f(x)
user-defined functions
gnuplot allows the user to define arbitrary functions. Function definitions have the following form
gnuplot> function_name(arg1, [arg2, ...] ) = expression
In the example above, we defined a function f(x)
that was a function of only one variable. However, we can define function of multiple variables. This can be very handy if we would like to plot a function with a variable parameter. For example, we may want to plot a Gaussian, but allow the center and width to be changed. We could define a Gauss function,
gnuplot> gauss(sigma, x0, x) = exp( - (x - x0)**2 / (2*sigma*sigma))
To plot this function for different values of x0
and sigma
, we just provide values directly in the plot command
gnuplot> plot gauss(0.5,0,x), gauss(0.5,1,x), gausss(1.0,1,x)
Note that, while we used the variable x<\code> in the definition of <code>gauss
, it is not required. More importantly, we can plot a function agains any of its arguments.
gnuplot> plot gauss(0.5,x,1)
gnuplot also also supports variables. You can set a variable, and then use it in plot commands or even function definitions. For example, we could set the width and position of a Gaussian function through two variables.
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 x0
and sigma
when it is evaluated. Note that the x0
and sigma
in the function gauss
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)
plotting data from a file
We often need to plot data that is stored in a file. Typically this has either been generated from a computer model, or collected in an experiment. gnuplot has a very powerful set of utilities for plotting data from a file. The data files used in the examples that follow can be downloaded here.
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,
gnuplot> plot 'simple.txt' # note the quote marks
This turns out to be fairly convenient because it is not very difficult to write code to write files in this format
// 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;
modifiers
- using
- select columns from
lines vs. points
By default, gnuplot will plot data as points. To change this, we can set the data style to lines or linespoints (actually, other styles exist, but are much less common).
Creating Pictures
gnuplot separates the concept of creating a plot and outputting a plot. Basically, all of the work required to construct a plot (reading in data points from a file, evaluating functions, etc) is independent of how the plot will be displayed. For example, you may want to the plot to be displayed on the screen, or written to a jpg. gnuplot uses the idea of terminals to support outputting plots to multiple formats. To output a plot to a jpeg, you tell gnuplot to write to the jpeg terminal type. To output a plot a png, you tell gnuplot to write to the png terminal type. You get the idea.
To change the terminal type, set the terminal
option. For example, to create a png, set the terminal type to png.
gnuplot> set terminal png