gnuplot 4.2
An Interactive Plotting Program
Thomas Williams & Colin Kelley
Version 4.2 organized by: Hans-Bernhard Bröker, Ethan A Merritt, and others
Major contributors (alphabetic order):
Hans-Bernhard Bröker
John Campbell
Robert Cunningham
David Denholm
Gershon Elber
Roger Fearick
Carsten Grammes
Lucas Hart
Lars Hecking
Thomas Koenig
David Kotz
Ed Kubaitis
Russell Lang
Timothée Lecomte
Alexander Lehmann
Alexander Mai
Ethan A Merritt
Petr Mikulík
Carsten Steger
Tom Tkacik
Jos Van der Woude
Alex Woo
James R. Van Zandt
Johannes Zellner
Copyright © 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
Copyright © 2004 - 2009 various authors
Mailing list for comments: gnuplot-info@lists.sourceforge.net
Mailing list for bug reports: gnuplot-bugs@lists.sourceforge.net
Web access (preferred): http://sourceforge.net/projects/gnuplot

This manual was originally prepared by Dick Crawford.
1 September 2009

Contents

I  Gnuplot
1 Copyright
2 Introduction
3 Seeking-assistance
4 New features introduced in version 4.2
 4.1 New plot styles
  4.1.1 Histogram
  4.1.2 Label plots
  4.1.3 Image data
  4.1.4 Filled curves
  4.1.5 Vectors
 4.2 Input from binary data files
 4.3 New plot elements
  4.3.1 RGB colors
  4.3.2 Arbitrary rectangles
 4.4 String handling
  4.4.1 String and text data read from datafiles
  4.4.2 User-defined string variables, operators, and functions
 4.5 Macros
 4.6 Auto-layout of multiple plots on a page
 4.7 Internal variables
 4.8 New or revised terminal drivers
  4.8.1 wxt
  4.8.2 emf
  4.8.3 gif, jpeg, png
  4.8.4 postscript
  4.8.5 ai
  4.8.6 epslatex, pslatex, pstex
  4.8.7 windows
 4.9 Canvas size
5 Backwards compatibility
6 Features introduced in version 4.0
 6.1 Mouse and hotkey support in interactive terminals
 6.2 New terminals
 6.3 New plot style pm3d
 6.4 Filled boxes
 6.5 New plot option smooth frequency
 6.6 Improved text options
 6.7 More text encodings
 6.8 Arrows
 6.9 Data file format
 6.10 New commands
 6.11 Other changes and additions
 6.12 Accompanying documentation
7 Batch/Interactive Operation
8 Command-line-editing
9 Comments
10 Coordinates
11 Datastrings
12 Environment
13 Expressions
 13.1 Functions
  13.1.1 Random number generator
 13.2 Operators
  13.2.1 Unary
  13.2.2 Binary
  13.2.3 Ternary
 13.3 Gnuplot-defined variables
 13.4 User-defined variables and functions
14 Glossary
15 Linetype, colors, and styles
 15.1 Colorspec
  15.1.1 Linecolor variable
16 Mouse input
 16.1 Bind
 16.2 Mouse variables
17 Plotting
18 Start-up
19 String constants and string variables
20 Substitution and Command line macros
 20.1 Substitution of system commands in backquotes
 20.2 Substitution of string variables as macros
 20.3 String variables, macros, and command line substitution
21 Syntax
 21.1 Quote Marks
22 Time/Date data
II  Commands
23 Cd
24 Call
25 Clear
26 Exit
27 Fit
 27.1 Adjustable parameters
 27.2 Short introduction
 27.3 Error estimates
  27.3.1 Statistical overview
  27.3.2 Practical guidelines
 27.4 Control
  27.4.1 Control variables
  27.4.2 Environment variables
 27.5 Multi-branch
 27.6 Starting values
 27.7 Tips
28 Help
29 History
30 If
31 Load
32 Lower
33 Pause
34 Plot
 34.1 Data
  34.1.1 Binary
  34.1.2 Binary general
  34.1.2.1 Array
  34.1.2.2 Record
  34.1.2.3 Format
  34.1.2.4 Endian
  34.1.2.5 Filetype
    34.1.2.5.1 Avs
    34.1.2.5.2 Edf
  34.1.2.6 Keywords
    34.1.2.6.1 Scan
    34.1.2.6.2 Transpose
    34.1.2.6.3 Dx, dy, dz
    34.1.2.6.4 Flipx, flipy, flipz
    34.1.2.6.5 Origin
    34.1.2.6.6 Center
    34.1.2.6.7 Rotate
    34.1.2.6.8 Perpendicular
  34.1.2.7 Binary examples
  34.1.3 Every
  34.1.4 Example datafile
  34.1.5 Index
  34.1.6 Smooth
  34.1.6.1 Acsplines
  34.1.6.2 Bezier
  34.1.6.3 Csplines
  34.1.6.4 Sbezier
  34.1.6.5 Unique
  34.1.6.6 Frequency
  34.1.7 Special-filenames
  34.1.8 Thru
  34.1.9 Using
  34.1.9.1 Using_examples
  34.1.9.2 Using title
  34.1.9.3 Xticlabels
  34.1.9.4 X2ticlabels
  34.1.9.5 Yticlabels
  34.1.9.6 Y2ticlabels
  34.1.9.7 Zticlabels
 34.2 Errorbars
 34.3 Errorlines
 34.4 Parametric
 34.5 Ranges
 34.6 Title
 34.7 With
35 Print
36 Pwd
37 Quit
38 Raise
39 Replot
40 Reread
41 Reset
42 Save
43 Set-show
 43.1 Angles
 43.2 Arrow
 43.3 Autoscale
  43.3.1 Parametric mode
  43.3.2 Polar mode
 43.4 Bars
 43.5 Bmargin
 43.6 Border
 43.7 Boxwidth
 43.8 Clabel
 43.9 Clip
 43.10 Cntrparam
 43.11 Color box
 43.12 Contour
 43.13 Data style
 43.14 Datafile
  43.14.1 Set datafile fortran
  43.14.2 Set datafile missing
  43.14.3 Set datafile separator
  43.14.4 Set datafile commentschars
  43.14.5 Set datafile binary
 43.15 Decimalsign
 43.16 Dgrid3d
 43.17 Dummy
 43.18 Encoding
 43.19 Fit
 43.20 Fontpath
 43.21 Format
  43.21.1 Gprintf
  43.21.2 Format specifiers
  43.21.3 Time/date specifiers
 43.22 Function style
 43.23 Functions
 43.24 Grid
 43.25 Hidden3d
 43.26 Historysize
 43.27 Isosamples
 43.28 Key
 43.29 Label
 43.30 Lmargin
 43.31 Loadpath
 43.32 Locale
 43.33 Logscale
 43.34 Macros
 43.35 Mapping
 43.36 Margin
 43.37 Mouse
  43.37.1 X11 mouse
 43.38 Multiplot
 43.39 Mx2tics
 43.40 Mxtics
 43.41 My2tics
 43.42 Mytics
 43.43 Mztics
 43.44 Offsets
 43.45 Origin
 43.46 Output
 43.47 Parametric
 43.48 Plot
 43.49 Pm3d
  43.49.1 Depthorder
 43.50 Palette
  43.50.1 Rgbformulae
  43.50.2 Defined
  43.50.3 Functions
  43.50.4 File
  43.50.5 Gamma correction
  43.50.6 Postscript
  43.50.7 Colornames
 43.51 Pointsize
 43.52 Polar
 43.53 Print
 43.54 Object
 43.55 Rmargin
 43.56 Rrange
 43.57 Samples
 43.58 Size
 43.59 Style
  43.59.1 Set style arrow
  43.59.2 Set style data
  43.59.3 Set style fill
  43.59.4 Set style function
  43.59.5 Set style increment
  43.59.6 Set style line
  43.59.7 Plotting styles
  43.59.8 Set style rectangle
  43.59.8.1 Boxerrorbars
  43.59.8.2 Boxes
  43.59.8.3 Boxxyerrorbars
  43.59.8.4 Candlesticks
  43.59.8.5 Dots
  43.59.8.6 Filledcurves
  43.59.8.7 Financebars
  43.59.8.8 Fsteps
  43.59.8.9 Histeps
  43.59.8.10 Histograms
    43.59.8.10.1 Newhistogram
  43.59.8.11 Image
  43.59.8.12 Impulses
  43.59.8.13 Labels
  43.59.8.14 Lines
  43.59.8.15 Linespoints
  43.59.8.16 Points
  43.59.8.17 Steps
  43.59.8.18 Rgbimage
  43.59.8.19 Vectors
  43.59.8.20 Xerrorbars
  43.59.8.21 Xyerrorbars
  43.59.8.22 Yerrorbars
  43.59.8.23 Xerrorlines
  43.59.8.24 Xyerrorlines
  43.59.8.25 Yerrorlines
 43.60 Surface
 43.61 Table
 43.62 Terminal
 43.63 Termoption
 43.64 Tics
 43.65 Ticslevel
 43.66 Ticscale
 43.67 Timestamp
 43.68 Timefmt
 43.69 Title
 43.70 Tmargin
 43.71 Trange
 43.72 Urange
 43.73 Variables
 43.74 Version
 43.75 View
 43.76 Vrange
 43.77 X2data
 43.78 X2dtics
 43.79 X2label
 43.80 X2mtics
 43.81 X2range
 43.82 X2tics
 43.83 X2zeroaxis
 43.84 Xdata
 43.85 Xdtics
 43.86 Xlabel
 43.87 Xmtics
 43.88 Xrange
 43.89 Xtics
  43.89.1 Xtics time_data
  43.89.2 Xtics rangelimited
 43.90 Xyplane
 43.91 Xzeroaxis
 43.92 Y2data
 43.93 Y2dtics
 43.94 Y2label
 43.95 Y2mtics
 43.96 Y2range
 43.97 Y2tics
 43.98 Y2zeroaxis
 43.99 Ydata
 43.100 Ydtics
 43.101 Ylabel
 43.102 Ymtics
 43.103 Yrange
 43.104 Ytics
 43.105 Yzeroaxis
 43.106 Zdata
 43.107 Zdtics
 43.108 Zzeroaxis
 43.109 Cbdata
 43.110 Cbdtics
 43.111 Zero
 43.112 Zeroaxis
 43.113 Zlabel
 43.114 Zmtics
 43.115 Zrange
 43.116 Ztics
 43.117 Cblabel
 43.118 Cbmtics
 43.119 Cbrange
 43.120 Cbtics
44 Shell
45 Splot
 45.1 Data-file
  45.1.1 Binary matrix
  45.1.2 Example datafile
  45.1.3 Matrix_ascii
  45.1.4 Matrix
 45.2 Grid data
 45.3 Splot overview
46 System
47 Test
48 Undefine
49 Unset
50 Update
III  Terminal types
51 Terminal
 51.1 Aed767
 51.2 Aifm
 51.3 Amiga
 51.4 Apollo
 51.5 Aqua
 51.6 Atari ST (via AES)
 51.7 Be
  51.7.1 Command-line_options
  51.7.2 Monochrome_options
  51.7.3 Color_resources
  51.7.4 Grayscale_resources
  51.7.5 Line_resources
 51.8 Cgi
 51.9 Cgm
  51.9.1 Cgm fonts
  51.9.2 Cgm fontsize
  51.9.3 Cgm linewidth
  51.9.4 Cgm rotate
  51.9.5 Cgm solid
  51.9.6 Cgm size
  51.9.7 Cgm width
  51.9.8 Cgm nofontlist
 51.10 Corel
 51.11 Debug
 51.12 Dospc
 51.13 Dumb
 51.14 Dxf
 51.15 Dxy800a
 51.16 Eepic
 51.17 Emf
 51.18 Emxvga
 51.19 Epslatex
 51.20 Epson-180dpi
 51.21 Excl
 51.22 Fig
 51.23 Ggi
 51.24 Gif
 51.25 Gnugraph(GNU plotutils)
 51.26 Gpic
 51.27 Gpr
 51.28 Grass
 51.29 Hercules
 51.30 Hp2623a
 51.31 Hp2648
 51.32 Hp500c
 51.33 Hpgl
 51.34 Hpljii
 51.35 Hppj
 51.36 Imagen
 51.37 Iris4d
 51.38 Jpeg
 51.39 Kyo
 51.40 Latex
 51.41 Linux
 51.42 Macintosh
 51.43 Mf
  51.43.1 METAFONT Instructions
 51.44 Mgr
 51.45 Mif
 51.46 Mp
  51.46.1 Metapost Instructions
 51.47 Mtos
 51.48 Next
 51.49 Openstep (next)
 51.50 Pbm
 51.51 Pdf
 51.52 Pm
 51.53 Png
 51.54 Postscript
  51.54.1 Enhanced postscript
  51.54.2 Editing postscript
  51.54.3 Postscript fontfile
  51.54.4 Postscript prologue
 51.55 Pslatex and pstex
 51.56 Pstricks
 51.57 Qms
 51.58 Regis
 51.59 Rgip
 51.60 Sun
 51.61 Svg
 51.62 Svga
 51.63 Tek40
 51.64 Tek410x
 51.65 Texdraw
 51.66 Tgif
 51.67 Tkcanvas
 51.68 Tpic
 51.69 Unixpc
 51.70 Unixplot
 51.71 Atari ST (via VDI)
 51.72 Vgagl
 51.73 VWS
 51.74 Vx384
 51.75 Windows
  51.75.1 Graph-menu
  51.75.2 Printing
  51.75.3 Text-menu
  51.75.4 Wgnuplot.ini
 51.76 Wxt
 51.77 X11
  51.77.1 X11_fonts
  51.77.2 Command-line_options
  51.77.3 Monochrome_options
  51.77.4 Color_resources
  51.77.5 Grayscale_resources
  51.77.6 Line_resources
  51.77.7 X11 pm3d_resources
  51.77.8 X11 other_resources
 51.78 Xlib
IV  Graphical User Interfaces
V  Bugs
52 Gnuplot limitations
53 External libraries
VI  Index

Part I
Gnuplot

1 Copyright

   Copyright (C) 1986 - 1993, 1998, 2004, 2007  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.

2 Introduction

gnuplot is a command-driven interactive function and data plotting program.

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. The special filename "-" is used to denote standard input. When no load files are named, gnuplot enters into an interactive mode. See help for batch/interactive (p. 37) for more details.

gnuplot 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 (p. 101) for more details).

Many gnuplot commands have multiple options. Version 4 is less sensitive to the order of these options than earlier versions, but some order-dependence remains. If you see error messages about unrecognized options, please try again using the exact order listed in the documentation.

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 (p. 41)). 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://www.gnuplot.info/demo/simple.html

3 Seeking-assistance

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://sourceforge.net/projects/gnuplot

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 the canonical (if occasionally 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.

4 New features introduced in version 4.2

Gnuplot version 4.2 offers many new features introduced since the preceding official version 4.0. This section lists major additions and gives a partial list of changes and minor new features. For a more exhaustive list, see the NEWS file.

4.1 New plot styles

4.1.1 Histogram

Histograms, or bar charts, can be produced. See histograms (p. 470).

4.1.2 Label plots

In coordination with the new datastrings feature described below, gnuplot can draw a label at each vertex of a curve. See labels (p. 482).

4.1.3 Image data

The image and rgbimage styles allow to plot 2D images (from ascii or binary files) and map them in a 2D or 3D plot. See image (p. 480) and rgbimage (p. 484).

4.1.4 Filled curves

The plot style fillstyle has been augmented to allow to fill the area between two input curves with a color or a pattern. See filledcurves (p. 464).

4.1.5 Vectors

Gnuplot can draw plots with vectors with a small arrowhead, requiring four or six columns of data for 2D or 3D, respectively. See vectors (p. 484).

4.2 Input from binary data files

Gnuplot can now read a generic binary input, including matrix binary and general binary (until now gnuplot supported only its own binary matrix format). Several matrix file formats are autodetected (gpbin, edf, avs). Binary data files are mainly useful for image and rgbimage drawings. See binary (p. 154) and binary general filetype (p. 158).

4.3 New plot elements

4.3.1 RGB colors

Explicit RGB colors can be specified for all plot elements instead of specifying a predefined linetype. See colorspec (p. 68).

4.3.2 Arbitrary rectangles

You can place rectangles with desired fill style and border anywhere in a 2D plot. See set object rectangle (p. 428).

4.4 String handling

4.4.1 String and text data read from datafiles

Gnuplot can now read and process text fields in datafiles. See datastrings (p. 43).

4.4.2 User-defined string variables, operators, and functions

String variables and string functions are introduced. Most gnuplot commands that previously required a string constant will now also accept a string variable, a string expression, or a function that returns a string. See string variables (p. 86).

4.5 Macros

Gnuplot supports command line macro expansion by ’@stringvariablename’. See macros (p. 94).

4.6 Auto-layout of multiple plots on a page

The multiplot mode is now able to layout automatically simple multiplots without having to set the size or the position for each plot. See multiplot (p. 378).

4.7 Internal variables

Gnuplot now exports several "read-only" variables such as GPVAL_TERM, GPVAL_X_MIN, etc. See gnuplot-defined variables (p. 56).

4.8 New or revised terminal drivers

4.8.1 wxt

The wxt terminal is an interactive and cross-platform terminal for on-screen rendering. It uses the wxWidgets library for its user interface, and Cairo associated with Pango for the actual rendering, providing nice plots with antialiasing on lines and text. The terminal supports the full range of gnuplot capabilities, including mousing, pm3d plots, image plots and enhanced text.

4.8.2 emf

The emf terminal generates an Enhanced Metafile Format file. This file format is the metafile standard on MS Win32 Systems. The emf terminal supports pm3d, rgb color, and image plot modes.

4.8.3 gif, jpeg, png

The code for the terminals using the gd library has been consolidated. The gif terminal also knows how to produce an animated gif from a sequence of plots.

4.8.4 postscript

The postscript terminal can load prologue files, which can contain additional user-defined sections with, for example, character encodings. See postscript prologue (p. 700).

4.8.5 ai

The Adobe Illustrator ai driver is outdated. Since Adobe Illustrator understands PostScript files, set terminal post level1 ... should be used instead.

4.8.6 epslatex, pslatex, pstex

The terminals supporting an output to latex augmented by PostScript commands have been consolidated. Many options are the same as in the postscript terminal.

4.8.7 windows

The windows terminal now supports the enhanced text mode.

4.9 Canvas size

In earlier versions of gnuplot, some terminal types used the values from set size to control also the size of the output canvas; others did not. The use of ’set size’ for this purpose was deprecated in version 4.2. In version 4.3 almost all terminals now behave as follows:

set term <terminal_type> size <XX>, <YY> controls the size of the output file, or "canvas". Please see individual terminal documentation for allowed values of the size parameters. By default, the plot will fill this canvas.

set size <XX>, <YY> scales the plot itself relative to the size of the canvas. Scale values less than 1 will cause the plot to not fill the entire canvas. Scale values larger than 1 will cause only a portion of the plot to fit on the canvas. Please be aware that setting scale values larger than 1 may cause problems on some terminal types.

The major exception to this convention is the PostScript driver, which by default continues to act as it has in earlier versions. Be warned that the next version of gnuplot may change the default behaviour of the PostScript driver as well.

Example:

     set size 0.5, 0.5  
     set term png size 600, 400  
     set output "figure.png"  
     plot "data" with lines

These commands will produce an output file "figure.png" that is 600 pixels wide and 400 pixels tall. The plot will fill the lower left quarter of this canvas. This is consistent with the way multiplot mode has always worked, however it is a change in the way the png driver worked for single plots in version 4.0.

5 Backwards compatibility

Gnuplot version 4.0 deprecated certain syntax used in earlier versions, but continued to recognize it. This is now under the control of a configuration option, and can be disabled as follows:

     ./configure --disable-backwards-compatibility

Notice: Deprecated syntax items may be disabled permanently in some future version of gnuplot.

One major difference is the introduction of keywords to disambiguate complex commands, particularly commands containing string variables. A notable issue was the use of bare numbers to specify offsets, line and point types. Illustrative examples:

Deprecated:

     set title "Old" 0,-1  
     set data linespoints  
     plot 1 2 4               # horizontal line at y=1

New:

     TITLE = "New"  
     set title TITLE offset char 0, char -1  
     set style data linespoints  
     plot 1 linetype 2 pointtype 4

Another compatibility issue is the effect of the command set size outside when not in multiplot mode. In earlier versions, the command set size <xx>, <yy> caused some terminals to change both the size of the plot and the size of the canvas is was drawn on; other terminatls changed only the plot size. The use of set size to change the canvas size is now deprecated.

Please see set size (p. 434), set term size (p. 30) and also the documentation for individual terminals.

6 Features introduced in version 4.0

Gnuplot version 4.0 contained many features introduced since the preceding official version 3.7. These are summarized here.

6.1 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, Windows, and wxWidgets terminals. See mouse input (p. 73) for more information on mousing. See help for bind (p. 73) for information on hotkeys. Also see the documentation for individual mousing terminals ggi (p. 614), pm (p. 684), windows (p. 731), wxt (p. 735) and x11 (p. 737).

Sample script: mousevariables.dem

6.2 New terminals

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: Consolidated with png/jpeg terminals. Requires libgd.

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 GIF, 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.

svg: New terminal exporting Scalable Vector Graphics.

6.3 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 set pm3d (p. 390), set palette (p. 400), set cbrange (p. 536), set view map (p. 500), set colorbox (p. 288) and test palette (p. 560).

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

6.4 Filled boxes

A solid color or patterned fill style can be set for any plot style that contains boxes. See boxes (p. 458), boxerrorbars (p. 458), boxxyerrorbars (p. 461), candlesticks (p. 461), set style fill (p. 445).

Sample scripts: fillstyle.dem candlesticks.dem

6.5 New plot option smooth frequency

Input data can be filtered through several built-in routines for interpolation or approximation of data. See smooth (p. 171), frequency (p. 174), unique (p. 174).

Sample scripts: steps.dem mgr.dem

6.6 Improved text options

Most gnuplot plot commands that produce text labels now accept modifiers to specify text color, font, size, and rotation angle. See set label (p. 351). 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 aqua, dumb, jpeg, pdf, pm, png, postscript, x11, windows, and wxt. See enhanced text (p. 694).

Sample scripts: textcolor.dem textrotate.dem

6.7 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 and KOI8-U (cyrillic), and miscellaneous codepages. See encoding (p. 317) for more details.

6.8 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 set style arrow (p. 441), plotting styles vectors (p. 484).

Sample scripts: arrowstyle.dem vector.dem

6.9 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 (p. 293). See also the binary (p. 154) option (introduced in 4.2).

6.10 New commands

set view map selects a top-view 2D projection of 3D surface plot.

set term push and set term pop save and restore the current terminal type.

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

6.11 Other changes and additions

Since gnuplot 4.0, unset <something> is preferred to set no<something>. The older form has been deprecated. Version 4.2 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 deprecated 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 set style (p. 439), set decimalsign (p. 307), and set datafile (p. 293).

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.

6.12 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://www.gnuplot.info/demo/

7 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

8 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:



Command-line Editing Commands




CharacterFunction


Line Editing

^B move back a single character.
^F move forward a single character.
^A move to the beginning of the line.
^E move to the end of the line.
^H, DEL delete the previous character.
^D delete the current character.
^K delete from current position to the end of line.
^L, ^R redraw line in case it gets trashed.
^U delete the entire line.
^W delete from the current word to the end of line.


History

^P move back through history.
^N move 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:



Arrow keyFunction


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


The Atari version of readline defines some additional key aliases:



Key Function


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


9 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 (p. 300) for specifying comment characters in data files.

10 Coordinates

The commands set arrow, set key, set label and set object 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, screen, or character.

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 set ticslevel (p. 527)); screen specifies the screen area (the entire area — not just the portion selected by set size), with 0,0 at bottom left and 1,1 at top right; and character gives the position in character widths and heights from the bottom left of the screen area (screen 0,0), character coordinates depend on the chosen font size.

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.

In some cases, the given coordinate is not an absolute position but a relative value (e.g., the second position in set arrow ... rto). In most cases, the given value serves as difference to the first position. If the given coordinate resides in a logarithmic axis the value is interpreted as factor. For example,

     set logscale x  
     set arrow 100,5 rto 10,2

plots an arrow from position 100,5 to position 1000,7 since the x axis is logarithmic while the y axis is linear.

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 set xdata (p. 503) and set timefmt (p. 495). gnuplot will also accept an integer expression, which will be interpreted as seconds from 1 January 2000.

11 Datastrings

The configuration option –enable-datastrings allows gnuplot to read and process text fields in datafiles. A text field consists of either an arbitrary string of printable characters containing no whitespace or an arbitrary string of characters, possibly including whitespace, delimited by double quotes. The following sample line from a datafile is interpreted to contain four columns, with a text field in column 3:

 1.000 2.000 "Third column is all of this text" 4.00

Text fields can be positioned within a 2-D or 3-D plot using the commands:

 plot ’datafile’ using 1:2:4 with labels  
 splot ’datafile using 1:2:3:4 with labels

A column of text data can also be used to label the ticmarks along one or more of the plot axes. The example below plots a line through a series of points with (X,Y) coordinates taken from columns 3 and 4 of the input datafile. However, rather than generating regularly spaced tics along the x axis labeled numerically, gnuplot will position a tic mark along the x axis at the X coordinate of each point and label the tic mark with text taken from column 1 of the input datafile.

 set xtics  
 plot ’datafile’ using 3:4:xticlabels(1) with linespoints

There is also an option that will interpret the first entry in a column of input data as a text field, and use it as the key title for data plotted from that column. The example given below will use the first entry in column 2 to generate a title in the key box, while processing the remainder of columns 2 and 4 to draw the required line:

 plot ’datafile’ using 1:(f($2)/$4) title 2 with lines

See set style labels (p. 482), using xticlabels (p. 192), plot title (p. 209), using (p. 185).

12 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 (p. 85)) 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 (p. 118). 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.

GNUPLOT_PS_DIR is used by the postscript driver to use external prologue files. Depending on the build process, gnuplot contains either a builtin copy of those files or simply a default hardcoded path. Use this variable to test the postscript terminal with custom prologue files. See postscript prologue (p. 700).

13 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. Or you can use the pre-defined variable NaN to achieve the same result.

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.

Gnuplot can also perform simple operations on strings and string variables. For example, the expression ("A" . "B" eq "AB") evaluates as true, illustrating the string concatenation operator and the string equality operator.

A string which contains a numerical value is promoted to the corresponding integer or real value if used in a numerical expression. Thus ("3" + "4" == 7) and (6.78 == "6.78") both evaluate to true. An integer, but not a real or complex value, is promoted to a string if used in string concatenation. A typical case is the use of integers to construct file names or other strings; e.g. ("file" . 4 eq "file4") is true.

Substrings can be specified using a postfixed range descriptor [beg:end]. For example, "ABCDEF"[3:4] == "CD" and "ABCDEF"[4:*] == "DEF" The syntax "string"[beg:end] is exactly equivalent to calling the built-in string-valued function substr("string",beg,end), except that you cannot omit either beg or end from the function call.

13.1 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 set angles, which defaults to radians.




Math library functions






Function ArgumentsReturns



abs(x) any absolute value of x, |x|; same type
abs(x) complex length of x, ∘ ------2---------2
  real(x) + imag(x)
acos(x) any cos-1x (inverse cosine)
acosh(x) any cosh-1x (inverse hyperbolic cosine) in radians
arg(x) complex the phase of x
asin(x) any sin-1x (inverse sin)
asinh(x) any sinh-1x (inverse hyperbolic sin) in radians
atan(x) any tan-1x (inverse tangent)
atan2(y,x) int or real tan-1(y∕x) (inverse tangent)
atanh(x) any tanh-1x (inverse hyperbolic tangent) in radians
besj0(x) int or real j0 Bessel function of x, in radians
besj1(x) int or real j1 Bessel function of x, in radians
besy0(x) int or real y0 Bessel function of x, in radians
besy1(x) int or real y1 Bessel function of x, in radians
ceil(x) any x, smallest integer not less than x (real part)
cos(x) any cosx, cosine of x
cosh(x) any coshx, hyperbolic cosine of x in radians
erf(x) any erf(real(x)), error function of real(x)
erfc(x) any erfc(real(x)), 1.0 - error function of real(x)
exp(x) any ex, exponential function of x
floor(x) any x, largest integer not greater than x (real part)
gamma(x) any gamma(real(x)), gamma function of real(x)
ibeta(p,q,x) any ibeta(real(p,q,x)), ibeta function of real(p,q,x)
inverf(x) any inverse error function of real(x)
igamma(a,x) any igamma(real(a,x)), igamma function of real(a,x)
imag(x) complex imaginary part of x as a real number
invnorm(x) any inverse normal distribution function of real(x)
int(x) real integer part of x, truncated toward zero
lambertw(x) real Lambert W function
lgamma(x) any lgamma(real(x)), lgamma function of real(x)
log(x) any log ex, natural logarithm (base e) of x
log10(x) any log 10x, logarithm (base 10) of x
norm(x) any normal distribution (Gaussian) function of real(x)
rand(x) any rand(x), pseudo random number generator
real(x) any real part of x
sgn(x) any 1 if x > 0, -1 if x < 0, 0 if x = 0. imag(x) ignored
sin(x) any sinx, sine of x
sinh(x) any sinhx, hyperbolic sine of x in radians
sqrt(x) any √ --
  x, square root of x
tan(x) any tanx, tangent of x
tanh(x) any tanhx, hyperbolic tangent of x in radians






String functions






Function ArgumentsReturns



gprintf(”format”,x) any string result from applying gnuplot’s format parser
sprintf(”format”,x,...) multiple string result from C-language sprintf
strlen(”string”) string int length of string
strstrt(”string”,”key”) strings int index of first character of substring ”key”
substr(”string”,beg,end) multiple string ”string”[beg:end]
strftime(”timeformat”,t) any string result from applying gnuplot’s time parser
strptime(”timeformat”,s) string seconds since year 2000 as given in string s
system(”command”) string string containing output stream of shell command
word(”string”,n) string, int returns the nth word in ”string”
words(”string”) string returns the number of words in ”string”






other gnuplot functions






Function Arguments Returns



column(x) int column x during datafile manipulation.
defined(X) variable name [DEPRECATED] returns 1 if X is defined, 0 otherwise.
exists(”X”) ”variable name”returns 1 if a variable named X is defined, 0 otherwise.
stringcolumn(x) int content of column x as a string.
timecolumn(x) int timecolumn x during datafile manipulation.
tm_hour(x) int the hour
tm_mday(x) int the day of the month
tm_min(x) int the minute
tm_mon(x) int the month
tm_sec(x) int the second
tm_wday(x) int the day of the week
tm_yday(x) int the day of the year
tm_year(x) int the year
valid(x) int test validity of column(x) during datafile manip.



See also

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

13.1.1 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.

13.2 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.

13.2.1 Unary

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




Unary Operators






SymbolExampleExplanation



- -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.

13.2.2 Binary

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




Binary Operators






SymbolExampleExplanation



** 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
. A.B string concatenation
eq A eq B string equality
ne A ne B string inequality



(*) Starred explanations indicate that the operator requires integer arguments. Capital letters A and B indicate that the operator requires string 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.

13.2.3 Ternary

There is a single ternary operator:




Ternary Operator






SymbolExampleExplanation



?: 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 plot datafile using (p. 185) for an explanation of the using (p. 185) syntax.

13.3 Gnuplot-defined variables

The variable pi is defined to be pi, see

     print pi

Additionally, gnuplot may define some variables under various operations.

Working with interactive terminals with mouse functionality defines variables with names that begin "MOUSE_", see mouse variables (p. 83) for details.

Further, there are several "read-only" variables that begin "GPVAL_", like GPVAL_TERM, GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN,... Type show variables all to display their list and values. Values related to axes parameters (ranges, log base) are values used during the last plot, not those currently set.

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. Under set fit errorvariables, the error for each fitted parameter will be stored in a variable named like the parameter, but with "_err" appended. See the documentation on fit (p. 118) for details.

See user-defined variables (p. 57), mouse variables (p. 83), and fit (p. 118).

13.4 User-defined variables and functions

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)

     file = "mydata.inp"  
     file(n) = sprintf("run_%d.dat",n)

The final two examples illustrate a user-defined string variable and a user-defined string function.

Note that the variables pi (3.14159...) and NaN (IEEE "Not a Number") are already defined. You can redefine these to something else if you really need to. The original values can be recovered by setting:

     NaN = GPVAL_NaN  
     pi  = GPVAL_pi

Other variables may be defined under various gnuplot operations like mousing in interactive terminals or fitting; see gnuplot-defined variables (p. 56) for details.

You can check for existence of a given variable V by the exists("V") expression. For example

     a = 10  
     if (exists("a")) print "a is defined"  
     if (!exists("b")) print "b is not defined"

Valid names are the same as in most programming languages: they must begin with a letter, but subsequent characters may be letters, digits, "$", or "_".

See show functions (p. 329), functions (p. 49), gnuplot-defined variables (p. 56), macros (p. 94).

14 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 set 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.

15 Linetype, colors, and styles

Each gnuplot terminal type provides a set of distinct "linetypes". These may differ in color, in thickness, in dot/dash pattern, or in some combination of color and dot/dash. The default linetypes for a particular terminal can be previewed by issuing the test command after setting the terminal type. The pre-defined colors and dot/dash patterns are not guaranteed to be consistent for all terminal types, but all terminals use the special linetype -1 to mean a solid line in the primary foreground color (normally black). By default, successive functions or datafiles plotted by a single command will be assigned successive linetypes. You can override this default by specifying a particular linetype for any function, datafile, or plot element.

Examples:

    plot "foo", "bar"                 # plot two files using linetypes 1, 2  
    plot sin(x) linetype 4            # terminal-specific linetype color 4  
    plot sin(x) lt -1                 # black

For many terminal types it is also possible to assign user-defined colors using explicit rgb (red, green, blue) values, named colors, or color values that refer to the current PM3D palette.

Examples:

    plot sin(x) lt rgb "violet"       # one of gnuplot’s named colors  
    plot sin(x) lt rgb "#FF00FF"      # explicit RGB triple in hexadecimal  
    plot sin(x) lt palette cb -45     # whatever color corresponds to -45  
                                      # in the current cbrange of the palette  
    plot sin(x) lt palette frac 0.3   # fractional value along the palette

See show palette colornames (p. 424), set palette (p. 400), cbrange (p. 536).

For terminals that support dot/dash patterns, each default linetype has both a dot-dash pattern and a default color. However, you can override the default color by using the keyword linecolor, abbreviated lc. For example, the postscript terminal provides a dashed blue line as linetype 3. The plot commands below use this same dash pattern for three plots, one in blue (the default), another in red (the default for linetype 1), and a third in gold.

Example:

    set term postscript dashed color  
    plot ’foo’ lt 3, ’baz’ lt 3 linecolor 1, ’bar’ lt 3 lc rgb ’gold’

Lines can have additional properties such as linewidth. You can associate these various properties, as well as equivalent properties for point symbols, into user-defined "line styles" using the command set style line. Once you have defined a linestyle, you can use it in a plot command to control the appearance of one or more plot elements.

Examples:

    # define a new line style with terminal-independent color cyan,  
    # linewidth 3, and associated point type 6 (a circle with a dot in it).  
    set style line 5 lt rgb "cyan" lw 3 pt 6  
    plot sin(x) with linespoints ls 5          # user-defined line style 5

See linestyle (p. 450), set style line (p. 450).

15.1 Colorspec

Many commands allow you to specify a linetype with an explicit color. Note that not all terminals support RGB colors or pm3d palette colors.

Syntax:

     ... {linetype | lt} <colorspec>  
     ... {linecolor | lc} <colorspec>  
     ... {textcolor | tc} <colorspec>

where <colorspec> has one of the following forms:

     rgbcolor "colorname"  
     rgbcolor "#RRGGBB"  
     rgbcolor variable  
     palette frac <val>      # <val> runs from 0 to 1  
     palette cb <value>      # <val> lies within cbrange  
     palette z  
     variable                # color index is read from input file

"colorname" refers to one of the color names built in to gnuplot. For a list of the available names, see show palette colornames (p. 424).

"#RRGGBB" is a hexadecimal constant preceded by the "#" symbol. The RRGGBB represents the red, green, and blue components of the color, each on a scale from 0 - 255. For example, magenta = full-scale red + full-scale blue would be represented by #FF00FF, which is the hexadecimal representation of (255 << 16) + (0 << 8) + (255).

"rgb variable" requires an additional column in the using specifier, and is only available in 3D plotting mode (splot). The extra column is interpreted as a 24-bit packed RGB triple. These are most easily specified in a data file as hexadecimal values (see above).

Example:

     rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)  
     splot "data" using 1:2:3:(rgb($1,$2,$3)) with points lc rgb variable

The color palette is a linear gradient of colors that smoothly maps a single numerical value onto a particular color. Two such mappings are always in effect. palette frac maps a fractional value between 0 and 1 onto the full range of the color palette. palette cb maps the range of the color axis onto the same palette. See set cbrange (p. 536). See also set colorbox (p. 288). You can use either of these to select a constant color from the current palette.

"palette z" maps the z value of each plot segment or plot element into the cbrange mapping of the palette. This allows smoothly-varying color along a 3D line or surface. It also allows coloring 2D plots by palette values read from an extra column of data.

15.1.1 Linecolor variable

Most plot commands assign a single color (linetype) to each element of the plot. If there are multiple plots on a single graph, the default color (linetype) is incremented sequentially. You can instead assign a separate color for each data point, line segment, or label based on additional information in the input data file. This is indicated by the colorspec keyword variable.

lc variable tells the program to use the value read from one column of the input data as a linestyle index, and use the color belonging to that linestyle. This requires a corresponding additional column in the using specifier. Text colors can be set similarly using tc variable.

A single data file may contain multiple sets of data, separated by two blank lines. Each of these separate sets is assigned an index value (see index (p. 168)) that can be retrieved via the using specifier column(-2). All data in the file is drawn with the same color/linestyle/pointtype properties by default. The command lc variable can be used to assign different colors to each data set in the file by using the index value from pseudocolumn -2.

Examples:

     # Use the third column of data to assign colors to individual points  
     plot ’data’ using 1:2:3 with points lc variable

     # Use the data set index to choose a linestyle color  
     plot ’data’ using 1:2:(column(-2)) with lines lc variable

16 Mouse input

The x11, pm, windows, ggi, and wxt 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 (p. 73) and mouse variables (p. 83). See also the command set mouse (p. 376).

16.1 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 (unless one exception, see below). Mouse buttons cannot be rebound.

You get the list of all hotkeys by typing bind or by hitting ’h’ in the graph window.

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

Normally hotkeys are only recognized when the currently active plot window has focus. bind allwindows <key> ... (short form: bind all <key> ...) causes the binding for <key> to apply to all gnuplot plot windows, active or not. In this case gnuplot variable MOUSE_KEY_WINDOW is set to the ID of the originating window, and may be used by the bound command.

By default, the <space> hotkey raises gnuplot’s command window. On some terminals (e.g. x11, wx), ’q’ closes the graph window. These defaults can be changed to ctrl-space and ctrl-q by starting gnuplot as ’gnuplot -ctrlq’, see x11 command-line-options (p. 747), or by the X Resource ’gnuplot*ctrlq’. Note: if <space> (or ctrl-space) does not raise the gnuplot window under X11, see discussion in raise (p. 231).

Syntax:

     bind {allwindows} [<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"  
   bind all Home ’print "This is window ",MOUSE_KEY_WINDOW’

- 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 (p. 376) and if (p. 137).

16.2 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."

It is also possible to track keystrokes in the plot window using the mousing code.

     plot ’something’  
     pause mouse keypress  
     print "Keystroke ", MOUSE_KEY, " at ", MOUSE_X, " ", MOUSE_Y

When pause mouse keypress is terminated by a keypress, then MOUSE_KEY will contain the ascii character value of the key that was pressed. MOUSE_CHAR will contain the character itself as a string variable. If the pause command is terminated abnormally (e.g. by ctrl-C or by externally closing the plot window) then MOUSE_KEY will equal -1.

Note that after a zoom by mouse, you can read the new ranges as GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN, and GPVAL_Y_MAX, see gnuplot-defined variables (p. 56).

17 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 (p. 425) for details of the latter. splot operates only in rectangular coordinates, but the set 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 set 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 set isosamples (p. 335) for information about defining the grid for a 3-d function; splot datafile (p. 540) for information about the requisite file structure for 3-d data values; and set contour (p. 291) and set cntrparam (p. 281) 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.

18 Start-up

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.

19 String constants and string variables

In addition to string constants, most gnuplot commands also accept a string variable, a string expression, or a function that returns a string. For example, the following four methods of creating a plot all result in the same plot title:

     four = "4"  
     graph4 = "Title for plot #4"  
     graph(n) = sprintf("Title for plot #%d",n)

     plot ’data.4’ title "Title for plot #4"  
     plot ’data.4’ title graph4  
     plot ’data.4’ title "Title for plot #".four  
     plot ’data.4’ title graph(4)

Since integers are promoted to strings when operated on by the string concatenation operator, the following method also works:

     N = 4  
     plot ’data.’.N title "Title for plot #".N

In general, elements on the command line will only be evaluated as possible string variables if they are not otherwise recognizable as part of the normal gnuplot syntax. So the following sequence of commands is legal, although probably should be avoided so as not to cause confusion:

     plot = "my_datafile.dat"  
     title = "My Title"  
     plot plot title title

There are three binary operators that require string operands: the string concatenation operator ".", the string equality operator "eq" and the string inequality operator "ne". The following example will print TRUE.

    if ("A"."B" eq "AB") print "TRUE"

See also the two string formatting functions gprintf (p. 323) and sprintf (p. 51).

Substrings can be specified by appending a range specifier to any string, string variable, or string-valued function. The range specifier has the form [begin:end], where begin is the index of the first character of the substring and end is the index of the last character of the substring. The first character has index 1. The begin or end fields may be empty, or contain ’*’, to indicate the true start or end of the original string. E.g. str[:] and str[*:*] both describe the full string str.

20 Substitution and Command line macros

When a command line to gnuplot is first read, i.e. before it is interpreted or executed, two forms of lexical substitution are performed. These are triggered by the presence of text in backquotes (ascii character 96) or preceded by @ (ascii character 64).

20.1 Substitution of system commands in backquotes

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

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‘"

20.2 Substitution of string variables as macros

Substitution of command line macros is disabled by default, but may be enabled using the set macros command. If macro substitution is enabled, the character @ is used to trigger substitution of the current value of a string variable into the command line. The text in the string variable may contain any number of lexical elements. This allows string variables to be used as command line macros. Only string constants may be expanded using this mechanism, not string-valued expressions. For example:

     set macros  
     style1 = "lines lt 4 lw 2"  
     style2 = "points lt 3 pt 5 ps 2"  
     range1 = "using 1:3"  
     range2 = "using 1:5"  
     plot "foo" @range1 with @style1, "bar" @range2 with @style2

The line containing @ symbols is expanded on input, so that by the time it is executed the effect is identical to having typed in full

     plot "foo" using 1:3 with lines lt 4 lw 2, \  
          "bar" using 1:5 with points lt 3 pt 5 ps 2

The function exists() may be useful in connection with macro evaluation. The following example checks that C can safely be expanded as the name of a user-defined variable:

     C = "pi"  
     if (exists(C)) print C," = ", @C

Macro expansion does not occur inside either single or double quotes. However macro expansion does occur inside backquotes.

20.3 String variables, macros, and command line substitution

The interaction of string variables, backquotes and macro substitution is somewhat complicated. Backquotes do not block macro substitution, so

     filename = "mydata.inp"  
     lines = ‘ wc --lines @filename | sed "s/ .*//" ‘

results in the number of lines in mydata.inp being stored in the integer variable lines. And double quotes do not block backquote substitution, so

     mycomputer = "‘uname -n‘"

results in the string returned by the system command uname -n being stored in the string variable mycomputer.

However, macro substitution is not performed inside double quotes, so you cannot define a system command as a macro and then use both macro and backquote substitution at the same time.

      machine_id = "uname -n"  
      mycomputer = "‘@machine_id‘"  # doesn’t work!!

This fails because the double quotes prevent @machine_id from being interpreted as a macro. To store a system command as a macro and execute it later you must instead include the backquotes as part of the macro itself. This is accomplished by defining the macro as shown below. Notice that the sprintf format nests all three types of quotes.

     machine_id = sprintf(’"‘uname -n‘"’)  
     mycomputer = @machine_id

21 Syntax

Version 4 of gnuplot is much less sensitive than earlier versions to the order of keywords and suboptions. However, if you get error messages from specifying options that you think should work, please try rearranging them into the exact order listed by the documentation.

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 set 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.)

Square brackets are used to delimit ranges given in 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.

At present you should not embed \n inside {} when using the PostScript terminal in enhanced text mode.

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.

21.1 Quote Marks

Gnuplot uses three forms of quote marks for delimiting text strings, double-quote (ascii 34), single-quote (ascii 39), and backquote (ascii 96).

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.

String constants and text strings used for labels, titles, or other plot elements may be enclosed in either single quotes or double quotes. Further processing of the quoted text depends on the choice of quote marks.

Backslash processing of special characters like \n (newline) and \345 (octal character code) is performed for double-quoted strings. In single-quoted strings, backslashes are just ordinary characters. To get a single-quote (ascii 39) in a single-quoted string, it has to be doubled. Thus the strings "d\" s’ b\\" and ’d" s’ ’ b\’ are completely equivalent.

Text 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.

Enhanced text processing is performed for both double-quoted text and single-quoted text, but only by terminals supporting this mode. See enhanced text (p. 694).

Back-quotes are used to enclose system commands for substitution into the command line. See substitution (p. 91).

22 Time/Date data

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 set 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 show 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 set xdata), the quantity will be shown in its numerical form.

The commands set format or set tics format define 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.

Part II
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.

23 Cd

The cd command changes the working directory.

Syntax:

     cd ’<directory-name>’

The directory name must be enclosed in quotes.

Examples:

     cd ’subdir’  
     cd ".."

It is recommended for DOS and Windows users to use single-quotes — backslash [\] has special significance inside double-quotes and has to be escaped. For example,

     cd "c:\newdata"

fails, but

     cd ’c:\newdata’  
     cd "c:\\newdata"

works as expected.

24 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. Sequence $# is replaced by the number of passed parameters. $ followed by any character 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 "argc=$# 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:

     argc=7 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.

25 Clear

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

For some terminals clear erases only the portion of the plotting surface defined by set size, so for these it can be used in conjunction with set 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 set multiplot (p. 378), set size (p. 434), and set origin (p. 386) for details of these commands.

26 Exit

The commands exit and quit, as well as the END-OF-FILE character (usually Ctrl-D) terminate input from the current input stream: terminal session, pipe, and file input (pipe).

If input streams are nested (inherited load scripts), then reading will continue in the parent stream. When the top level stream is closed, the program itself will exit.

The command exit gnuplot will immediately and unconditionally cause gnuplot to exit even if the input stream is multiply nested. In this case any open output files may not be completed cleanly. Example of use:

     bind "ctrl-x" "unset output; exit gnuplot"

See help for batch/interactive (p. 37) for more details.

27 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 plot ranges (p. 200).

<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 (p. 151).

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 plot datafile using (p. 185)), 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 fit multi-branch (p. 133).

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 (p. 563) for details.

27.1 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.

27.2 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 (p. 124) 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 fit control variables (p. 127)). The fit may also be interrupted and subsequently halted from the keyboard (see fit (p. 118)). The user variable FIT_CONVERGED contains 1 if the previous fit command terminated due to convergence; it contains 0 if the previous fit terminated for any other reason.

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 (p. 124).

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.

27.3 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’.

27.3.1 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. These values are exported to the variables

     FIT_NDF = Number of degrees of freedom  
     FIT_WSSR = Weighted sum-of-squares residual  
     FIT_STDFIT = sqrt(WSSR/NDF)

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.

27.3.2 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.

27.4 Control

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’.

27.4.1 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 fit multi-branch (p. 133).

27.4.2 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 fit logfile.

     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.

27.5 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:-2: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.

27.6 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.

27.7 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, this may often be done in one step by writing the model function directly in terms of the desired parameters. Transforming data can also quite often be avoided, though sometimes at the cost of a more difficult fit problem. If you think this contradicts the previous paragraph about simplifying the fit function, you are correct.

A "singular matrix" message indicates that this implementation of the Marquardt-Levenberg algorithm can’t calculate parameter values for the next iteration. Try different starting values, writing the function in another form, or a simpler function.

Finally, a nice quote from the manual of another fitting package (fudgit), that kind of summarizes all these issues: "Nonlinear fitting is an art!"

28 Help

The help command displays on-line help. To specify information on a particular topic use the syntax:

     help {<topic>}

If <topic> is not specified, a short message is printed about gnuplot. After help for the requested topic is given, a menu of subtopics is given; help for a subtopic may be requested by typing its name, extending the help request. After that subtopic has been printed, the request may be extended again or you may go back one level to the previous topic. Eventually, the gnuplot command line will return.

If a question mark (?) is given as the topic, the list of topics currently available is printed on the screen.

29 History

history command lists or saves previous entries in the history of the command line editing, or executes an entry.

Here you find ’usage by examples’:

     history               # show the complete history  
     history 5             # show last 5 entries in the history  
     history quiet 5       # show last 5 entries without entry numbers  
     history "hist.gp"     # write the complete history to file hist.gp  
     history "hist.gp" append # append the complete history to file hist.gp  
     history 10 "hist.gp"  # write last 10 commands to file hist.gp  
     history 10 "|head -5 >>diary.gp" # write 5 history commands using pipe  
     history ?load         # show all history entries starting with "load"  
     history ?"set c"      # like above, several words enclosed in quotes  
     hi !reread            # execute last entry starting with "reread"  
     hist !"set xr"        # like above, several words enclosed in quotes  
     hi !hi                # guess yourself :-))

On systems which support a popen function (Unix), the output of history can be piped through an external program by starting the file name with a ’|’, as one of the above examples demonstrates.

30 If

The if command allows commands to be executed conditionally.

Syntax:

     if (<condition>) <command-line> [; else if (<condition>) ...; else ...]

<condition> will be evaluated. If it is true (non-zero), then the command(s) of the <command-line> will be executed. If <condition> is false (zero), then the entire <command-line> is ignored until the next occurrence of else. Note that use of ; to allow multiple commands on the same line will not end the conditionalized commands.

Examples:

     pi=3  
     if (pi!=acos(-1)) print "?Fixing pi!"; pi=acos(-1); print pi

will display:

     ?Fixing pi!  
     3.14159265358979

but

     if (1==2) print "Never see this"; print "Or this either"

will not display anything.

else:

     v=0  
     v=v+1; if (v%2) print "2" ; else if (v%3) print "3"; else print "fred"

(repeat the last line repeatedly!)

See reread (p. 234) for an example of how if (p. 137) and reread (p. 234) can be used together to perform a loop.

31 Load

The load command executes each line of the specified input file as if it had been typed in interactively. Files created by the save command can later be loaded. Any text file containing valid commands can be created and then executed by the load command. Files being loaded may themselves contain load or call commands. See comments (p. 41) for information about comments in commands. To load with arguments, see call (p. 112).

The load command must be the last command on a multi-command line.

Syntax:

     load "<input-file>"

The name of the input file must be enclosed in quotes.

The special filename "-" may be used to load commands from standard input. This allows a gnuplot command file to accept some commands from standard input. Please see help for batch/interactive (p. 37) for more details.

On some systems which support a popen function (Unix), the load file can be read from a pipe by starting the file name with a ’<’.

Examples:

     load ’work.gnu’  
     load "func.dat"  
     load "< loadfile_generator.sh"

The load command is performed implicitly on any file names given as arguments to gnuplot. These are loaded in the order specified, and then gnuplot exits.

32 Lower

Syntax:

     lower {plot_window_nb}

The lower command lowers (opposite to raise) plot window(s) associated with the interactive terminal of your gnuplot session, i.e. pm, win, wxt or x11. It puts the plot window to bottom in the z-order windows stack of the window manager of your desktop.

As x11 and wxt support multiple plot windows, then by default they lower these windows in descending order of most recently created on top to the least recently created on bottom. If a plot number is supplied as an optional parameter, only the associated plot window will be lowered if it exists.

The optional parameter is ignored for single plot-window terminals, i.e. pm and win.

33 Pause

The pause command displays any text associated with the command and then waits a specified amount of time or until the carriage return is pressed. pause is especially useful in conjunction with load files.

Syntax:

     pause <time> {"<string>"}  
     pause mouse {<endcondition>}{, <endcondition>} {"<string>"}

<time> may be any constant or expression. Choosing -1 will wait until a carriage return is hit, zero (0) won’t pause at all, and a positive number will wait the specified number of seconds. The time is rounded to an integer number of seconds if subsecond time resolution is not supported by the given platform. pause 0 is synonymous with print.

If the current terminal supports mousing, then pause mouse will terminate on either a mouse click or on ctrl-C. For all other terminals, or if mousing is not active, pause mouse is equivalent to pause -1.

If one or more end conditions are given after pause mouse, then any one of the conditions will terminate the pause. The possible end conditions are keypress, button1, button2, button3, close, and any. If the pause terminates on a keypress, then the ascii value of the key pressed is returned in MOUSE_KEY. The character itself is returned as a one character string in MOUSE_CHAR. Hotkeys (bind command) are disabled if keypress is one of the end conditions. Zooming is disabled if button3 is one of the end conditions.

In all cases the coordinates of the mouse are returned in variables MOUSE_X, MOUSE_Y, MOUSE_X2, MOUSE_Y2. See mouse variables (p. 83).

Note: Since pause communicates with the operating system rather than the graphics, it may behave differently with different device drivers (depending upon how text and graphics are mixed).

Examples:

     pause -1    # Wait until a carriage return is hit  
     pause 3     # Wait three seconds  
     pause -1  "Hit return to continue"  
     pause 10  "Isn’t this pretty?  It’s a cubic spline."  
     pause mouse "Click any mouse button on selected data point"  
     pause mouse keypress "Type a letter from A-F in the active window"  
     pause mouse button1,keypress  
     pause mouse any "Any key or button will terminate"

The variant "pause mouse key" will resume after any keypress in the active plot window. If you want to wait for a particular key to be pressed, you can use a reread loop such as:

     printf "I will resume after you hit the Tab key in the plot window"  
     load "wait_for_tab"

File "wait_for_tab" contains the lines

     pause mouse key  
     if (MOUSE_KEY != 9) reread

34 Plot

plot is the primary command for drawing plots with gnuplot. It creates plots of functions and data in many, many ways. plot is used to draw 2-d functions and data; splot draws 2-d projections of 3-d surfaces and data. plot and splot contain many common features; see splot (p. 539) for differences. Note specifically that although the binary <binary list> variation does work for both plot and splot, there are small differences between these modes. Furthermore, plot’s axes option does not exist for splot.

Syntax:

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

where either a <function> or the name of a data file enclosed in quotes is supplied. A function is a mathematical expression or a pair of mathematical expressions in parametric mode. The expressions may be defined completely or in part earlier in the stream of gnuplot commands (see user-defined (p. 57)).

It is also possible to define functions and parameters on the plot command itself. This is done merely by isolating them from other items with commas.

There are four possible sets of axes available; the keyword <axes> is used to select the axes for which a particular line should be scaled. x1y1 refers to the axes on the bottom and left; x2y2 to those on the top and right; x1y2 to those on the bottom and right; and x2y1 to those on the top and left. Ranges specified on the plot command apply only to the first set of axes (bottom left).

Examples:

     plot sin(x)  
     plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x)  
     plot [t=1:10] [-pi:pi*2] tan(t), \  
          "data.1" using (tan($2)):($3/$4) smooth csplines \  
                   axes x1y2 notitle with lines 5

See also show plot (p. 390).

34.1 Data

Discrete data contained in a file can be displayed by specifying the name of the data file (enclosed in single or double quotes) on the plot command line.

Syntax:

     plot ’<file_name>’ {binary <binary list>}  
                        {matrix}  
                        {index <index list>}  
                        {every <every list>}  
                        {thru <thru expression>}  
                        {using <using list>}  
                        {smooth <option>}

The modifiers binary, index, every, thru, using, and smooth are discussed separately. In brief, binary allows data entry from a binary file (default is ASCII), index selects which data sets in a multi-data-set file are to be plotted, every specifies which points within a single data set are to be plotted, using determines how the columns within a single record are to be interpreted (thru is a special case of using), and smooth allows for simple interpolation and approximation. (splot has a similar syntax, but does not support the smooth and thru options.)

ASCII DATA FILES:

Data files should contain at least one data point per record (using can select one data point from the record). Records beginning with # (and also with ! on VMS) will be treated as comments and ignored. Each data point represents an (x,y) pair. For plots with error bars or error bars with lines (see set style errorbars (p. 486) or set style errorlines (p. 487)), each data point is (x,y,ydelta), (x,y,ylow,yhigh), (x,y,xdelta), (x,y,xlow,xhigh), or (x,y,xlow,xhigh,ylow,yhigh).

In all cases, the numbers of each record of a data file must be separated by white space (one or more blanks or tabs) unless a format specifier is provided by the using option. This white space divides each record into columns. However, whitespace inside a pair of double quotes is ignored when counting columns, so the following datafile line has three columns:

     1.0 "second column" 3.0

Data may be written in exponential format with the exponent preceded by the letter e or E. The fortran exponential specificiers d, D, q, and Q may also be used if the command set datafile fortran is in effect.

Only one column (the y value) need be provided. If x is omitted, gnuplot provides integer values starting at 0.

In datafiles, blank records (records with no characters other than blanks and a newline and/or carriage return) are significant.

Single blank records designate discontinuities in a plot; no line will join points separated by a blank records (if they are plotted with a line style).

Two blank records in a row indicate a break between separate data sets. See index (p. 168).

If autoscaling has been enabled (set autoscale), the axes are automatically extended to include all datapoints, with a whole number of tic marks if tics are being drawn. This has two consequences: i) For splot, the corner of the surface may not coincide with the corner of the base. In this case, no vertical line is drawn. ii) When plotting data with the same x range on a dual-axis graph, the x coordinates may not coincide if the x2tics are not being drawn. This is because the x axis has been autoextended to a whole number of tics, but the x2 axis has not. The following example illustrates the problem:

     reset; plot ’-’, ’-’ axes x2y1  
     1 1  
     19 19  
     e  
     1 1  
     19 19  
     e

To avoid this, you can use the fixmin/fixmax feature of the set autoscale command, which turns off the automatic extension of the axis range upto the next tic mark.

BINARY DATA FILES:

Gnuplot can read binary data files. However, adequate information about details of the file format must be given on the command line or extracted from the file itself for a supported binary filetype. In particular, there are two structures for binary files, a matrix binary format and a general binary format.

The matrix binary format contains a two dimensional array of 32 bit IEEE float values with an additional column and row of coordinate values. As with ASCII matrix, in the using list, repetition of the coordinate row constitutes column 1, repetition of the coordinate column constitutes column 2, and the array of values constitutes column 3.

The general binary format contains an arbitrary number of columns for which information must be specified at the command line. For example, array, record, format and using can indicate the size, format and dimension of data. There are a variety of useful commands for skipping file headers and changing endianess. There are a set of commands for positioning and translating data since often coordinates are not part of the file when uniform sampling is inherent in the data. Different from matrix binary or ASCII, general binary does not treat the generated columns as 1, 2 or 3 in the using list. Rather, column 1 begins with column 1 of the file, or as specified in the format list.

There are global default settings for the various binary options which may be set using the same syntax as the options when used as part of the (s)plot <filename> binary ... command. This syntax is set datafile binary .... The general rule is that common command-line specified parameters override file-extracted parameters which override default parameters.

Matrix binary is the default binary format when no keywords specific to general binary are given, i.e., array, record, format, filetype.

General binary data can be entered at the command line via the special file name ’-’. However, this is intended for use through a pipe where programs can exchange binary data, not for keyboards. There is no "end of record" character for binary data. Gnuplot continues reading from a pipe until it has read the number of points declared in the array qualifier.

See datafile binary (p. 154) for more details.

34.1.1 Binary

The binary keyword allows a data file to be binary as opposed to ASCII. There are two formats for binary–matrix binary and general binary. Matrix binary is a fixed format in which data appears in a 2D array with an extra row and column for coordinate values. General binary is a flexible format for which details about the file must be given at the command line.

See binary matrix (p. 541) or binary general (p. 155) for more details.

34.1.2 Binary general

General binary data in which format information is not necessarily part of the file can be read by giving further details about the file format at the command line. Although the syntax is slightly arcane to the casual user, general binary is particularly useful for application programs using gnuplot and sending large amounts of data.

Syntax:

     plot ’<file_name>’ {binary <binary list>} ...  
     splot ’<file_name>’ {binary <binary list>} ...

General binary format is activated by keywords in <binary list> pertaining to information about file structure, i.e., array, record, format or filetype. Otherwise, matrix binary format is assumed. (See binary matrix (p. 541) for more details.)

There are some standard file types that may be read for which details about the binary format may be extracted automatically. (Type show datafile binary at the command line for a list.) Otherwise, details must be specified at the command line or set in the defaults. Keywords are described below.

The keyword filetype in <binary list> controls the routine used to read the file, i.e., the format of the data. For a list of the supported file types, type show datafile binary filetypes. If no file type is given, the rule is that traditional gnuplot binary is assumed for splot if the binary keyword stands alone. In all other circumstances, for plot or when one of the <binary list> keywords appears, a raw binary file is assumed whereby the keywords specify the binary format.

General binary data files fall into two basic classes, and some files may be of both classes depending upon how they are treated. There is that class for which uniform sampling is assumed and point coordinates must be generated. This is the class for which full control via the <binary list> keywords applies. For this class, the settings precedence is that command line parameters override in-file parameters, which override default settings. The other class is that set of files for which coordinate information is contained within the file or there is possibly a non-uniform sampling such as gnuplot binary.

Other than for the unique data files such as gnuplot binary, one should think of binary data as conceptually the same as ASCII data. Each point has columns of information which are selected via the <using list> associated with using. When no format string is specified, gnuplot will retrieve a number of binary variables equal to the largest column given in the <using list>. For example, using 1:3 will result in three columns being read, of which the second will be ignored. There are default using lists based upon the typical number of parameters associated with a certain plot type. For example, with image has a default of using 1, while with rgbimage has a default of using 1:2:3. Note that the special characters for using representing point/line/index generally should not be used for binary data. There are keywords in <binary list> that control this.

Array Describes the sampling array dimensions associated with the binary file. The coordinates will be generated by gnuplot. A number must be specified for each dimension, thereby calling out the size of the array. For example, array=10x20 means the underlying sampling structure is two-dimensional with 10 points along the first (x) dimension and 20 points along the second (y) dimension. A special "number", Inf, can be used to indicate that data should be read until the end of file. A colon can be used to separate the dimensions for multiple records. For example, array=25:35 indicates there are two one-dimensional records within the file. The colon behavior applies to the remaining keywords in this list for which it makes sense to be associated with individual records.

Currently, syntax allows for up to three-dimensional arrays. However, no conventions have yet been made for handling three-dimensional coordinates.

Record This keyword serves the same function as array, having the same syntax. However, record causes gnuplot to not generate coordinate information. This is for the case where such information may be included in one of the columns of the binary data file.

Format The default binary format is a float. For more flexibility, the format can include details about variable sizes. For example, format="%uchar%int%float" associates an unsigned character with the first using column, an int with the second column and a float with the third column. If the number of size specifications is less than the greatest column number, the size is implicitly taken to be similar to the last given variable size.

Furthermore, the format specification can include "discarded" terms via the * character. For example, to skip the middle column of the previous example, one could write format="%uchar%*int%float" and gnuplot will discard the middle integer. To list variable sizes, type show datafile binary datasizes. There are a group of names that are machine dependent along with their sizes in bytes for the particular compilation. There is also a group of names which attempt to be machine independent.

Endian Often the endianess of binary data in the file does not agree with the endianess used by the platform on which gnuplot is running. Several words can direct gnuplot how to arrange bytes. For example endian=little means treat the binary file as having byte significance from least to greatest. The options are

             little:  least significant to greatest significance  
                big:  greatest significance to least significance  
            default:  assume file endianess is the same as compiler  
        swap (swab):  Interchange the significance.  (If things  
                      don’t look right, try this.)

Gnuplot can support "middle" ("pdp") endian if it is compiled with that option.

Filetype For some standard binary file formats gnuplot can extract all the necessary information from the file in question. As an example, "format=edf" will read ESRF Header File format files. For a list of the currently supported file formats, type show datafile binary filetypes.

There is a special file type called auto for which gnuplot will check if the binary file’s extension is a quasi-standard extension for a supported format.

Command line keywords may be used to override settings extracted from the file. The settings from the file override any defaults. (See set datafile binary (p. 305) for details.)

Avs avs is one of the automatically recognized binary file types for images. AVS is an extremely simple format, suitable mostly for streaming between applications. It consists of 2 longs (xwidth, ywidth) followed by a stream of pixels, each with four bytes of information alpha/red/green/blue.

Edf edf is one of the automatically recognized binary file types for images. EDF stands for ESRF Data Format, and it supports both edf and ehf formats (the latter means ESRF Header Format). More information on specifications can be found at

 http://www.esrf.fr/computing/expg/subgroups/general/format/Format.html

See also binary (p. 154).

Keywords The following keywords apply only when generating coordinates. That is, when the keyword array is used.

Scan A great deal of confusion can arise concerning the relationship between how gnuplot scans a binary file and the dimensions seen on the plot. To lessen the confusion, conceptually think of gnuplot always scanning the binary file point/line/plane or fast/medium/slow. Then this keyword is used to tell gnuplot how to map this scanning convention to the Cartesian convention shown in plots, i.e., x/y/z. The qualifier for scan is a two or three letter code representing where point is assigned (first letter), line is assigned (second letter), and plane is assigned (third letter). For example, scan=yx means the fastest, point-by-point, increment should be mapped along the Cartesian y dimension and the middle, line-by-line, increment should be mapped along the x dimension. When the plotting mode is plot, the qualifier code can include the two letters x and y. For splot, it can include the three letters x, y and z.

There is nothing restricting the inherent mapping from point/line/plane to apply only to Cartesian coordinates. For this reason there are cylindrical coordinate synonyms for the qualifier codes where t (theta), r and z are analogous to the x, y and z of Cartesian coordinates.

Transpose Shorthand notation for scan=yx or scan=yxz.

Dx, dy, dz When gnuplot generates coordinates, it uses the spacing described by these keywords. For example dx=10 dy=20 would mean space samples along the x dimension by 10 and space samples along the y dimension by 20. dy cannot appear if dx does not appear. Similarly, dz cannot appear if dy does not appear. If the underlying dimensions are greater than the keywords specified, the spacing of the highest dimension given is extended to the other dimensions. For example, if an image is being read from a file and only dx=3.5 is given gnuplot uses a delta x and delta y of 3.5. The following keywords also apply only when generating coordinates. However they may also be used with matrix binary files.

Flipx, flipy, flipz Sometimes the scanning directions in a binary datafile are not consistent with that assumed by gnuplot. These keywords can flip the scanning direction along dimensions x, y, z.

Origin When gnuplot generates coordinates based upon transposition and flip, it attempts to always position the lower left point in the array at the origin, i.e., the data lies in the first quadrant of a Cartesian system after transpose and flip. To position the array somewhere else on the graph, the origin keyword directs gnuplot to position the lower left point of the array at a point specified by a tuple. The tuple should be a double for plot and a triple for splot. For example, origin=(100,100):(100,200) is for two records in the file and intended for plotting in two dimensions. A second example, origin=(0,0,3.5), is for plotting in three dimensions.

Center Similar to origin, this keyword will position the array such that its center lies at the point given by the tuple. For example, center=(0,0). Center does not apply when the size of the array is Inf.

Rotate The transpose and flip commands provide some flexibility in generating and orienting coordinates. However, for full degrees of freedom, it is possible to apply a rotational vector described by a rotational angle in two dimensions. The rotate keyword applies to the two-dimensional plane, whether it be plot or splot. The rotation is done with respect to the positive angle of the Cartesian plane.

The angle can be expressed in radians, radians as a multiple of pi, or degrees. For example, rotate=1.5708, rotate=0.5pi and rotate=90deg are equivalent.

If origin is specified, the rotation is done about the lower left sample point before translation. Otherwise, the rotation is done about the array center.

Perpendicular For splot, the concept of a rotational vector is implemented by a triple representing the vector to be oriented normal to the two-dimensional x-y plane. Naturally, the default is (0,0,1). Thus specifying both rotate and perpendicular together can orient data myriad ways in three-space. The two-dimensional rotation is done first, followed by the three-dimensional rotation. That is, if R’ is the rotational 2 x 2 matrix described by an angle, and P is the 3 x 3 matrix projecting (0,0,1) to (xp,yp,zp), let R be constructed from R’ at the upper left sub-matrix, 1 at element 3,3 and zeros elsewhere. Then the matrix formula for translating data is v’ = P R v, where v is the 3 x 1 vector of data extracted from the data file. In cases where the data of the file is inherently not three-dimensional, logical rules are used to place the data in three-space. (E.g., usually setting the z-dimension value to zero and placing 2D data in the x-y plane.)

Binary examples Examples:

     # Selects two float values (second one implicit) with a float value  
     # discarded between them for an indefinite length of 1D data.  
     plot ’<file_name>’ binary format="%float%*float" using 1:2 with lines

     # The data file header contains all details necessary for creating  
     # coordinates from an EDF file.  
     plot ’<file_name>’ binary filetype=edf with image  
     plot ’<file_name>.edf’ binary filetype=auto with image

     # Selects three unsigned characters for components of a raw RGB image  
     # and flips the y-dimension so that typical image orientation (start  
     # at top left corner) translates to the Cartesian plane.  Pixel  
     # spacing is given and there are two images in the file.  One of them  
     # is translated via origin.  
     plot ’<file_name>’ binary array=512x1024:1024x512 format=’%uchar’ \  
          dx=2:1 dy=1:2 origin=(0,0):(1024,1024) flipy u 1:2:3 w rgbimage

     # Four separate records in which the coordinates are part of the  
     # data file.  The file was created with a endianess different from  
     # the system on which gnuplot is running.  
     splot ’<file_name>’ binary record=30:30:29:26 endian=swap u 1:2:3

See also binary matrix (p. 541).

34.1.3 Every

The every keyword allows a periodic sampling of a data set to be plotted.

In the discussion a "point" is a datum defined by a single record in the file; "block" here will mean the same thing as "datablock" (see glossary (p. 63)).

Syntax:

     plot ’file’ every {<point_incr>}  
                         {:{<block_incr>}  
                           {:{<start_point>}  
                             {:{<start_block>}  
                               {:{<end_point>}  
                                 {:<end_block>}}}}}

The data points to be plotted are selected according to a loop from <start_point> to <end_point> with increment <point_incr> and the blocks according to a loop from <start_block> to <end_block> with increment <block_incr>.

The first datum in each block is numbered ’0’, as is the first block in the file.

Note that records containing unplottable information are counted.

Any of the numbers can be omitted; the increments default to unity, the start values to the first point or block, and the end values to the last point or block. If every is not specified, all points in all lines are plotted.

Examples:

     every :::3::3    # selects just the fourth block (’0’ is first)  
     every :::::9     # selects the first 10 blocks  
     every 2:2        # selects every other point in every other block  
     every ::5::15    # selects points 5 through 15 in each block

See

simple plot demos (simple.dem)

,

Non-parametric splot demos

, and

Parametric splot demos

.

34.1.4 Example datafile

This example plots the data in the file "population.dat" and a theoretical curve:

     pop(x) = 103*exp((1965-x)/10)  
     plot [1960:1990] ’population.dat’, pop(x)

The file "population.dat" might contain:

     # Gnu population in Antarctica since 1965  
        1965   103  
        1970   55  
        1975   34  
        1980   24  
        1985   10

34.1.5 Index

The index keyword allows you to select specific data sets in a multi-data-set file for plotting.

Syntax:

     plot ’file’ index <m>{{:<n>}:<p>}

Data sets are separated by pairs of blank records. index <m> selects only set <m>; index <m>:<n> selects sets in the range <m> to <n>; and index <m>:<n>:<p> selects indices <m>, <m>+<p>, <m>+2<p>, etc., but stopping at <n>. Following C indexing, the index 0 is assigned to the first data set in the file. Specifying too large an index results in an error message. If index is not specified, all sets are plotted as a single data set.

Example:

     plot ’file’ index 4:5

For each point in the file, the index value of the data set it appears in is available via the pseudo-column column(-2). This leads to an alternative way of distinguishing individual data sets within a file as shown below. This is more awkward that the index command if all you are doing is selecting one data set for plotting, but is very useful if you want to assign different properties to each data set. See lc variable (p. 71).

Example:

     plot ’file’ using 1:(column(-2)==4 ? $2 : NaN)        # very awkward  
     plot ’file’ using 1:2:(column(-2)) linecolor variable # very useful!

34.1.6 Smooth

gnuplot includes a few general-purpose routines for interpolation and approximation of data; these are grouped under the smooth option. More sophisticated data processing may be performed by preprocessing the data externally or by using fit with an appropriate model.

Syntax:

     smooth {unique | frequency | csplines | acsplines | bezier | sbezier}

unique and frequency plot the data after making them monotonic. Each of the other routines uses the data to determine the coefficients of a continuous curve between the endpoints of the data. This curve is then plotted in the same manner as a function, that is, by finding its value at uniform intervals along the abscissa (see set samples (p. 433)) and connecting these points with straight line segments (if a line style is chosen).

If autoscale is in effect, the ranges will be computed such that the plotted curve lies within the borders of the graph.

If autoscale is not in effect, and the smooth option is either acspline or cspline, the sampling of the generated curve is done across the intersection of the x range covered by the input data and the fixed abscissa range as defined by set xrange.

If too few points are available to allow the selected option to be applied, an error message is produced. The minimum number is one for unique and frequency, four for acsplines, and three for the others.

The smooth options have no effect on function plots.

Acsplines The acsplines option approximates the data with a "natural smoothing spline". After the data are made monotonic in x (see smooth unique (p. 174)), a curve is piecewise constructed from segments of cubic polynomials whose coefficients are found by the weighting the data points; the weights are taken from the third column in the data file. That default can be modified by the third entry in the using list, e.g.,

     plot ’data-file’ using 1:2:(1.0) smooth acsplines

Qualitatively, the absolute magnitude of the weights determines the number of segments used to construct the curve. If the weights are large, the effect of each datum is large and the curve approaches that produced by connecting consecutive points with natural cubic splines. If the weights are small, the curve is composed of fewer segments and thus is smoother; the limiting case is the single segment produced by a weighted linear least squares fit to all the data. The smoothing weight can be expressed in terms of errors as a statistical weight for a point divided by a "smoothing factor" for the curve so that (standard) errors in the file can be used as smoothing weights.

Example:

     sw(x,S)=1/(x*x*S)  
     plot ’data_file’ using 1:2:(sw($3,100)) smooth acsplines

Bezier The bezier option approximates the data with a Bezier curve of degree n (the number of data points) that connects the endpoints.

Csplines The csplines option connects consecutive points by natural cubic splines after rendering the data monotonic (see smooth unique (p. 174)).

Sbezier The sbezier option first renders the data monotonic (unique) and then applies the bezier algorithm.

Unique The unique option makes the data monotonic in x; points with the same x-value are replaced by a single point having the average y-value. The resulting points are then connected by straight line segments.

demos

Frequency The frequency option makes the data monotonic in x; points with the same x-value are replaced by a single point having the summed y-values. The resulting points are then connected by straight line segments.

34.1.7 Special-filenames

A special filename of ’-’ specifies that the data are inline; i.e., they follow the command. Only the data follow the command; plot options like filters, titles, and line styles remain on the plot command line. This is similar to << in unix shell script, and $DECK in VMS DCL. The data are entered as though they are being read from a file, one data point per record. The letter "e" at the start of the first column terminates data entry. The using option can be applied to these data — using it to filter them through a function might make sense, but selecting columns probably doesn’t!

’-’ is intended for situations where it is useful to have data and commands together, e.g., when gnuplot is run as a sub-process of some front-end application. Some of the demos, for example, might use this feature. While plot options such as index and every are recognized, their use forces you to enter data that won’t be used. For example, while

     plot ’-’ index 0, ’-’ index 1  
     2  
     4  
     6

     10  
     12  
     14  
     e  
     2  
     4  
     6

     10  
     12  
     14  
     e

does indeed work,

     plot ’-’, ’-’  
     2  
     4  
     6  
     e  
     10  
     12  
     14  
     e

is a lot easier to type.

If you use ’-’ with replot, you may need to enter the data more than once (see replot (p. 233)).

A blank filename (’ ’) specifies that the previous filename should be reused. This can be useful with things like

     plot ’a/very/long/filename’ using 1:2, ’’ using 1:3, ’’ using 1:4

(If you use both ’-’ and ’ ’ on the same plot command, you’ll need to have two sets of inline data, as in the example above.)

On some computer systems with a popen function (Unix), the datafile can be piped through a shell command by starting the file name with a ’<’. For example,

     pop(x) = 103*exp(-x/10)  
     plot "< awk ’{print $1-1965, $2}’ population.dat", pop(x)

would plot the same information as the first population example but with years since 1965 as the x axis. If you want to execute this example, you have to delete all comments from the data file above or substitute the following command for the first part of the command above (the part up to the comma):

     plot "< awk ’$0 !~ /^#/ {print $1-1965, $2}’ population.dat"

While this approach is most flexible, it is possible to achieve simple filtering with the using or thru keywords.

34.1.8 Thru

The thru function is provided for backward compatibility.

Syntax:

     plot ’file’ thru f(x)

It is equivalent to:

     plot ’file’ using 1:(f($2))

While the latter appears more complex, it is much more flexible. The more natural

     plot ’file’ thru f(y)

also works (i.e. you can use y as the dummy variable).

thru is parsed for splot and fit but has no effect.

34.1.9 Using

The most common datafile modifier is using.

Syntax:

     plot ’file’ using {<entry> {:<entry> {:<entry> ...}}} {’format’}

If a format is specified, each datafile record is read using the C library’s ’scanf’ function, with the specified format string. Otherwise the record is read and broken into columns. By default the separation between columns is whitespace (spaces and/or tabs), but see datafile separator (p. 297).

Each <entry> may be a simple column number that selects the value from one field of the input fit, an expression enclosed in parentheses, or empty.

If the entry is an expression in parentheses, then the function column(N) may be used to indicate the value in column N. That is, column(1) refers to the first item read, column(2) to the second, and so on. The special symbols $1, $2, ... are shorthand for column(1), column(2) ... The function valid(N) tests whether the value in the Nth column is a valid number.

In addition to the actual columns 1...N in the input data file, gnuplot presents data from several "pseudo-columns" that hold bookkeeping information. E.g. $0 or column(0) returns the sequence number of this data record within a dataset.

An empty <entry> will default to its order in the list of entries. For example, using ::4 is interpreted as using 1:2:4.

If the using list has but a single entry, that <entry> will be used for y and the data point number (pseudo-column $0) is used for x; for example, "plot ’file’ using 1" is identical to "plot ’file’ using 0:1". If the using list has two entries, these will be used for x and y. See set style (p. 439) and fit (p. 118) for details about plotting styles that make use of data from additional columns of input.

’scanf’ accepts several numerical specifications but gnuplot requires all inputs to be double-precision floating-point variables, so "%lf" is essentially the only permissible specifier. A format string given by the user must contain at least one such input specifier, and no more than seven of them. ’scanf’ expects to see white space — a blank, tab ("\t"), newline ("\n"), or formfeed ("\f") — between numbers; anything else in the input stream must be explicitly skipped.

Note that the use of "\t", "\n", or "\f" requires use of double-quotes rather than single-quotes.

Using_examples This creates a plot of the sum of the 2nd and 3rd data against the first: The format string specifies comma- rather than space-separated columns. The same result could be achieved by specifying set datafile separator ",".

     plot ’file’ using 1:($2+$3) ’%lf,%lf,%lf’

In this example the data are read from the file "MyData" using a more complicated format:

     plot ’MyData’ using "%*lf%lf%*20[^\n]%lf"

The meaning of this format is:

     %*lf        ignore a number  
     %lf         read a double-precision number (x by default)  
     %*20[^\n]   ignore 20 non-newline characters  
     %lf         read a double-precision number (y by default)

One trick is to use the ternary ?: operator to filter data:

     plot ’file’ using 1:($3>10 ? $2 : 1/0)

which plots the datum in column two against that in column one provided the datum in column three exceeds ten. 1/0 is undefined; gnuplot quietly ignores undefined points, so unsuitable points are suppressed. Or you can use the pre-defined variable NaN to achieve the same result.

In fact, you can use a constant expression for the column number, provided it doesn’t start with an opening parenthesis; constructs like using 0+(complicated expression) can be used. The crucial point is that the expression is evaluated once if it doesn’t start with a left parenthesis, or once for each data point read if it does.

If timeseries data are being used, the time can span multiple columns. The starting column should be specified. Note that the spaces within the time must be included when calculating starting columns for other data. E.g., if the first element on a line is a time with an embedded space, the y value should be specified as column three.

It should be noted that plot ’file’, plot ’file’ using 1:2, and plot ’file’ using ($1):($2) can be subtly different: 1) if file has some lines with one column and some with two, the first will invent x values when they are missing, the second will quietly ignore the lines with one column, and the third will store an undefined value for lines with one point (so that in a plot with lines, no line joins points across the bad point); 2) if a line contains text at the first column, the first will abort the plot on an error, but the second and third should quietly skip the garbage.

In fact, it is often possible to plot a file with lots of lines of garbage at the top simply by specifying

     plot ’file’ using 1:2

However, if you want to leave text in your data files, it is safer to put the comment character (#) in the first column of the text lines.

Feeble using demos.

If gnuplot is built with configuration option –enable-datastrings, then additional modifiers to using can specify handling of text fields in the datafile. See datastrings (p. 43), using xticlabels (p. 192), using title (p. 191).

Using title If gnuplot is built with configuration option –enable-datastrings, then the first entry of a column of the input data file can be used as a string to provide the plot title in the key box. The column containing specified is independent of the column[s] used for the plot itself.

  plot ’data’ using 1:($2/$3) title column(N)

In this case the entry in the first row of column N will be used for the key entry of the plot constructed from dividing column 2 by column 3. The entry in the first row of columns 2 and 3 will be ignored.

Xticlabels If gnuplot is built with configuration option –enable-datastrings, then a column of the input data file can be used to label axis tic marks. The format of such a plot command is

 plot ’datafile’ using <xcol>:<ycol>:xticlabels(<labelcol>) with <plotstyle>

Tic labels may be read for any of the plot axes: x x2 y y2 z. The ticlabels(<labelcol>) specifiers must come after all of the data coordinate specifiers in the using portion of the command. For each data point which has a valid set of X,Y[,Z] coordinates, the text field found in column <labelcol> is added to the list of xtic labels at the same X coordinate as the point it belongs to. xticlabels(<labelcol>) may be shortened to xtic(<labelcol>).

Example:

     splot "data" using 2:4:6:xtic(1):ytic(3):ztic(6)

In this example the x and y axis tic labels are taken from different columns than the x and y coordinate values. The z axis tics, however, are generated from the z coordinate of the corresponding point.

X2ticlabels See plot using xticlabels (p. 192).

Yticlabels See plot using xticlabels (p. 192).

Y2ticlabels See plot using xticlabels (p. 192).

Zticlabels See plot using xticlabels (p. 192).

34.2 Errorbars

Error bars are supported for 2-d data file plots by reading one to four additional columns (or using entries); these additional values are used in different ways by the various errorbar styles.

In the default situation, gnuplot expects to see three, four, or six numbers on each line of the data file — either

     (x, y, ydelta),  
     (x, y, ylow, yhigh),  
     (x, y, xdelta),  
     (x, y, xlow, xhigh),  
     (x, y, xdelta, ydelta), or  
     (x, y, xlow, xhigh, ylow, yhigh).

The x coordinate must be specified. The order of the numbers must be exactly as given above, though the using qualifier can manipulate the order and provide values for missing columns. For example,

     plot ’file’ with errorbars  
     plot ’file’ using 1:2:(sqrt($1)) with xerrorbars  
     plot ’file’ using 1:2:($1-$3):($1+$3):4:5 with xyerrorbars

The last example is for a file containing an unsupported combination of relative x and absolute y errors. The using entry generates absolute x min and max from the relative error.

The y error bar is a vertical line plotted from (x, ylow) to (x, yhigh). If ydelta is specified instead of ylow and yhigh, ylow = y - ydelta and yhigh = y + ydelta are derived. If there are only two numbers on the record, yhigh and ylow are both set to y. The x error bar is a horizontal line computed in the same fashion. To get lines plotted between the data points, plot the data file twice, once with errorbars and once with lines (but remember to use the notitle option on one to avoid two entries in the key). Alternately, use the errorlines command (see errorlines (p. 196)).

The error bars have crossbars at each end unless set bars is used (see set bars (p. 263) for details).

If autoscaling is on, the ranges will be adjusted to include the error bars.

See also

errorbar demos.

See plot using (p. 185), plot with (p. 213), and set style (p. 439) for more information.

34.3 Errorlines

Lines with error bars are supported for 2-d data file plots by reading one to four additional columns (or using entries); these additional values are used in different ways by the various errorlines styles.

In the default situation, gnuplot expects to see three, four, or six numbers on each line of the data file — either

     (x, y, ydelta),  
     (x, y, ylow, yhigh),  
     (x, y, xdelta),  
     (x, y, xlow, xhigh),  
     (x, y, xdelta, ydelta), or  
     (x, y, xlow, xhigh, ylow, yhigh).

The x coordinate must be specified. The order of the numbers must be exactly as given above, though the using qualifier can manipulate the order and provide values for missing columns. For example,

     plot ’file’ with errorlines  
     plot ’file’ using 1:2:(sqrt($1)) with xerrorlines  
     plot ’file’ using 1:2:($1-$3):($1+$3):4:5 with xyerrorlines

The last example is for a file containing an unsupported combination of relative x and absolute y errors. The using entry generates absolute x min and max from the relative error.

The y error bar is a vertical line plotted from (x, ylow) to (x, yhigh). If ydelta is specified instead of ylow and yhigh, ylow = y - ydelta and yhigh = y + ydelta are derived. If there are only two numbers on the record, yhigh and ylow are both set to y. The x error bar is a horizontal line computed in the same fashion.

The error bars have crossbars at each end unless set bars is used (see set bars (p. 263) for details).

If autoscaling is on, the ranges will be adjusted to include the error bars.

See plot using (p. 185), plot with (p. 213), and set style (p. 439) for more information.

34.4 Parametric

When in parametric mode (set parametric) mathematical expressions must be given in pairs for plot and in triplets for splot.

Examples:

     plot sin(t),t**2  
     splot cos(u)*cos(v),cos(u)*sin(v),sin(u)

Data files are plotted as before, except any preceding parametric function must be fully specified before a data file is given as a plot. In other words, the x parametric function (sin(t) above) and the y parametric function (t**2 above) must not be interrupted with any modifiers or data functions; doing so will generate a syntax error stating that the parametric function is not fully specified.

Other modifiers, such as with and title, may be specified only after the parametric function has been completed:

     plot sin(t),t**2 title ’Parametric example’ with linespoints

See also

Parametric Mode Demos.

34.5 Ranges

The optional ranges specify the region of the graph that will be displayed.

Syntax:

     [{<dummy-var>=}{{<min>}:{<max>}}]  
     [{{<min>}:{<max>}}]

The first form applies to the independent variable (xrange or trange, if in parametric mode). The second form applies to the dependent variable yrange (and xrange, too, if in parametric mode). <dummy-var> is a new name for the independent variable. (The defaults may be changed with set dummy.) The optional <min> and <max> terms can be constant expressions or *.

In non-parametric mode, the order in which ranges must be given is xrange and yrange.

In parametric mode, the order for the plot command is trange, xrange, and yrange. The following plot command shows setting the trange to [-pi:pi], the xrange to [-1.3:1.3] and the yrange to [-1:1] for the duration of the graph:

     plot [-pi:pi] [-1.3:1.3] [-1:1] sin(t),t**2

Note that the x2range and y2range cannot be specified here — set x2range and set y2range must be used.

Ranges are interpreted in the order listed above for the appropriate mode. Once all those needed are specified, no further ones must be listed, but unneeded ones cannot be skipped — use an empty range [] as a placeholder.

* can be used to allow autoscaling of either of min and max. See also set autoscale (p. 255).

Ranges specified on the plot or splot command line affect only that graph; use the set xrange, set yrange, etc., commands to change the default ranges for future graphs.

With time data, you must provide the range (in the same manner as the time appears in the datafile) within quotes. gnuplot uses the timefmt string to read the value — see set timefmt (p. 495).

Examples:

This uses the current ranges:

     plot cos(x)

This sets the x range only:

     plot [-10:30] sin(pi*x)/(pi*x)

This is the same, but uses t as the dummy-variable:

     plot [t = -10 :30]  sin(pi*t)/(pi*t)

This sets both the x and y ranges:

     plot [-pi:pi] [-3:3]  tan(x), 1/x

This sets only the y range, and turns off autoscaling on both axes:

     plot [ ] [-2:sin(5)*-8] sin(x)**besj0(x)

This sets xmax and ymin only:

     plot [:200] [-pi:]  exp(sin(x))

This sets the x range for a timeseries:

     set timefmt "%d/%m/%y %H:%M"  
     plot ["1/6/93 12:00":"5/6/93 12:00"] ’timedata.dat’

34.6 Title

A line title for each function and data set appears in the key, accompanied by a sample of the line and/or symbol used to represent it. It can be changed by using the title option.

Syntax:

     title "<title>" | notitle ["<ignored title>"]

where <title> is the new title of the line and must be enclosed in quotes. The quotes will not be shown in the key. A special character may be given as a backslash followed by its octal value ("\345"). The tab character "\t" is understood. Note that backslash processing occurs only for strings enclosed in double quotes — use single quotes to prevent such processing. The newline character "\n" is not processed in key entries in either type of string.

The line title and sample can be omitted from the key by using the keyword notitle. A null title (title ’ ’) is equivalent to notitle. If only the sample is wanted, use one or more blanks (title ’ ’). If notitle is followed by a string this string is ignored.

If key autotitles is set (which is the default) and neither title nor notitle are specified the line title is the function name or the file name as it appears on the plot command. If it is a file name, any datafile modifiers specified will be included in the default title.

The layout of the key itself (position, title justification, etc.) can be controlled by set key. Please see set key (p. 336) for details.

Examples:

This plots y=x with the title ’x’:

     plot x

This plots x squared with title "x^2" and file "data.1" with title "measured data":

     plot x**2 title "x^2", ’data.1’ t "measured data"

This puts an untitled circular border around a polar graph:

     set polar; plot my_function(t), 1 notitle

34.7 With

Functions and data may be displayed in one of a large number of styles. The with keyword provides the means of selection.

Syntax:

     with <style> { {linestyle | ls <line_style>}  
                    | {{linetype  | lt <line_type>}  
                       {linewidth | lw <line_width>}  
                       {linecolor | lc <colorspec>}  
                       {pointtype | pt <point_type>}  
                       {pointsize | ps <point_size>}  
                       {fill | fs <fillstyle>}  
                       {nohidden3d | nocontours}  
                       {palette}}  
                  }

where <style> is either lines, points, linespoints, impulses, dots, steps, fsteps, histeps, errorbars, labels, xerrorbars, yerrorbars, xyerrorbars, errorlines, xerrorlines, yerrorlines, xyerrorlines, boxes, histograms, filledcurves, boxerrorbars, boxxyerrorbars, financebars, candlesticks, vectors, image, rgbimage or pm3d. Some of these styles require additional information. See plotting styles (p. 456) for details of each style. fill is relevant only to certain 2D plots (currently boxes boxxyerrorbars and candlesticks). Note that filledcurves and pm3d can take an additional option not listed above (the latter only when used in the splot command) — see their help or examples below for more details.

Default styles are chosen with the set style function and set style data commands.

By default, each function and data file will use a different line type and point type, up to the maximum number of available types. All terminal drivers support at least six different point types, and re-use them, in order, if more are required. The LaTeX driver supplies an additional six point types (all variants of a circle), and thus will only repeat after 12 curves are plotted with points. The PostScript drivers (postscript) supplies a total of 64.

If you wish to choose the line or point type for a single plot, <line_type> and <point_type> may be specified. These are positive integer constants (or expressions) that specify the line type and point type to be used for the plot. Use test to display the types available for your terminal.

You may also scale the line width and point size for a plot by using <line_width> and <point_size>, which are specified relative to the default values for each terminal. The pointsize may also be altered globally — see set pointsize (p. 424) for details. But note that both <point_size> as set here and as set by set pointsize multiply the default point size — their effects are not cumulative. That is, set pointsize 2; plot x w p ps 3 will use points three times default size, not six.

It is also possible to specify pointsize variable either as part of a line style or for an individual plot. In this case one extra column of input is required, i.e. 3 columns for a 2D plot and 4 columns for a 3D splot. The size of each individual point is determined by multiplying the global pointsize by the value read from the data file.

If you have defined specific line type/width and point type/size combinations with set style line, one of these may be selected by setting <line_style> to the index of the desired style.

If gnuplot was built with pm3d support, the special keyword palette is allowed for smooth color change of lines, points and dots in splots. The color is chosen from a smooth palette which was set previously with the command set palette. The color value corresponds to the z-value of the point coordinates or to the color coordinate if specified by the 4th parameter in using. Both 2d and 3d plots (plot and splot commands) can use palette colors as specified by either their fractional value or the corresponding value mapped to the colorbox range. A palette color value can also be read from an explicitly specified column in the using specifier. Z value. See colors (p. 64), set palette (p. 400), linetype (p. 63).

The keyword nohidden3d applies only to plots made with the splot command. Normally the global option set hidden3d applies to all plots in the graph. You can attach the nohidden3d option to any individual plots that you want to exclude from the hidden3d processing. The individual elements other than surfaces (i.e. lines, dots, labels, ...) of a plot marked nohidden3d will all be drawn, even if they would normally be obscured by other plot elements.

Similarly, the keyword nocontours will turn off contouring for an individual plot even if the global property "set contour" is active.

The keywords may be abbreviated as indicated.

Note that the linewidth, pointsize and palette options are not supported by all terminals.

Examples:

This plots sin(x) with impulses:

     plot sin(x) with impulses

This plots x with points, x**2 with the default:

     plot x w points, x**2

This plots tan(x) with the default function style, file "data.1" with lines:

     plot [ ] [-2:5] tan(x), ’data.1’ with l

This plots "leastsq.dat" with impulses:

     plot ’leastsq.dat’ w i

This plots the data file "population" with boxes:

     plot ’population’ with boxes

This plots "exper.dat" with errorbars and lines connecting the points (errorbars require three or four columns):

     plot ’exper.dat’ w lines, ’exper.dat’ notitle w errorbars

Another way to plot "exper.dat" with errorlines (errorbars require three or four columns):

     plot ’exper.dat’ w errorlines

This plots sin(x) and cos(x) with linespoints, using the same line type but different point types:

     plot sin(x) with linesp lt 1 pt 3, cos(x) with linesp lt 1 pt 4

This plots file "data" with points of type 3 and twice usual size:

     plot ’data’ with points pointtype 3 pointsize 2

This plots file "data" with variable pointsize read from column 4

     plot ’data’ using 1:2:4 with points pt 5 pointsize variable

This plots two data sets with lines differing only by weight:

     plot ’d1’ t "good" w l lt 2 lw 3, ’d2’ t "bad" w l lt 2 lw 1

This plots filled curve of x*x and a color stripe:

     plot x*x with filledcurve closed, 40 with filledcurve y1=10

This plots x*x and a color box:

     plot x*x, (x>=-5 && x<=5 ? 40 : 1/0) with filledcurve y1=10 lt 8

This plots a surface with color lines:

     splot x*x-y*y with line palette

This plots two color surfaces at different altitudes:

     splot x*x-y*y with pm3d, x*x+y*y with pm3d at t

35 Print

The print command prints the value of <expression> to the screen. It is synonymous with pause 0. <expression> may be anything that gnuplot can evaluate that produces a number, or it can be a string.

Syntax:

     print <expression> {, <expression>, ...}

See expressions (p. 48). The output file can be set with set print.

36 Pwd

The pwd command prints the name of the working directory to the screen.

37 Quit

The exit and quit commands and END-OF-FILE character will exit gnuplot. Each of these commands will clear the output device (as does the clear command) before exiting.

38 Raise

Syntax:

     raise {plot_window_nb}

The raise command raises (opposite to lower) plot window(s) associated with the interactive terminal of your gnuplot session, i.e. pm, win, wxt or x11. It puts the plot window to front (top) in the z-order windows stack of the window manager of your desktop.

As x11 and wxt support multiple plot windows, then by default they raise these windows in descending order of most recently created on top to the least recently created on bottom. If a plot number is supplied as an optional parameter, only the associated plot window will be raised if it exists.

The optional parameter is ignored for single plot-windows terminal, i.e. pm and win.

If the window is not raised under X11, then (1) they don’t run in the same  
X11 session (telnet or ssh session, for example), or (2) raising is blocked  
by your window manager. On KDE, you may like to go to the KDE Control Center  
=> Desktop => Window Behaviour => Advanced and set the "Focus stealing  
prevention level" to None (default is Low).

39 Replot

The replot command without arguments repeats the last plot or splot command. This can be useful for viewing a plot with different set options, or when generating the same plot for several devices.

Arguments specified after a replot command will be added onto the last plot or splot command (with an implied ’,’ separator) before it is repeated. replot accepts the same arguments as the plot and splot commands except that ranges cannot be specified. Thus you can use replot to plot a function against the second axes if the previous command was plot but not if it was splot.

N.B. — use of

     plot ’-’ ; ... ; replot

is not recommended. gnuplot does not store the inline data internally, so since replot appends new information to the previous plot and then executes the modified command, the ’-’ from the initial plot will expect to read inline data again.

Note that replot does not work in multiplot mode, since it reproduces only the last plot rather than the entire screen.

See also command-line-editing (p. 40) for ways to edit the last plot (p. 149) (splot (p. 539)) command.

See also show plot (p. 390) to show the whole current plotting command, and the possibility to copy it into the history (p. 136).

40 Reread

The reread command causes the current gnuplot command file, as specified by a load command or on the command line, to be reset to its starting point before further commands are read from it. This essentially implements an endless loop of the commands from the beginning of the command file to the reread command. (But this is not necessarily a disaster — reread can be very useful when used in conjunction with if. See if (p. 137) for details.) The reread command has no effect if input from standard input.

Examples:

Suppose the file "looper" contains the commands

     a=a+1  
     plot sin(x*a)  
     pause -1  
     if(a<5) reread

and from within gnuplot you submit the commands

     a=0  
     load ’looper’

The result will be five plots (separated by the pause message).

Suppose the file "data" contains six columns of numbers with a total yrange from 0 to 10; the first is x and the next are five different functions of x. Suppose also that the file "plotter" contains the commands

     c_p = c_p+1  
     plot "$0" using 1:c_p with lines linetype c_p  
     if(c_p <  n_p) reread

and from within gnuplot you submit the commands

     n_p=6  
     c_p=1  
     unset key  
     set yrange [0:10]  
     set multiplot  
     call ’plotter’ ’data’  
     unset multiplot

The result is a single graph consisting of five plots. The yrange must be set explicitly to guarantee that the five separate graphs (drawn on top of each other in multiplot mode) will have exactly the same axes. The linetype must be specified; otherwise all the plots would be drawn with the same type. See animate.dem in demo directory for an animated example.

41 Reset

The reset command causes all graph-related options that can be set with the set command to take on their default values. This command is useful, e.g., to restore the default graph settings at the end of a command file, or to return to a defined state after lots of settings have been changed within a command file. Please refer to the set command to see the default values that the various options take.

The following set commands do not change the graph status and are thus left unchanged: the terminal set with set term, the output file set with set output and directory paths set with set loadpath and set fontpath.

42 <