Node:Top, Next:, Previous:(dir), Up:(dir)

Master Menu

                            GNUPLOT
     
                 An Interactive Plotting Program
                  Thomas Williams & Colin Kelley
               Version 4.0 organized by: Lars Hecking
     
      Copyright (C) 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
     
            Mailing list for comments: gnuplot-info@lists.sourceforge.net
          Mailing list for bug reports: gnuplot-bugs@lists.sourceforge.net
     
              This manual was prepared by Dick Crawford
                        3 December 1998
     
     
     Major contributors (alphabetic order):
     


Node:gnuplot, Next:, Previous:Top, Up:Top

gnuplot


Node:Copyright, Next:, Previous:gnuplot, Up:gnuplot

Copyright

           Copyright (C) 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
     
     

Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation.

Permission to modify the software is granted, but not the right to distribute the complete modified source code. Modifications are to be distributed as patches to the released version. Permission to distribute binaries produced by compiling modified sources is granted, provided you

       1. distribute the corresponding source modifications from the
        released version in the form of a patch file along with the binaries,
       2. add special version identification to distinguish your version
        in addition to the base release version number,
       3. provide your name and address as the primary contact for the
        support of your modified version, and
       4. retain our contact information in regard to use of the base
        software.
     

Permission to distribute the released version of the source code along with corresponding source modifications in the form of a patch file is granted with same provisions 2 through 4 for binary distributions.

This software is provided "as is" without express or implied warranty to the extent permitted by applicable law.

           AUTHORS
     
     
           Original Software:
              Thomas Williams,  Colin Kelley.
     
     
           Gnuplot 2.0 additions:
              Russell Lang, Dave Kotz, John Campbell.
     
     
           Gnuplot 3.0 additions:
              Gershon Elber and many others.
     
     
           Gnuplot 4.0 additions:
              See list of contributors at head of this document.
     
     


Node:Introduction, Next:, Previous:Copyright, Up:gnuplot

Introduction

`gnuplot` is a command-driven interactive function and data plotting program. It is case sensitive (commands and function names written in lowercase are not the same as those written in CAPS). All command names may be abbreviated as long as the abbreviation is not ambiguous. Any number of commands may appear on a line (with the exception that `load` or call must be the final command), separated by semicolons (;). Strings are indicated with quotes. They may be either single or double quotation marks, e.g.,

           load "filename"
           cd 'dir'
     
     

although there are some subtle differences (see `syntax` for more details).

Any command-line arguments are assumed to be names of files containing `gnuplot` commands, with the exception of standard X11 arguments, which are processed first. Each file is loaded with the `load` command, in the order specified. `gnuplot` exits after the last file is processed. When no load files are named, `gnuplot` enters into an interactive mode. The special filename "-" is used to denote standard input. See "help batch/interactive" for more details.

Many `gnuplot` commands have multiple options. These options must appear in the proper order, although unwanted ones may be omitted in most cases. Thus if the entire command is "command a b c", then "command a c" will probably work, but "command c a" will fail.

Commands may extend over several input lines by ending each line but the last with a backslash (\). The backslash must be the _last_ character on each line. The effect is as if the backslash and newline were not there. That is, no white space is implied, nor is a comment terminated. Therefore, commenting out a continued line comments out the entire command (see `comments`). But note that if an error occurs somewhere on a multi-line command, the parser may not be able to locate precisely where the error is and in that case will not necessarily point to the correct line.

In this document, curly braces ({}) denote optional arguments and a vertical bar (|) separates mutually exclusive choices. `gnuplot` keywords or help topics are indicated by backquotes or `boldface` (where available). Angle brackets (<>) are used to mark replaceable tokens. In many cases, a default value of the token will be taken for optional arguments if the token is omitted, but these cases are not always denoted with braces around the angle brackets.

For on-line help on any topic, type help followed by the name of the topic or just help or `?` to get a menu of available topics.

The new `gnuplot` user should begin by reading about `plotting` (if on-line, type `help plotting`).

See the simple.dem demo, also available together with other demos on the web page http://gnuplot.sourceforge.net/demo/simple.html


Node:Seeking-assistance, Next:, Previous:Introduction, Up:gnuplot

Seeking-assistance

^ <a name="Seeking-assistance"></a>

There is a mailing list for `gnuplot` users. Note, however, that the newsgroup

           comp.graphics.apps.gnuplot
     

is identical to the mailing list (they both carry the same set of messages). We prefer that you read the messages through the newsgroup rather than subscribing to the mailing list. Instructions for subscribing to gnuplot mailing lists may be found via the gnuplot development website on SourceForge http://gnuplot.sourceforge.net

The address for mailing to list members is:

           gnuplot-info@lists.sourceforge.net
     
     

Bug reports and code contributions should be mailed to:

           gnuplot-bugs@lists.sourceforge.net
     
     

The list of those interested in beta-test versions is:

           gnuplot-beta@lists.sourceforge.net
     
     

There is also a perennially out-of-date gnuplot web page at http://www.gnuplot.info

Before seeking help, please check the FAQ (Frequently Asked Questions) list.

When posting a question, please include full details of the version of `gnuplot`, the machine, and operating system you are using. A _small_ script demonstrating the problem may be useful. Function plots are preferable to datafile plots. If email-ing to gnuplot-info, please state whether or not you are subscribed to the list, so that users who use news will know to email a reply to you. There is a form for such postings on the WWW site.


Node:What_is_New_in_Version_4.0, Next:, Previous:Seeking-assistance, Up:gnuplot

What is New in Version 4.0

The previous official release of gnuplot was version 3.7, with subversions up to 3.7.3. Gnuplot version 4.0 contains many new features, which were gradually introduced into a series of development snapshots 3.8a through 3.8k. This section lists major additions and gives a partial list of changes and minor new features. Sample gnuplot scripts demonstrating many of these features are provided in the gnuplot distribution, and are referred to here by name.


Node:Mouse_and_hotkey_support_in_interactive_terminals, Next:, Previous:What_is_New_in_Version_4.0, Up:What_is_New_in_Version_4.0

Mouse and hotkey support in interactive terminals

Interaction with the current plot via mouse and hotkeys is supported for the X11, OS/2 Presentation Manager, ggi and Windows terminals. See `mouse input` for more information on mousing. See help for bind for information on hotkeys. Also see the documentation for individual mousing terminals `ggi`, `pm`, `windows` and `x11`.

Here are briefly some useful hotkeys. Hit 'h' in the interactive interval for help. Hit 'm' to switch mousing on/off. Hit 'g' for grid, 'l' for log and 'e' for replot. Hit 'r' for ruler to measure peak distances (linear scale) or peak ratios (log scale), and '5' for polar coordinates inside a map. Zoom by mouse (MB3), and move in the zoom history by 'p', 'u', 'n'; hit 'a' for autoscale. Use other mouse buttons to put current mouse coordinates to clipboard (double click of MB1), add temporarily or permanently labels to the plot (middle mouse button MB2). Rotate a 3D surface by mouse. Hit spacebar to switch to the gnuplot command window.

Sample script: mousevariables.dem


Node:New_terminal_features, Next:pm3d, Previous:Mouse_and_hotkey_support_in_interactive_terminals, Up:What_is_New_in_Version_4.0

New terminal features

`aqua`: New terminal for Mac OS X. Requires AquaTerm 1.0 or later.

`epslatex`: New terminal. Prepares eps figures for inclusion in LaTeX documents.

`gif`: Support for this terminal has been dropped in favour of the `png` format for legal reasons; under usual configure conditions, old scripts that request gif will work but will produce a `png` file instead.

`ggi`: New full-screen interactive terminal for Linux. Interface to the General Graphics Interface Library.

`pdf`: New terminal exporting Adobe Portable Document Format. Requires libpdf.

`png` and `jpeg`: Support for both PNG and JPEG image output is provided by a new driver via libgd. The new driver supports many more features than the old png driver, including TrueType fonts. Requires libgd. postscript: The PostScript driver now provides an oblique symbol font, and allows run-time inclusion of embedded PostScript fonts. It also supports additional character encodings. See `postscript fontfile` and encoding.

Sample script: fontfile.dem

`svg`: New terminal exporting Scalable Vector Graphics.

`x11`: The X-windows driver now allows you to specify fonts, see `set term x11 x11_fonts`. There is no longer a limit to the number of x11 plot windows opened simultaneously, and each plot window can be given its own title. See `set term x11`.


Node:New_plot_style_pm3d, Next:, Previous:New_terminal_features, Up:What_is_New_in_Version_4.0

New plot style pm3d

The `splot` command is now capable of plotting 2D maps and 3D surfaces colored by greyscale or color palettes. See help for pm3d, palette, cbrange, `set view map`, `set colorbox` and palette.

Sample scripts: pm3d.dem pm3dcolors.dem pm3dgamma.dem


Node:New_plot_style_`filledcurves`, Next:, Previous:New_plot_style_pm3d, Up:What_is_New_in_Version_4.0

New plot style `filledcurves`

The style `filledcurves` allows to fill an area between the drawn curve and a horizontal line.

Sample script: fillcrvs.dem


Node:Filled_boxes, Next:, Previous:New_plot_style_`filledcurves`, Up:What_is_New_in_Version_4.0

Filled boxes

A solid color or patterned fill style can be set for any plot style that contains boxes. See `boxes`, `boxerrorbars`, `boxxyerrorbars`, `candlesticks`, `set style fill`.

Sample scripts: fillstyle.dem candlesticks.dem


Node:New_plot_option_smooth_frequency, Next:, Previous:Filled_boxes, Up:What_is_New_in_Version_4.0

New plot option smooth frequency

Input data can be filtered through several built-in routines for interpolation or approximation of data. See smooth, `frequency`, `unique`.

Sample scripts: step.dem mgr.dem


Node:Improved_text_options, Next:, Previous:New_plot_option_smooth_frequency, Up:What_is_New_in_Version_4.0

Improved text options

Most gnuplot plot commands that produce text labels now accept modifiers to specify text color, font, size, and rotation angle. See label. Not all terminal types support these options, however. The enhanced text mode previously available for the postscript and pm terminals has been extended to other terminal types as well. Terminal types currently supported include dumb, jpeg, pdf, pm, png, postscript, and x11. See `enhanced text`.

Sample scripts: textcolor.dem textrotate.dem


Node:More_text_encodings, Next:, Previous:Improved_text_options, Up:What_is_New_in_Version_4.0

More text encodings

Several terminals, including postscript, `x11` and `pm`, support additional text `encodings`: ISO 8859-1 (Latin 1), ISO 8859-2 (Latin 2), ISO 8859-15 (variant of 8859-1 with Euro sign), KOI8-R (cyrillic), and miscellaneous codepages. See encoding for more details.


Node:Arrows, Next:, Previous:More_text_encodings, Up:What_is_New_in_Version_4.0

Arrows

Single- or double-ended arrows can be placed on a plot individually from the command line or from a data file via the `plot with vectors` style. See arrow, `plotting styles vectors`.

Sample script: arrowstyle.dem


Node:Data_file_format, Next:, Previous:Arrows, Up:What_is_New_in_Version_4.0

Data file format

The new `set datafile` command can be used to specify information about the format of input data files, including the characters used to separate fields, to indicate comment lines, and to specify missing data. Gnuplot now attempts to recognize text fields with embedded blanks as single entities based on the datafile format settings. This allows input from csv (comma-separated value) files such as those exported by spreadsheet programs. See `set datafile`.


Node:Other_changes_and_additions, Next:, Previous:Data_file_format, Up:What_is_New_in_Version_4.0

Other changes and additions

The preferred syntax to undo a command `set <something>` is now `unset <something>` rather than `set no<something>`. The older form has been deprecated. Version 4.0 continues to allow the older syntax, but such backwards compatibility may be lost in future versions.

Commands of the form `set <something> <style>` also are deprectated in favor of the more general form `set style <something> <options>`. Many more plot elements now have style options of their own, including arrows, filled areas, lines, and points. There are also style settings for input data and formatting. Please see style, decimalsign, and `set datafile`.

Improved 2D and 3D clipping (hidden lines).

More consistent point styles and other default formatting styles across all terminals. Please use the test command to check default styles and plotting capabilities for the currently selected terminal type.

The label command supports associated points, and allows you to specify point style and text style (font, rotation, etc). User variables can be included in labels via format specifiers in the label text. See label.

New command `set view map` to select top-view 2D projection of 3D surface plot.

New commands `set term push` and `set term pop` to achieve platform independent restoring of the terminal after printing,

The `load` and save commands accept piped input and output, respectively.

The `history` command (for gnuplot with its own readline, not with GNU readline) now includes several useful options.

The built-in function `rand(x)` has been modified to allow explicit seeding of the pseudo-random number generator. See `random`.

The MS Windows package includes an additional executable `pgnuplot.exe` to support piping command through standard input, which is otherwise not available for graphical applications on this system.


Node:Accompanying_documentation, Previous:Other_changes_and_additions, Up:What_is_New_in_Version_4.0

Accompanying documentation

In directory docs/psdocs/ you may find new information in the gnuplot output postscript file guide, list of postscript symbols in different encodings.

Improved FAQ. Please read it before asking your question in a public forum.

There are plenty of new demos *.dem in the demo/ directory. Please run them, for example by

           load "all.dem"
     

before asking for help. Plots produced by the demo scripts can also be viewed at http://gnuplot.sourceforge.net/demo/


Node:Batch/Interactive_Operation, Next:, Previous:What_is_New_in_Version_4.0, Up:gnuplot

Batch/Interactive Operation

`gnuplot` may be executed in either batch or interactive modes, and the two may even be mixed together on many systems.

Any command-line arguments are assumed to be names of files containing `gnuplot` commands (with the exception of standard X11 arguments, which are processed first). Each file is loaded with the `load` command, in the order specified. `gnuplot` exits after the last file is processed. When no load files are named, `gnuplot` enters into an interactive mode. The special filename "-" is used to denote standard input.

Both the exit and quit commands terminate the current command file and `load` the next one, until all have been processed.

Examples:

To launch an interactive session:

           gnuplot
     
     

To launch a batch session using two command files "input1" and "input2":

           gnuplot input1 input2
     
     

To launch an interactive session after an initialization file "header" and followed by another command file "trailer":

           gnuplot header - trailer
     
     


Node:Command-line-editing, Next:, Previous:Batch/Interactive_Operation, Up:gnuplot

Command-line-editing

Command-line editing is supported by the Unix, Atari, VMS, MS-DOS and OS/2 versions of `gnuplot`. Also, a history mechanism allows previous commands to be edited and re-executed. After the command line has been edited, a newline or carriage return will enter the entire line without regard to where the cursor is positioned.

(The readline function in `gnuplot` is not the same as the readline used in GNU Bash and GNU Emacs. If the GNU version is desired, it may be selected instead of the `gnuplot` version at compile time.)

The editing commands are as follows:

           `Line-editing`:
     
     
           ^B    moves back a single character.
           ^F    moves forward a single character.
           ^A    moves to the beginning of the line.
           ^E    moves to the end of the line.
           ^H    and DEL delete the previous character.
           ^D    deletes the current character.
           ^K    deletes from current position to the end of line.
           ^L,^R redraws line in case it gets trashed.
           ^U    deletes the entire line.
           ^W    deletes from the current word to the end of line.
     
     
           `History`:
     
     
           ^P    moves back through history.
           ^N    moves forward through history.
     
     

On the IBM PC, the use of a TSR program such as DOSEDIT or CED may be desired for line editing. The default makefile assumes that this is the case; by default `gnuplot` will be compiled with no line-editing capability. If you want to use `gnuplot`'s line editing, set READLINE in the makefile and add readline.obj to the link file. The following arrow keys may be used on the IBM PC and Atari versions if readline is used:

           Left  Arrow      - same as ^B.
           Right Arrow      - same as ^F.
           Ctrl Left  Arrow - same as ^A.
           Ctrl Right Arrow - same as ^E.
           Up    Arrow      - same as ^P.
           Down  Arrow      - same as ^N.
     
     

The Atari version of readline defines some additional key aliases:

           Undo            - same as ^L.
           Home            - same as ^A.
           Ctrl Home       - same as ^E.
           Esc             - same as ^U.
           Help            - help plus return.
           Ctrl Help       - help.
     
     


Node:Comments, Next:, Previous:Command-line-editing, Up:gnuplot

Comments

Comments are supported as follows: a `#` may appear in most places in a line and `gnuplot` will ignore the rest of the line. It will not have this effect inside quotes, inside numbers (including complex numbers), inside command substitutions, etc. In short, it works anywhere it makes sense to work.

See also `set datafile commentschars` for specifying comment characters in data files.


Node:Coordinates, Next:, Previous:Comments, Up:gnuplot

Coordinates

The commands arrow, key, and label allow you to draw something at an arbitrary position on the graph. This position is specified by the syntax:

           {<system>} <x>, {<system>} <y> {,{<system>} <z>}
     
     

Each <system> can either be `first`, `second`, `graph` or `screen`.

`first` places the x, y, or z coordinate in the system defined by the left and bottom axes; `second` places it in the system defined by the second axes (top and right); `graph` specifies the area within the axes--0,0 is bottom left and 1,1 is top right (for splot, 0,0,0 is bottom left of plotting area; use negative z to get to the base--see ticslevel); and `screen` specifies the screen area (the entire area--not just the portion selected by size), with 0,0 at bottom left and 1,1 at top right.

If the coordinate system for x is not specified, `first` is used. If the system for y is not specified, the one used for x is adopted.

If one (or more) axis is timeseries, the appropriate coordinate should be given as a quoted time string according to the timefmt format string. See xdata and timefmt. `gnuplot` will also accept an integer expression, which will be interpreted as seconds from 1 January 2000.


Node:Environment, Next:, Previous:Coordinates, Up:gnuplot

Environment

A number of shell environment variables are understood by `gnuplot`. None of these are required, but may be useful.

If GNUTERM is defined, it is used as the name of the terminal type to be used. This overrides any terminal type sensed by `gnuplot` on start-up, but is itself overridden by the .gnuplot (or equivalent) start-up file (see `start-up`) and, of course, by later explicit changes.

On Unix, AmigaOS, AtariTOS, MS-DOS and OS/2, GNUHELP may be defined to be the pathname of the HELP file (gnuplot.gih).

On VMS, the logical name GNUPLOT$HELP should be defined as the name of the help library for `gnuplot`. The `gnuplot` help can be put inside any system help library, allowing access to help from both within and outside `gnuplot` if desired.

On Unix, HOME is used as the name of a directory to search for a .gnuplot file if none is found in the current directory. On AmigaOS, AtariTOS, MS-DOS, Windows and OS/2, GNUPLOT is used. On Windows, the NT-specific variable USERPROFILE is tried, too. VMS, SYS$LOGIN: is used. Type `help start-up`.

On Unix, PAGER is used as an output filter for help messages.

On Unix, AtariTOS and AmigaOS, SHELL is used for the shell command. On MS-DOS and OS/2, COMSPEC is used for the shell command.

On MS-DOS, if the BGI or Watcom interface is used, PCTRM is used to tell the maximum resolution supported by your monitor by setting it to S<max. horizontal resolution>. E.g. if your monitor's maximum resolution is 800x600, then use:

           set PCTRM=S800
     

If PCTRM is not set, standard VGA is used.

FIT_SCRIPT may be used to specify a `gnuplot` command to be executed when a fit is interrupted--see `fit`. FIT_LOG specifies the default filename of the logfile maintained by fit.

GNUPLOT_LIB may be used to define additional search directories for data and command files. The variable may contain a single directory name, or a list of directories separated by a platform-specific path separator, eg. ':' on Unix, or ';' on DOS/Windows/OS/2/Amiga platforms. The contents of GNUPLOT_LIB are appended to the loadpath variable, but not saved with the save and `save set` commands.

Several gnuplot terminal drivers access TrueType fonts via the gd library. For these drivers the font search path is controlled by the environmental variable GDFONTPATH. Furthermore, a default font for these drivers may be set via the environmental variable GNUPLOT_DEFAULT_GDFONT.

The postscript terminal uses its own font search path. It is controlled by the environmental variable GNUPLOT_FONTPATH. The format is the same as for GNUPLOT_LIB. The contents of GNUPLOT_FONTPATH are appended to the fontpath variable, but not saved with the save and `save set` commands.


Node:Expressions, Next:, Previous:Environment, Up:gnuplot

Expressions

In general, any mathematical expression accepted by C, FORTRAN, Pascal, or BASIC is valid. The precedence of these operators is determined by the specifications of the C programming language. White space (spaces and tabs) is ignored inside expressions.

Complex constants are expressed as {<real>,<imag>}, where <real> and <imag> must be numerical constants. For example, {3,2} represents 3 + 2i; {0,1} represents 'i' itself. The curly braces are explicitly required here.

Note that gnuplot uses both "real" and "integer" arithmetic, like FORTRAN and C. Integers are entered as "1", "-10", etc; reals as "1.0", "-10.0", "1e1", 3.5e-1, etc. The most important difference between the two forms is in division: division of integers truncates: 5/2 = 2; division of reals does not: 5.0/2.0 = 2.5. In mixed expressions, integers are "promoted" to reals before evaluation: 5/2e0 = 2.5. The result of division of a negative integer by a positive one may vary among compilers. Try a test like "print -5/2" to determine if your system chooses -2 or -3 as the answer.

The integer expression "1/0" may be used to generate an "undefined" flag, which causes a point to ignored; the `ternary` operator gives an example.

The real and imaginary parts of complex expressions are always real, whatever the form in which they are entered: in {3,2} the "3" and "2" are reals, not integers.


Node:Functions, Next:, Previous:Expressions, Up:Expressions

Functions

The functions in `gnuplot` are the same as the corresponding functions in the Unix math library, except that all functions accept integer, real, and complex arguments, unless otherwise noted.

For those functions that accept or return angles that may be given in either degrees or radians (sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(x) and arg(z)), the unit may be selected by angles, which defaults to radians.


Node:abs, Next:, Previous:Functions, Up:Functions
abs

The `abs(x)` function returns the absolute value of its argument. The returned value is of the same type as the argument.

For complex arguments, abs(x) is defined as the length of x in the complex plane [i.e., sqrt(real(x)**2 + imag(x)**2) ].


Node:acos, Next:, Previous:abs, Up:Functions
acos

The `acos(x)` function returns the arc cosine (inverse cosine) of its argument. `acos` returns its argument in radians or degrees, as selected by angles.


Node:acosh, Next:, Previous:acos, Up:Functions
acosh

The `acosh(x)` function returns the inverse hyperbolic cosine of its argument in radians.


Node:arg, Next:, Previous:acosh, Up:Functions
arg

The `arg(x)` function returns the phase of a complex number in radians or degrees, as selected by angles.


Node:asin, Next:, Previous:arg, Up:Functions
asin

The `asin(x)` function returns the arc sin (inverse sin) of its argument. `asin` returns its argument in radians or degrees, as selected by angles.


Node:asinh, Next:, Previous:asin, Up:Functions
asinh

The `asinh(x)` function returns the inverse hyperbolic sin of its argument in radians.


Node:atan, Next:, Previous:asinh, Up:Functions
atan

The `atan(x)` function returns the arc tangent (inverse tangent) of its argument. `atan` returns its argument in radians or degrees, as selected by angles.


Node:atan2, Next:, Previous:atan, Up:Functions
atan2

The `atan2(y,x)` function returns the arc tangent (inverse tangent) of the ratio of the real parts of its arguments. atan2 returns its argument in radians or degrees, as selected by angles, in the correct quadrant.


Node:atanh, Next:, Previous:atan2, Up:Functions
atanh

The `atanh(x)` function returns the inverse hyperbolic tangent of its argument in radians.


Node:besj0, Next:, Previous:atanh, Up:Functions
besj0

The `besj0(x)` function returns the j0th Bessel function of its argument. besj0 expects its argument to be in radians.


Node:besj1, Next:, Previous:besj0, Up:Functions
besj1

The `besj1(x)` function returns the j1st Bessel function of its argument. besj1 expects its argument to be in radians.


Node:besy0, Next:, Previous:besj1, Up:Functions
besy0

The `besy0(x)` function returns the y0th Bessel function of its argument. besy0 expects its argument to be in radians.


Node:besy1, Next:, Previous:besy0, Up:Functions
besy1

The `besy1(x)` function returns the y1st Bessel function of its argument. besy1 expects its argument to be in radians.


Node:ceil, Next:, Previous:besy1, Up:Functions
ceil

The `ceil(x)` function returns the smallest integer that is not less than its argument. For complex numbers, ceil returns the smallest integer not less than the real part of its argument.


Node:cos, Next:, Previous:ceil, Up:Functions
cos

The `cos(x)` function returns the cosine of its argument. `cos` accepts its argument in radians or degrees, as selected by angles.


Node:cosh, Next:, Previous:cos, Up:Functions
cosh

The `cosh(x)` function returns the hyperbolic cosine of its argument. cosh expects its argument to be in radians.


Node:erf, Next:, Previous:cosh, Up:Functions
erf

The `erf(x)` function returns the error function of the real part of its argument. If the argument is a complex value, the imaginary component is ignored. See erfc, inverf, and norm.


Node:erfc, Next:, Previous:erf, Up:Functions
erfc

The `erfc(x)` function returns 1.0 - the error function of the real part of its argument. If the argument is a complex value, the imaginary component is ignored. See `erf`, inverf, and norm.


Node:exp, Next:, Previous:erfc, Up:Functions
exp

The `exp(x)` function returns the exponential function of its argument (`e` raised to the power of its argument). On some implementations (notably suns), exp(-x) returns undefined for very large x. A user-defined function like safe(x) = x<-100 ? 0 : exp(x) might prove useful in these cases.


Node:floor, Next:, Previous:exp, Up:Functions
floor

The `floor(x)` function returns the largest integer not greater than its argument. For complex numbers, floor returns the largest integer not greater than the real part of its argument.


Node:gamma, Next:, Previous:floor, Up:Functions
gamma

The `gamma(x)` function returns the gamma function of the real part of its argument. For integer n, gamma(n+1) = n!. If the argument is a complex value, the imaginary component is ignored.


Node:ibeta, Next:, Previous:gamma, Up:Functions
ibeta

The `ibeta(p,q,x)` function returns the incomplete beta function of the real parts of its arguments. p, q > 0 and x in [0:1]. If the arguments are complex, the imaginary components are ignored.


Node:inverf, Next:, Previous:ibeta, Up:Functions
inverf

The `inverf(x)` function returns the inverse error function of the real part of its argument. See `erf` and invnorm.


Node:igamma, Next:, Previous:inverf, Up:Functions
igamma

The `igamma(a,x)` function returns the incomplete gamma function of the real parts of its arguments. a > 0 and x >= 0. If the arguments are complex, the imaginary components are ignored.


Node:imag, Next:, Previous:igamma, Up:Functions
imag

The `imag(x)` function returns the imaginary part of its argument as a real number.


Node:invnorm, Next:, Previous:imag, Up:Functions
invnorm

The `invnorm(x)` function returns the inverse normal distribution function of the real part of its argument. See norm.


Node:int, Next:, Previous:invnorm, Up:Functions
int

The `int(x)` function returns the integer part of its argument, truncated toward zero.


Node:lambertw, Next:, Previous:int, Up:Functions
lambertw

The lambertw function returns the value of the principal branch of Lambert's W function, which is defined by the equation (W(z)*exp(W(z))=z. z must be a real number with z >= -exp(-1).


Node:lgamma, Next:, Previous:lambertw, Up:Functions
lgamma

The `lgamma(x)` function returns the natural logarithm of the gamma function of the real part of its argument. If the argument is a complex value, the imaginary component is ignored.


Node:log, Next:, Previous:lgamma, Up:Functions
log

The `log(x)` function returns the natural logarithm (base `e`) of its argument. See log10.


Node:log10, Next:, Previous:log, Up:Functions
log10

The `log10(x)` function returns the logarithm (base 10) of its argument.


Node:norm, Next:, Previous:log10, Up:Functions
norm

The `norm(x)` function returns the normal distribution function (or Gaussian) of the real part of its argument. See invnorm, `erf` and erfc.


Node:rand, Next:, Previous:norm, Up:Functions
rand

`rand(0)` returns a pseudo random number in the interval [0:1] generated

                from the current value of two internal 32-bit seeds.
     

`rand(-1)` resets both seeds to a standard value. `rand(x)` for x>0 sets both seeds to a value based on the value of x. `rand({x,y})` for x>0 sets seed1 to x and seed2 to y. Note: This behavior has changed starting with gnuplot version 3.8l. Older scripts that expected rand(x>0) to produce sequential pseudo-random numbers from the same seeded sequence must be changed to call rand(0) instead.


Node:real, Next:, Previous:rand, Up:Functions
real

The `real(x)` function returns the real part of its argument.


Node:sgn, Next:, Previous:real, Up:Functions
sgn

The `sgn(x)` function returns 1 if its argument is positive, -1 if its argument is negative, and 0 if its argument is 0. If the argument is a complex value, the imaginary component is ignored.


Node:sin, Next:, Previous:sgn, Up:Functions
sin

The `sin(x)` function returns the sine of its argument. `sin` expects its argument to be in radians or degrees, as selected by angles.


Node:sinh, Next:, Previous:sin, Up:Functions
sinh

The `sinh(x)` function returns the hyperbolic sine of its argument. sinh expects its argument to be in radians.


Node:sqrt, Next:, Previous:sinh, Up:Functions
sqrt

The `sqrt(x)` function returns the square root of its argument.


Node:tan, Next:, Previous:sqrt, Up:Functions
tan

The `tan(x)` function returns the tangent of its argument. `tan` expects its argument to be in radians or degrees, as selected by angles.


Node:tanh, Next:, Previous:tan, Up:Functions
tanh

The `tanh(x)` function returns the hyperbolic tangent of its argument. tanh expects its argument to be in radians.

A few additional functions are also available.


Node:column, Next:, Previous:tanh, Up:Functions
column

`column(x)` may be used only in expressions as part of using manipulations to fits or datafile plots. See using.


Node:defined, Next:, Previous:column, Up:Functions
defined

`defined(X)` returns 1 if a variable named X has been defined, otherwise it returns 0.


Node:tm_hour, Next:, Previous:defined, Up:Functions
tm_hour

The tm_hour function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the hour (an integer in the range 0-23) as a real.


Node:tm_mday, Next:, Previous:tm_hour, Up:Functions
tm_mday

The tm_mday function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the day of the month (an integer in the range 1-31) as a real.


Node:tm_min, Next:, Previous:tm_mday, Up:Functions
tm_min

The tm_min function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the minute (an integer in the range 0-59) as a real.


Node:tm_mon, Next:, Previous:tm_min, Up:Functions
tm_mon

The tm_mon function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the month (an integer in the range 0-11) as a real.


Node:tm_sec, Next:, Previous:tm_mon, Up:Functions
tm_sec

The tm_sec function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the second (an integer in the range 0-59) as a real.


Node:tm_wday, Next:, Previous:tm_sec, Up:Functions
tm_wday

The tm_wday function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the day of the week (an integer in the range 0-6) as a real.


Node:tm_yday, Next:, Previous:tm_wday, Up:Functions
tm_yday

The tm_yday function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the day of the year (an integer in the range 1-366) as a real.


Node:tm_year, Next:, Previous:tm_yday, Up:Functions
tm_year

The tm_year function interprets its argument as a time, in seconds from 1 Jan 2000. It returns the year (an integer) as a real.


Node:valid, Next:, Previous:tm_year, Up:Functions
valid

`valid(x)` may be used only in expressions as part of using manipulations to fits or datafile plots. See using.

See also airfoil.dem: use of functions and complex variables for airfoils demo.


Node:Random_number_generator, Previous:valid, Up:Functions
Random number generator

The behavior of the built-in function `rand(x)` has changed as of version 3.8l. Older scripts that expected rand(x>0) to produce sequential pseudo-random numbers from the same seeded sequence must be changed to call rand(0) instead. The current behavior is as follows:

      `rand(0)`  returns a pseudo random number in the interval [0:1] generated
                 from the current value of two internal 32-bit seeds.
      `rand(-1)` resets both seeds to a standard value.
      `rand(x)`  for x>0 sets both seeds to a value based on the value of x.
      `rand({x,y})` for x>0 sets seed1 to x and seed2 to y.
     
     


Node:Operators, Next:, Previous:Functions, Up:Expressions

Operators

The operators in `gnuplot` are the same as the corresponding operators in the C programming language, except that all operators accept integer, real, and complex arguments, unless otherwise noted. The ** operator (exponentiation) is supported, as in FORTRAN.

Parentheses may be used to change order of evaluation.


Node:Unary, Next:, Previous:Operators, Up:Operators
Unary

The following is a list of all the unary operators and their usages:

         Symbol      Example    Explanation
           -           -a          unary minus
           +           +a          unary plus (no-operation)
           ~           ~a        * one's complement
           !           !a        * logical negation
           !           a!        * factorial
           $           $3        * call arg/column during using manipulation
     
     

(*) Starred explanations indicate that the operator requires an integer argument.

Operator precedence is the same as in Fortran and C. As in those languages, parentheses may be used to change the order of operation. Thus -2**2 = -4, but (-2)**2 = 4.

The factorial operator returns a real number to allow a greater range.


Node:Binary, Next:, Previous:Unary, Up:Operators
Binary

The following is a list of all the binary operators and their usages:

         Symbol       Example      Explanation
           **          a**b          exponentiation
           *           a*b           multiplication
           /           a/b           division
           %           a%b         * modulo
           +           a+b           addition
           -           a-b           subtraction
           ==          a==b          equality
           !=          a!=b          inequality
           <           a<b           less than
           <=          a<=b          less than or equal to
           >           a>b           greater than
           >=          a>=b          greater than or equal to
           &           a&b         * bitwise AND
           ^           a^b         * bitwise exclusive OR
           |           a|b         * bitwise inclusive OR
           &&          a&&b        * logical AND
           ||          a||b        * logical OR
     
     

(*) Starred explanations indicate that the operator requires integer arguments.

Logical AND (&&) and OR (||) short-circuit the way they do in C. That is, the second `&&` operand is not evaluated if the first is false; the second `||` operand is not evaluated if the first is true.


Node:Ternary, Previous:Binary, Up:Operators
Ternary

There is a single ternary operator:

         Symbol       Example      Explanation
           ?:          a?b:c     ternary operation
     
     

The ternary operator behaves as it does in C. The first argument (a), which must be an integer, is evaluated. If it is true (non-zero), the second argument (b) is evaluated and returned; otherwise the third argument (c) is evaluated and returned.

The ternary operator is very useful both in constructing piecewise functions and in plotting points only when certain conditions are met.

Examples:

Plot a function that is to equal sin(x) for 0 <= x < 1, 1/x for 1 <= x < 2, and undefined elsewhere:

           f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0
           plot f(x)
     

Note that `gnuplot` quietly ignores undefined values, so the final branch of the function (1/0) will produce no plottable points. Note also that f(x) will be plotted as a continuous function across the discontinuity if a line style is used. To plot it discontinuously, create separate functions for the two pieces. (Parametric functions are also useful for this purpose.)

For data in a file, plot the average of the data in columns 2 and 3 against the datum in column 1, but only if the datum in column 4 is non-negative:

           plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 )
     
     

Please see using for an explanation of the using syntax.


Node:User-defined, Previous:Operators, Up:Expressions

User-defined

New user-defined variables and functions of one through five variables may be declared and used anywhere, including on the `plot` command itself.

User-defined function syntax:

           <func-name>( <dummy1> {,<dummy2>} ... {,<dummy5>} ) = <expression>
     
     

where <expression> is defined in terms of <dummy1> through <dummy5>.

User-defined variable syntax:

           <variable-name> = <constant-expression>
     
     

Examples:

           w = 2
           q = floor(tan(pi/2 - 0.1))
           f(x) = sin(w*x)
           sinc(x) = sin(pi*x)/(pi*x)
           delta(t) = (t == 0)
           ramp(t) = (t > 0) ? t : 0
           min(a,b) = (a < b) ? a : b
           comb(n,k) = n!/(k!*(n-k)!)
           len3d(x,y,z) = sqrt(x*x+y*y+z*z)
           plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x)
     
     

Note that the variable `pi` is already defined. But it is in no way magic; you may redefine it to be whatever you like.

Valid names are the same as in most programming languages: they must begin with a letter, but subsequent characters may be letters, digits, "$", or "_". Note, however, that the `fit` mechanism uses several variables with names that begin "FIT_". It is safest to avoid using such names. "FIT_LIMIT", however, is one that you may wish to redefine. See the documentation on `fit` for details.

See `show functions`, variables, and `fit`.


Node:Glossary, Next:, Previous:Expressions, Up:gnuplot

Glossary

Throughout this document an attempt has been made to maintain consistency of nomenclature. This cannot be wholly successful because as `gnuplot` has evolved over time, certain command and keyword names have been adopted that preclude such perfection. This section contains explanations of the way some of these terms are used.

A "page" or "screen" is the entire area addressable by `gnuplot`. On a monitor, it is the full screen; on a plotter, it is a single sheet of paper.

A screen may contain one or more "plots". A plot is defined by an abscissa and an ordinate, although these need not actually appear on it, as well as the margins and any text written therein.

A plot contains one "graph". A graph is defined by an abscissa and an ordinate, although these need not actually appear on it.

A graph may contain one or more "lines". A line is a single function or data set. "Line" is also a plotting style. The word will also be used in sense "a line of text". Presumably the context will remove any ambiguity.

The lines on a graph may have individual names. These may be listed together with a sample of the plotting style used to represent them in the "key", sometimes also called the "legend".

The word "title" occurs with multiple meanings in `gnuplot`. In this document, it will always be preceded by the adjective "plot", "line", or "key" to differentiate among them.

A 2-d graph may have up to four labelled axes. The names of the four axes for these usages are "x" for the axis along the bottom border of the plot, "y" for the left border, "x2" for the top border, and "y2" for the right border.

A 3-d graph may have up to three labelled axes - "x", "y" and "z". It is not possible to say where on the graph any particular axis will fall because you can change the direction from which the graph is seen with view.

When discussing data files, the term "record" will be resurrected and used to denote a single line of text in the file, that is, the characters between newline or end-of-record characters. A "point" is the datum extracted from a single record. A "datablock" is a set of points from consecutive records, delimited by blank records. A line, when referred to in the context of a data file, is a subset of a datablock.


Node:mouse_input, Next:, Previous:Glossary, Up:gnuplot

mouse input

The `x11`, `pm`, `windows`, and `ggi` terminals allow interaction with the current plot using the mouse. They also support the definition of hotkeys to activate pre-defined functions by hitting a single key while the mouse focus is in the active plot window. It is even possible to combine mouse input with `batch` command scripts, by invoking the command `pause mouse` and then using the mouse variables returned by mouse clicking as parameters for subsequent scripted actions. See bind and variables. See also the command `set mouse`.


Node:bind, Next:, Previous:mouse_input, Up:mouse_input

bind

The bind allows defining or redefining a hotkey, i.e. a sequence of gnuplot commands which will be executed when a certain key or key sequence is pressed while the driver's window has the input focus. Note that bind is only available if gnuplot was compiled with `mouse` support and it is used by all mouse-capable terminals. Bindings overwrite the builtin bindings (like in every real editor), except <space> and 'q' which cannot be rebound. Mouse buttons cannot be rebound.

Note that multikey-bindings with modifiers have to be quoted.

Syntax:

           bind [<key-sequence>] ["<gnuplot commands>"]
           bind!
     
     

Examples:

- set bindings:

         bind a "replot"
         bind "ctrl-a" "plot x*x"
         bind "ctrl-alt-a" 'print "great"'
         bind Home "set view 60,30; replot"
     
     

- show bindings:

         bind "ctrl-a"          # shows the binding for ctrl-a
         bind                   # shows all bindings
     
     

- remove bindings:

         bind "ctrl-alt-a" ""   # removes binding for ctrl-alt-a
                                  (note that builtins cannot be removed)
         bind!                  # installs default (builtin) bindings
     
     

- bind a key to toggle something:

       v=0
       bind "ctrl-r" "v=v+1;if(v%2)set term x11 noraise; else set term x11 raise"
     
     

Modifiers (ctrl / alt) are case insensitive, keys not:

         ctrl-alt-a == CtRl-alT-a
         ctrl-alt-a != ctrl-alt-A
     
     

List of modifiers (alt == meta):

         ctrl, alt
     
     

List of supported special keys:

        "BackSpace", "Tab", "Linefeed", "Clear", "Return", "Pause", "Scroll_Lock",
        "Sys_Req", "Escape", "Delete", "Home", "Left", "Up", "Right", "Down",
        "PageUp", "PageDown", "End", "Begin",
     
     
        "KP_Space", "KP_Tab", "KP_Enter", "KP_F1", "KP_F2", "KP_F3", "KP_F4",
        "KP_Home", "KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_PageUp",
        "KP_PageDown", "KP_End", "KP_Begin", "KP_Insert", "KP_Delete", "KP_Equal",
        "KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal",
        "KP_Divide",
     
     
        "KP_1" - "KP_9", "F1" - "F12"
     
     

See also help for `mouse` and if.


Node:mouse_variables, Previous:bind, Up:mouse_input

mouse_variables

When mousing is active, clicking in the active window will set several user variables that can be accessed from the gnuplot command line. The coordinates of the mouse at the time of the click are stored in MOUSE_X MOUSE_Y MOUSE_X2 and MOUSE_Y2. The mouse button clicked, and any meta-keys active at that time, are stored in MOUSE_BUTTON MOUSE_SHIFT MOUSE_ALT and MOUSE_CTRL. These variables are set to undefined at the start of every plot, and only become defined in the event of a mouse click in the active plot window. To determine from a script if the mouse has been clicked in the active plot window, it is sufficient to test for any one of these variables being defined.

           plot 'something'
           pause mouse
           if (defined(MOUSE_BUTTON)) call 'something_else'; \
           else print "No mouse click."
     
     


Node:Plotting, Next:, Previous:mouse_input, Up:gnuplot

Plotting

There are three `gnuplot` commands which actually create a plot: `plot`, `splot` and replot. `plot` generates 2-d plots, `splot` generates 3-d plots (actually 2-d projections, of course), and replot appends its arguments to the previous `plot` or `splot` and executes the modified command.

Much of the general information about plotting can be found in the discussion of `plot`; information specific to 3-d can be found in the `splot` section.

`plot` operates in either rectangular or polar coordinates - see `set polar` for details of the latter. `splot` operates only in rectangular coordinates, but the mapping command allows for a few other coordinate systems to be treated. In addition, the using option allows both `plot` and `splot` to treat almost any coordinate system you'd care to define.

`plot` also lets you use each of the four borders - x (bottom), x2 (top), y (left) and y2 (right) - as an independent axis. The `axes` option lets you choose which pair of axes a given function or data set is plotted against. A full complement of `set` commands exists to give you complete control over the scales and labelling of each axis. Some commands have the name of an axis built into their names, such as xlabel. Other commands have one or more axis names as options, such as `set logscale xy`. Commands and options controlling the z axis have no effect on 2-d graphs.

`splot` can plot surfaces and contours in addition to points and/or lines. In addition to `splot`, see isosamples for information about defining the grid for a 3-d function; `splot datafile` for information about the requisite file structure for 3-d data values; and contour and cntrparam for information about contours.

In `splot`, control over the scales and labels of the axes are the same as with `plot`, except that commands and options controlling the x2 and y2 axes have no effect whereas of course those controlling the z axis do take effect.

`splot` allows plotting of binary and matrix data, but only for specific data formats. See `splot` for details.


Node:Start-up, Next:, Previous:Plotting, Up:gnuplot

Start-up

^ <a name="start-up"></a>

When `gnuplot` is run, it looks for an initialization file to load. This file is called `.gnuplot` on Unix and AmigaOS systems, and `GNUPLOT.INI` on other systems. If this file is not found in the current directory, the program will look for it in the HOME directory (under AmigaOS, Atari(single)TOS, MS-DOS, Windows and OS/2, the environment variable `GNUPLOT` should contain the name of this directory; on Windows NT, it will use `USERPROFILE` if GNUPLOT isn't defined). Note: if NOCWDRC is defined during the installation, `gnuplot` will not read from the current directory.

If the initialization file is found, `gnuplot` executes the commands in it. These may be any legal `gnuplot` commands, but typically they are limited to setting the terminal and defining frequently-used functions or variables.


Node:Substitution, Next:, Previous:Start-up, Up:gnuplot

Substitution

Command-line substitution is specified by a system command enclosed in backquotes. This command is spawned and the output it produces replaces the name of the command (and backquotes) on the command line. Some implementations also support pipes; see special-filenames.

Command-line substitution can be used anywhere on the `gnuplot` command line, except inside strings delimited by single quotes.

Example:

This will run the program `leastsq` and replace `leastsq` (including backquotes) on the command line with its output:

           f(x) = `leastsq`
     
     

or, in VMS

           f(x) = `run leastsq`
     
     

These will generate labels with the current time and userid:

           set label "generated on `date +%Y-%m-%d`by `whoami`" at 1,1
           set timestamp "generated on %Y-%m-%d by `whoami`"
     
     


Node:Syntax, Next:, Previous:Substitution, Up:gnuplot

Syntax

The general rules of syntax and punctuation in `gnuplot` are that keywords and options are order-dependent. Options and any accompanying parameters are separated by spaces whereas lists and coordinates are separated by commas. Ranges are separated by colons and enclosed in brackets [], text and file names are enclosed in quotes, and a few miscellaneous things are enclosed in parentheses. Braces {} are used for a few special purposes.

Commas are used to separate coordinates on the `set` commands arrow, key, and label; the list of variables being fitted (the list after the `via` keyword on the `fit` command); lists of discrete contours or the loop parameters which specify them on the cntrparam command; the arguments of the `set` commands dgrid3d, dummy, isosamples, offsets, origin, samples, size, `time`, and view; lists of tics or the loop parameters which specify them; the offsets for titles and axis labels; parametric functions to be used to calculate the x, y, and z coordinates on the `plot`, replot and `splot` commands; and the complete sets of keywords specifying individual plots (data sets or functions) on the `plot`, replot and `splot` commands.

Parentheses are used to delimit sets of explicit tics (as opposed to loop parameters) and to indicate computations in the using filter of the `fit`, `plot`, replot and `splot` commands.

(Parentheses and commas are also used as usual in function notation.)

Brackets are used to delimit ranges, whether they are given on `set`, `plot` or `splot` commands.

Colons are used to separate extrema in `range` specifications (whether they are given on `set`, `plot` or `splot` commands) and to separate entries in the using filter of the `plot`, replot, `splot` and `fit` commands.

Semicolons are used to separate commands given on a single command line.

Braces are used in text to be specially processed by some terminals, like postscript. They are also used to denote complex numbers: {3,2} = 3 + 2i.

Text may be enclosed in single- or double-quotes. Backslash processing of sequences like \n (newline) and \345 (octal character code) is performed for double-quoted strings, but not for single-quoted strings.

The justification is the same for each line of a multi-line string. Thus the center-justified string

           "This is the first line of text.\nThis is the second line."
     

will produce

                            This is the first line of text.
                               This is the second line.
     

but

           'This is the first line of text.\nThis is the second line.'
     

will produce

               This is the first line of text.\nThis is the second line.
     
     

Filenames may be entered with either single- or double-quotes. In this manual the command examples generally single-quote filenames and double-quote other string tokens for clarity.

At present you should not embed \n inside {} when using the postscript terminal.

The EEPIC, Imagen, Uniplex, LaTeX, and TPIC drivers allow a newline to be specified by \\ in a single-quoted string or \\\\ in a double-quoted string.

Back-quotes are used to enclose system commands for substitution.


Node:Time/Date_data, Previous:Syntax, Up:gnuplot

Time/Date data

^ <a name="Time/Date data"></a> ^ <a name="Time/date"></a>

`gnuplot` supports the use of time and/or date information as input data. This feature is activated by the commands `set xdata time`, `set ydata time`, etc.

Internally all times and dates are converted to the number of seconds from the year 2000. The command timefmt defines the format for all inputs: data files, ranges, tics, label positions--in short, anything that accepts a data value must receive it in this format. Since only one input format can be in force at a given time, all time/date quantities being input at the same time must be presented in the same format. Thus if both x and y data in a file are time/date, they must be in the same format.

The conversion to and from seconds assumes Universal Time (which is the same as Greenwich Standard Time). There is no provision for changing the time zone or for daylight savings. If all your data refer to the same time zone (and are all either daylight or standard) you don't need to worry about these things. But if the absolute time is crucial for your application, you'll need to convert to UT yourself.

Commands like xrange will re-interpret the integer according to timefmt. If you change timefmt, and then `show` the quantity again, it will be displayed in the new timefmt. For that matter, if you give the deactivation command (like xdata), the quantity will be shown in its numerical form.

The command `set format` defines the format that will be used for tic labels, whether or not the specified axis is time/date.

If time/date information is to be plotted from a file, the using option _must_ be used on the `plot` or `splot` command. These commands simply use white space to separate columns, but white space may be embedded within the time/date string. If you use tabs as a separator, some trial-and-error may be necessary to discover how your system treats them.

The following example demonstrates time/date plotting.

Suppose the file "data" contains records like

           03/21/95 10:00  6.02e23
     
     

This file can be plotted by

           set xdata time
           set timefmt "%m/%d/%y"
           set xrange ["03/21/95":"03/22/95"]
           set format x "%m/%d"
           set timefmt "%m/%d/%y %H:%M"
           plot "data" using 1:3
     
     

which will produce xtic labels that look like "03/21".

See the descriptions of each command for more details.


Node:Commands, Next:, Previous:gnuplot, Up:Top

Commands

This section lists the commands acceptable to `gnuplot` in alphabetical order. Printed versions of this document contain all commands; on-line versions may not be complete. Indeed, on some systems there may be no commands at all listed under this heading.

Note that in most cases unambiguous abbreviations for command names and their options are permissible, i.e., "`p f(x) w li`" instead of "`plot f(x) with lines`".

In the syntax descriptions, braces ({}) denote optional arguments and a vertical bar (|) separates mutually exclusive choices.


Node:cd, Next:, Previous:Commands, Up:Commands

cd

The cd command changes the working directory.

Syntax:

           cd '<directory-name>'
     
     

The directory name must be enclosed in quotes.

Examples:

           cd 'subdir'
           cd ".."
     
     

DOS users _must_ use single-quotes--backslash [\] has special significance inside double-quotes. For example,

           cd "c:\newdata"
     

fails, but

           cd 'c:\newdata'
     

works as expected.


Node:call, Next:, Previous:cd, Up:Commands

call

The call command is identical to the load command with one exception: you can have up to ten additional parameters to the command (delimited according to the standard parser rules) which can be substituted into the lines read from the file. As each line is read from the called input file, it is scanned for the sequence `$` (dollar-sign) followed by a digit (0-9). If found, the sequence is replaced by the corresponding parameter from the call command line. If the parameter was specified as a string in the call line, it is substituted without its enclosing quotes. `$` followed by any character other than a digit will be that character. E.g. use `$$` to get a single `$`. Providing more than ten parameters on the call command line will cause an error. A parameter that was not provided substitutes as nothing. Files being called may themselves contain call or `load` commands.

The call command _must_ be the last command on a multi-command line.

Syntax:

           call "<input-file>" <parameter-0> <parm-1> ... <parm-9>
     
     

The name of the input file must be enclosed in quotes, and it is recommended that parameters are similarly enclosed in quotes (future versions of gnuplot may treat quoted and unquoted arguments differently).

Example:

If the file 'calltest.gp' contains the line:

           print "p0=$0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=x$7x"
     
     

entering the command:

           call 'calltest.gp' "abcd" 1.2 + "'quoted'" -- "$2"
     
     

will display:

           p0=abcd p1=1.2 p2=+ p3='quoted' p4=- p5=- p6=$2 p7=xx
     
     

NOTE: there is a clash in syntax with the datafile using callback operator. Use `$$n` or `column(n)` to access column n from a datafile inside a called datafile plot.


Node:clear, Next:, Previous:call, Up:Commands

clear

The clear command erases the current screen or output device as specified by output. This usually generates a formfeed on hardcopy devices. Use terminal to set the device type.

For some terminals clear erases only the portion of the plotting surface defined by size, so for these it can be used in conjunction with multiplot to create an inset.

Example:

           set multiplot
           plot sin(x)
           set origin 0.5,0.5
           set size 0.4,0.4
           clear
           plot cos(x)
           unset multiplot
     
     

Please see multiplot, size, and origin for details of these commands.


Node:exit, Next:, Previous:clear, Up:Commands

exit

The commands exit and quit and the END-OF-FILE character will exit the current `gnuplot` command file and `load` the next one. See "help batch/interactive" for more details.

Each of these commands will clear the output device (as does the clear command) before exiting.


Node:fit, Next:, Previous:exit, Up:Commands

fit

The `fit` command can fit a user-defined function to a set of data points (x,y) or (x,y,z), using an implementation of the nonlinear least-squares (NLLS) Marquardt-Levenberg algorithm. Any user-defined variable occurring in the function body may serve as a fit parameter, but the return type of the function must be real.

Syntax:

           fit {[xrange] {[yrange]}} <function> '<datafile>'
               {datafile-modifiers}
               via '<parameter file>' | <var1>{,<var2>,...}
     
     

Ranges may be specified to temporarily limit the data which is to be fitted; any out-of-range data points are ignored. The syntax is

           [{dummy_variable=}{<min>}{:<max>}],
     

analogous to `plot`; see ranges.

<function> is any valid `gnuplot` expression, although it is usual to use a previously user-defined function of the form f(x) or f(x,y).

<datafile> is treated as in the `plot` command. All the `plot datafile` modifiers (using, every,...) except smooth and the deprecated thru are applicable to `fit`. See `plot datafile`.

The default data formats for fitting functions with a single independent variable, y=f(x), are {x:}y or x:y:s; those formats can be changed with the datafile using qualifier. The third item (a column number or an expression), if present, is interpreted as the standard deviation of the corresponding y value and is used to compute a weight for the datum, 1/s**2. Otherwise, all data points are weighted equally, with a weight of one. Note that if you don't specify a using option at all, no y deviations are read from the datafile even if it does have a third column, so you'll always get unit weights.

To fit a function with two independent variables, z=f(x,y), the required format is using with four items, x:y:z:s. The complete format must be given--no default columns are assumed for a missing token. Weights for each data point are evaluated from 's' as above. If error estimates are not available, a constant value can be specified as a constant expression (see using), e.g., `using 1:2:3:(1)`.

Multiple datasets may be simultaneously fit with functions of one independent variable by making y a 'pseudo-variable', e.g., the dataline number, and fitting as two independent variables. See multi-branch.

The `via` qualifier specifies which parameters are to be adjusted, either directly, or by referencing a parameter file.

Examples:

           f(x) = a*x**2 + b*x + c
           g(x,y) = a*x**2 + b*y**2 + c*x*y
           FIT_LIMIT = 1e-6
           fit f(x) 'measured.dat' via 'start.par'
           fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
           fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
           fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c
     
     

After each iteration step, detailed information about the current state of the fit is written to the display. The same information about the initial and final states is written to a log file, "fit.log". This file is always appended to, so as to not lose any previous fit history; it should be deleted or renamed as desired. By using the command `set fit logfile`, the name of the log file can be changed.

If gnuplot was built with this option, and you activated it using `set fit errorvariables`, the error for each fitted parameter will be stored in a variable named like the parameter, but with "_err" appended. Thus the errors can be used as input for further computations.

The fit may be interrupted by pressing Ctrl-C (any key but Ctrl-C under MSDOS and Atari Multitasking Systems). After the current iteration completes, you have the option to (1) stop the fit and accept the current parameter values, (2) continue the fit, (3) execute a `gnuplot` command as specified by the environment variable FIT_SCRIPT. The default for FIT_SCRIPT is replot, so if you had previously plotted both the data and the fitting function in one graph, you can display the current state of the fit.

Once `fit` has finished, the update command may be used to store final values in a file for subsequent use as a parameter file. See update for details.


Node:adjustable_parameters, Next:, Previous:fit, Up:fit

adjustable parameters

There are two ways that `via` can specify the parameters to be adjusted, either directly on the command line or indirectly, by referencing a parameter file. The two use different means to set initial values.

Adjustable parameters can be specified by a comma-separated list of variable names after the `via` keyword. Any variable that is not already defined is created with an initial value of 1.0. However, the fit is more likely to converge rapidly if the variables have been previously declared with more appropriate starting values.

In a parameter file, each parameter to be varied and a corresponding initial value are specified, one per line, in the form

           varname = value
     
     

Comments, marked by '#', and blank lines are permissible. The special form

           varname = value       # FIXED
     
     

means that the variable is treated as a 'fixed parameter', initialized by the parameter file, but not adjusted by `fit`. For clarity, it may be useful to designate variables as fixed parameters so that their values are reported by `fit`. The keyword `# FIXED` has to appear in exactly this form.


Node:short_introduction, Next:, Previous:adjustable_parameters, Up:fit

short introduction

`fit` is used to find a set of parameters that 'best' fits your data to your user-defined function. The fit is judged on the basis of the sum of the squared differences or 'residuals' (SSR) between the input data points and the function values, evaluated at the same places. This quantity is often called 'chisquare' (i.e., the Greek letter chi, to the power of 2). The algorithm attempts to minimize SSR, or more precisely, WSSR, as the residuals are 'weighted' by the input data errors (or 1.0) before being squared; see `fit error_estimates` for details.

That's why it is called 'least-squares fitting'. Let's look at an example to see what is meant by 'non-linear', but first we had better go over some terms. Here it is convenient to use z as the dependent variable for user-defined functions of either one independent variable, z=f(x), or two independent variables, z=f(x,y). A parameter is a user-defined variable that `fit` will adjust, i.e., an unknown quantity in the function declaration. Linearity/non-linearity refers to the relationship of the dependent variable, z, to the parameters which `fit` is adjusting, not of z to the independent variables, x and/or y. (To be technical, the second {and higher} derivatives of the fitting function with respect to the parameters are zero for a linear least-squares problem).

For linear least-squares (LLS), the user-defined function will be a sum of simple functions, not involving any parameters, each multiplied by one parameter. NLLS handles more complicated functions in which parameters can be used in a large number of ways. An example that illustrates the difference between linear and nonlinear least-squares is the Fourier series. One member may be written as

          z=a*sin(c*x) + b*cos(c*x).
     

If a and b are the unknown parameters and c is constant, then estimating values of the parameters is a linear least-squares problem. However, if c is an unknown parameter, the problem is nonlinear.

In the linear case, parameter values can be determined by comparatively simple linear algebra, in one direct step. However LLS is a special case which is also solved along with more general NLLS problems by the iterative procedure that `gnuplot` uses. `fit` attempts to find the minimum by doing a search. Each step (iteration) calculates WSSR with a new set of parameter values. The Marquardt-Levenberg algorithm selects the parameter values for the next iteration. The process continues until a preset criterion is met, either (1) the fit has "converged" (the relative change in WSSR is less than FIT_LIMIT), or (2) it reaches a preset iteration count limit, FIT_MAXITER (see variables). The fit may also be interrupted and subsequently halted from the keyboard (see `fit`).

Often the function to be fitted will be based on a model (or theory) that attempts to describe or predict the behaviour of the data. Then `fit` can be used to find values for the free parameters of the model, to determine how well the data fits the model, and to estimate an error range for each parameter. See `fit error_estimates`.

Alternatively, in curve-fitting, functions are selected independent of a model (on the basis of experience as to which are likely to describe the trend of the data with the desired resolution and a minimum number of parameters*functions.) The `fit` solution then provides an analytic representation of the curve.

However, if all you really want is a smooth curve through your data points, the smooth option to `plot` may be what you've been looking for rather than `fit`.


Node:error_estimates, Next:, Previous:short_introduction, Up:fit

error estimates

In `fit`, the term "error" is used in two different contexts, data error estimates and parameter error estimates.

Data error estimates are used to calculate the relative weight of each data point when determining the weighted sum of squared residuals, WSSR or chisquare. They can affect the parameter estimates, since they determine how much influence the deviation of each data point from the fitted function has on the final values. Some of the `fit` output information, including the parameter error estimates, is more meaningful if accurate data error estimates have been provided.

The 'statistical overview' describes some of the `fit` output and gives some background for the 'practical guidelines'.


Node:statistical_overview, Next:, Previous:error_estimates, Up:error_estimates
statistical overview

The theory of non-linear least-squares (NLLS) is generally described in terms of a normal distribution of errors, that is, the input data is assumed to be a sample from a population having a given mean and a Gaussian (normal) distribution about the mean with a given standard deviation. For a sample of sufficiently large size, and knowing the population standard deviation, one can use the statistics of the chisquare distribution to describe a "goodness of fit" by looking at the variable often called "chisquare". Here, it is sufficient to say that a reduced chisquare (chisquare/degrees of freedom, where degrees of freedom is the number of datapoints less the number of parameters being fitted) of 1.0 is an indication that the weighted sum of squared deviations between the fitted function and the data points is the same as that expected for a random sample from a population characterized by the function with the current value of the parameters and the given standard deviations.

If the standard deviation for the population is not constant, as in counting statistics where variance = counts, then each point should be individually weighted when comparing the observed sum of deviations and the expected sum of deviations.

At the conclusion `fit` reports 'stdfit', the standard deviation of the fit, which is the rms of the residuals, and the variance of the residuals, also called 'reduced chisquare' when the data points are weighted. The number of degrees of freedom (the number of data points minus the number of fitted parameters) is used in these estimates because the parameters used in calculating the residuals of the datapoints were obtained from the same data.

To estimate confidence levels for the parameters, one can use the minimum chisquare obtained from the fit and chisquare statistics to determine the value of chisquare corresponding to the desired confidence level, but considerably more calculation is required to determine the combinations of parameters which produce such values.

Rather than determine confidence intervals, `fit` reports parameter error estimates which are readily obtained from the variance-covariance matrix after the final iteration. By convention, these estimates are called "standard errors" or "asymptotic standard errors", since they are calculated in the same way as the standard errors (standard deviation of each parameter) of a linear least-squares problem, even though the statistical conditions for designating the quantity calculated to be a standard deviation are not generally valid for the NLLS problem. The asymptotic standard errors are generally over-optimistic and should not be used for determining confidence levels, but are useful for qualitative purposes.

The final solution also produces a correlation matrix, which gives an indication of the correlation of parameters in the region of the solution; if one parameter is changed, increasing chisquare, does changing another compensate? The main diagonal elements, autocorrelation, are all 1; if all parameters were independent, all other elements would be nearly 0. Two variables which completely compensate each other would have an off-diagonal element of unit magnitude, with a sign depending on whether the relation is proportional or inversely proportional. The smaller the magnitudes of the off-diagonal elements, the closer the estimates of the standard deviation of each parameter would be to the asymptotic standard error.


Node:practical_guidelines, Previous:statistical_overview, Up:error_estimates
practical guidelines

If you have a basis for assigning weights to each data point, doing so lets you make use of additional knowledge about your measurements, e.g., take into account that some points may be more reliable than others. That may affect the final values of the parameters.

Weighting the data provides a basis for interpreting the additional `fit` output after the last iteration. Even if you weight each point equally, estimating an average standard deviation rather than using a weight of 1 makes WSSR a dimensionless variable, as chisquare is by definition.

Each fit iteration will display information which can be used to evaluate the progress of the fit. (An '*' indicates that it did not find a smaller WSSR and is trying again.) The 'sum of squares of residuals', also called 'chisquare', is the WSSR between the data and your fitted function; `fit` has minimized that. At this stage, with weighted data, chisquare is expected to approach the number of degrees of freedom (data points minus parameters). The WSSR can be used to calculate the reduced chisquare (WSSR/ndf) or stdfit, the standard deviation of the fit, sqrt(WSSR/ndf). Both of these are reported for the final WSSR.

If the data are unweighted, stdfit is the rms value of the deviation of the data from the fitted function, in user units.

If you supplied valid data errors, the number of data points is large enough, and the model is correct, the reduced chisquare should be about unity. (For details, look up the 'chi-squared distribution' in your favourite statistics reference.) If so, there are additional tests, beyond the scope of this overview, for determining how well the model fits the data.

A reduced chisquare much larger than 1.0 may be due to incorrect data error estimates, data errors not normally distributed, systematic measurement errors, 'outliers', or an incorrect model function. A plot of the residuals, e.g., `plot 'datafile' using 1:($2-f($1))`, may help to show any systematic trends. Plotting both the data points and the function may help to suggest another model.

Similarly, a reduced chisquare less than 1.0 indicates WSSR is less than that expected for a random sample from the function with normally distributed errors. The data error estimates may be too large, the statistical assumptions may not be justified, or the model function may be too general, fitting fluctuations in a particular sample in addition to the underlying trends. In the latter case, a simpler function may be more appropriate.

You'll have to get used to both `fit` and the kind of problems you apply it to before you can relate the standard errors to some more practical estimates of parameter uncertainties or evaluate the significance of the correlation matrix.

Note that `fit`, in common with most NLLS implementations, minimizes the weighted sum of squared distances (y-f(x))**2. It does not provide any means to account for "errors" in the values of x, only in y. Also, any "outliers" (data points outside the normal distribution of the model) will have an exaggerated effect on the solution.


Node:fit_controlling, Next:, Previous:error_estimates, Up:fit

fit controlling

There are a number of `gnuplot` variables that can be defined to affect `fit`. Those which can be defined once `gnuplot` is running are listed under 'control_variables' while those defined before starting `gnuplot` are listed under 'environment_variables'.


Node:control_variables, Next:, Previous:fit_controlling, Up:fit_controlling
control variables

The default epsilon limit (1e-5) may be changed by declaring a value for

           FIT_LIMIT
     

When the sum of squared residuals changes between two iteration steps by a factor less than this number (epsilon), the fit is considered to have 'converged'.

The maximum number of iterations may be limited by declaring a value for

           FIT_MAXITER
     

A value of 0 (or not defining it at all) means that there is no limit.

If you need even more control about the algorithm, and know the Marquardt-Levenberg algorithm well, there are some more variables to influence it. The startup value of `lambda` is normally calculated automatically from the ML-matrix, but if you want to, you may provide your own one with

           FIT_START_LAMBDA
     

Specifying FIT_START_LAMBDA as zero or less will re-enable the automatic selection. The variable

           FIT_LAMBDA_FACTOR
     

gives the factor by which `lambda` is increased or decreased whenever the chi-squared target function increased or decreased significantly. Setting FIT_LAMBDA_FACTOR to zero re-enables the default factor of 10.0.

Other variables with the FIT_ prefix may be added to `fit`, so it is safer not to use that prefix for user-defined variables.

The variables FIT_SKIP and FIT_INDEX were used by earlier releases of `gnuplot` with a 'fit' patch called `gnufit` and are no longer available. The datafile every modifier provides the functionality of FIT_SKIP. FIT_INDEX was used for multi-branch fitting, but multi-branch fitting of one independent variable is now done as a pseudo-3D fit in which the second independent variable and using are used to specify the branch. See multi-branch.


Node:environment_variables, Previous:control_variables, Up:fit_controlling
environment variables

The environment variables must be defined before `gnuplot` is executed; how to do so depends on your operating system.

           FIT_LOG
     

changes the name (and/or path) of the file to which the fit log will be written from the default of "fit.log" in the working directory. The default value can be overwritten using the command `set fitlogfile`.

           FIT_SCRIPT
     

specifies a command that may be executed after an user interrupt. The default is replot, but a `plot` or `load` command may be useful to display a plot customized to highlight the progress of the fit.


Node:multi-branch, Next:, Previous:fit_controlling, Up:fit

multi-branch

In multi-branch fitting, multiple data sets can be simultaneously fit with functions of one independent variable having common parameters by minimizing the total WSSR. The function and parameters (branch) for each data set are selected by using a 'pseudo-variable', e.g., either the dataline number (a 'column' index of -1) or the datafile index (-2), as the second independent variable.

Example: Given two exponential decays of the form, z=f(x), each describing a different data set but having a common decay time, estimate the values of the parameters. If the datafile has the format x:z:s, then

          f(x,y) = (y==0) ? a*exp(-x/tau) : b*exp(-x/tau)
          fit f(x,y) 'datafile' using  1:-1:2:3  via a, b, tau
     
     

For a more complicated example, see the file "hexa.fnc" used by the "fit.dem" demo.

Appropriate weighting may be required since unit weights may cause one branch to predominate if there is a difference in the scale of the dependent variable. Fitting each branch separately, using the multi-branch solution as initial values, may give an indication as to the relative effect of each branch on the joint solution.


Node:starting_values, Next:, Previous:multi-branch, Up:fit

starting values

Nonlinear fitting is not guaranteed to converge to the global optimum (the solution with the smallest sum of squared residuals, SSR), and can get stuck at a local minimum. The routine has no way to determine that; it is up to you to judge whether this has happened.

`fit` may, and often will get "lost" if started far from a solution, where SSR is large and changing slowly as the parameters are varied, or it may reach a numerically unstable region (e.g., too large a number causing a floating point overflow) which results in an "undefined value" message or `gnuplot` halting.

To improve the chances of finding the global optimum, you should set the starting values at least roughly in the vicinity of the solution, e.g., within an order of magnitude, if possible. The closer your starting values are to the solution, the less chance of stopping at another minimum. One way to find starting values is to plot data and the fitting function on the same graph and change parameter values and replot until reasonable similarity is reached. The same plot is also useful to check whether the fit stopped at a minimum with a poor fit.

Of course, a reasonably good fit is not proof there is not a "better" fit (in either a statistical sense, characterized by an improved goodness-of-fit criterion, or a physical sense, with a solution more consistent with the model.) Depending on the problem, it may be desirable to `fit` with various sets of starting values, covering a reasonable range for each parameter.


Node:tips, Previous:starting_values, Up:fit

tips

Here are some tips to keep in mind to get the most out of `fit`. They're not very organized, so you'll have to read them several times until their essence has sunk in.

The two forms of the `via` argument to `fit` serve two largely distinct purposes. The `via "file"` form is best used for (possibly unattended) batch operation, where you just supply the startup values in a file and can later use update to copy the results back into another (or the same) parameter file.

The `via var1, var2, ...` form is best used interactively, where the command history mechanism may be used to edit the list of parameters to be fitted or to supply new startup values for the next try. This is particularly useful for hard problems, where a direct fit to all parameters at once won't work without good starting values. To find such, you can iterate several times, fitting only some of the parameters, until the values are close enough to the goal that the final fit to all parameters at once will work.

Make sure that there is no mutual dependency among parameters of the function you are fitting. For example, don't try to fit a*exp(x+b), because a*exp(x+b)=a*exp(b)*exp(x). Instead, fit either a*exp(x) or exp(x+b).

A technical issue: the parameters must not be too different in magnitude. The larger the ratio of the largest and the smallest absolute parameter values, the slower the fit will converge. If the ratio is close to or above the inverse of the machine floating point precision, it may take next to forever to converge, or refuse to converge at all. You will have to adapt your function to avoid this, e.g., replace 'parameter' by '1e9*parameter' in the function definition, and divide the starting value by 1e9.

If you can write your function as a linear combination of simple functions weighted by the parameters to be fitted, by all means do so. That helps a lot, because the problem is no longer nonlinear and should converge with only a small number of iterations, perhaps just one.

Some prescriptions for analysing data, given in practical experimentation courses, may have you first fit some functions to your data, perhaps in a multi-step process of accounting for several aspects of the underlying theory one by one, and then extract the information you really wanted from the fitting parameters of those functions. With `fit