At present, we are trying to get utilities by wget/curl.
--- /dev/null
+;;;; gnuplot-gui.el -- GUI interface to setting options in gnuplot-mode
+
+;; Copyright (C) 1998-2000 Bruce Ravel
+
+;; Author: Bruce Ravel <ravel@phys.washington.edu>
+;; Maintainer: Bruce Ravel <ravel@phys.washington.edu>
+;; Created: 19 December 1998
+;; Updated: 16 November 2000
+;; Version: (same as gnuplot.el)
+;; Keywords: gnuplot, plotting, interactive, GUI
+
+;; This file is not part of GNU Emacs.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This lisp script is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;; Permission is granted to distribute copies of this lisp script
+;; provided the copyright notice and this permission are preserved in
+;; all copies.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; send bug reports to the authors (ravel@phys.washington.edu)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Commentary:
+;;
+;; This file provides a graphical user interface to setting arguments
+;; to gnuplot commands. Positioning point near a command and invoking
+;; `gnuplot-gui-set-options-and-insert' (C-c C-c or shift-mouse-2)
+;; will pop open a frame with widgets for setting the various
+;; arguments appropriate the the item that was near point. The goal
+;; is to provide point-and-click functionality to gnuplot-mode.
+;;
+;; gnuplot-gui is designed for gnuplot 3.7, but since much of 3.7 is
+;; backward compatible to 3.5, it will work well for that version
+;; also.
+;;
+;; gnuplot-gui.el was developed using Emacs 19.34 and is known to work
+;; on Emacs 20.x and XEmacs 20.x. I do not know what is the earliest
+;; version for which it will work, but I make no guarantees for
+;; versions before 19.34. Note that this makes heavy use of the
+;; widget package, so this will not work on Emacs 19.34 unless you
+;; install the widget package separately.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; To do:
+;;
+;; Widgets I need:
+;; -- 'position: two or three comma separated numbers used to denote a
+;; position or a tic start/end/increment (see arrow,
+;; need a prefix)
+;; -- 'modifier: colon separated fields used for datafile modifiers
+;;
+;; command types which are currently unsupported or contain mistakes
+;; -- unsupported: cntrparam
+;; -- plot, splot, fit: rather lame
+;; -- label: position information missing
+;; -- label: font string handled in overly simple manner
+;; -- hidden3d: not really suited to 'list, but all options are exclusive...
+;; -- pointstyle argument to "set label"
+;;
+;; overall:
+;; -- continuation lines (ugh!)
+;; -- multiple frames end up displaying same window after setting options
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Code:
+
+(require 'gnuplot)
+(eval-and-compile
+ (condition-case ()
+ (progn
+ (require 'widget)
+ (require 'wid-edit))
+ (error nil)))
+(require 'cl)
+(eval-when-compile ; suppress some compiler warnings
+ (defvar gnuplot-xemacs-p nil)
+ (defvar gnuplot-quote-character nil)
+ (defvar gnuplot-info-display nil)
+ (defvar gnuplot-mode-map nil))
+
+;; (eval-when-compile
+;; (require 'wid-edit))
+
+(eval-and-compile ; I need this!
+ (if (fboundp 'split-string)
+ ()
+ (defun split-string (string &optional pattern)
+ "Return a list of substrings of STRING which are separated by PATTERN.
+If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
+ (or pattern
+ (setq pattern "[ \f\t\n\r\v]+"))
+ ;; The FSF version of this function takes care not to cons in case
+ ;; of infloop. Maybe we should synch?
+ (let (parts (start 0))
+ (while (string-match pattern string start)
+ (setq parts (cons (substring string start (match-beginning 0)) parts)
+ start (match-end 0)))
+ (nreverse (cons (substring string start) parts)))) ))
+
+
+\f
+;;; customizable variables
+
+(defgroup gnuplot-gui nil
+ "Graphical interface to setting arguments in gnuplot scrips."
+ :prefix "gnuplot-gui-"
+ :group 'gnuplot)
+
+(defcustom gnuplot-gui-popup-flag nil
+ "*Non-nil means to open arguments pop-ups automatically.
+This would be done after menu insertion of Gnuplot commands."
+ :group 'gnuplot-gui
+ :type 'boolean)
+
+(defvar gnuplot-gui-frame nil
+ "Frame used to hold the buffer for setting options.")
+(defcustom gnuplot-gui-frame-plist
+ '(height 18 width 65 border-width 0
+ user-position t top 150 left 150
+ internal-border-width 0 unsplittable t
+ default-toolbar-visible-p nil has-modeline-p nil
+ menubar-visible-p nil)
+ "Frame plist for the input run-time display frame in XEmacs."
+ :type '(repeat (group :inline t
+ (symbol :tag "Property")
+ (sexp :tag "Value")))
+ :group 'gnuplot-gui)
+(defcustom gnuplot-gui-frame-parameters
+ '((height . 18)
+ (width . 65)
+ (user-position . t)
+ (top . 150)
+ (left . 150)
+ (border-width . 0)
+ (menu-bar-lines . 0)
+ (unsplittable . t))
+ "Frame parameters for the input run-time display frame in Emacs."
+ :group 'gnuplot-gui
+ :type '(repeat (sexp :tag "Parameter:")))
+
+(defcustom gnuplot-gui-fontname-list
+ '(" " "\"Helvetica\"" "\"Times-Roman\"")
+ "List of known font names.
+These *must* be quoted, like so \"\\\"Helvetica\\\"\". This allows
+for fonts with names like \"\\\"Arial Bold Italic\\\"\" to be treated
+as single entries in the menu-buttons. And it is really important that
+the first entry in the list be a blank string."
+ :group 'gnuplot-gui
+ :type '(repeat (string :tag "Font name:")))
+
+;; some global variables
+(defvar gnuplot-current-frame nil)
+(defvar gnuplot-current-buffer nil)
+(defvar gnuplot-current-buffer-point nil)
+(defvar gnuplot-gui-alist nil)
+(defvar gnuplot-gui-current-string nil)
+
+\f
+;;; various tools for handling data structures and text in the buffer
+
+;; tools for accessing the elements of the lists in `gnuplot-gui-all-types'
+(defsubst gnuplot-gui-type-tag (obj) (elt obj 0))
+(defsubst gnuplot-gui-type-symbol (obj) (elt obj 1))
+(defsubst gnuplot-gui-type-default (obj) (elt obj 2))
+(defsubst gnuplot-gui-type-prefix (obj) (elt obj 3)) ; also 'range seperator
+(defsubst gnuplot-gui-type-fourth (obj) (elt obj 4))
+(defsubst gnuplot-gui-type-list (obj) (cddr obj))
+
+(defun gnuplot-this-word ()
+ "Return the word under point."
+ (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+ (end (save-excursion (end-of-line) (point-marker))))
+ (save-excursion
+ (or (looking-at "\\<") (= (current-column) 0) (forward-word -1))
+ (if (> (point) begin) (setq begin (point-marker)))
+ (forward-word 1)
+ (if (> (point) end) (goto-char end))
+ (buffer-substring-no-properties begin (point)))))
+
+
+\f
+;;; data structures containing regarding options in Gnuplot 3.7
+
+;; various constants used for options that take the same sorts of arguments
+(defconst gnuplot-gui-mtics-list
+ '(("FREQUENCY" 'number " ")
+ ("DEFAULT" 'list " " "default")))
+(defconst gnuplot-gui-data-list
+ '(("DATA TYPE" 'list " " "time")))
+(defconst gnuplot-gui-label-list
+ '(("LABEL" 'string " ")
+ ("POSITION" 'position " " "" 2)
+ ("FONTNAME" 'list " " gnuplot-gui-fontname-list)
+ ("FONTSIZE" 'fontsize " ")))
+(defconst gnuplot-gui-range-list
+ '(("RANGE" 'range (" " . " ") ":")
+ ("REVERSE" 'list " " "reverse" "noreverse")
+ ("WRITEBACK" 'list " " "writeback" "nowriteback")))
+(defconst gnuplot-gui-tics-list
+ '(("WHERE" 'list " " "axis" "border")
+ ("MIRROR" 'list " " "mirror" "nomirror")
+ ("ROTATE" 'list " " "rotate" "norotate")
+ ("SERIES" 'position " " "" 3)
+ ("LABEL ARRAY" 'labels () )))
+(defconst gnuplot-gui-zeroaxis-list
+ '(("LINETYPE" 'number " ")))
+
+(defvar gnuplot-gui-terminal-types nil
+ "Associated list of terminal descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-terminal-types
+ (list (cons "aifm"
+ '(("COLOR" 'list " " "monochrome" "gray" "color")
+ ("FONTNAME" 'list " " gnuplot-gui-fontname-list)
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "cgm"
+ '(("MODE" 'list " " "landscape" "portrait" "default")
+ ("COLOR" 'list " " "color" "monochrome")
+ ("ROTATION" 'list " " "rotate" "norotate")
+ ("WIDTH" 'number " " "width")
+ ("LINEWIDTH" 'number " " "linewidth")
+ ("FONTNAME" 'list " " "\"Arial\"" "\"Arial Italic\""
+ "\"Arial Bold\"" "\"Arial Bold Italic\""
+ "\"Times Roman\"" "\"Times Roman Italic\""
+ "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
+ "\"Helvetica\"" "\"Roman\"")
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "corel"
+ '(("COLOR" 'list " " "default" "color" "monochrome")
+ ("FONTNAME" 'list " " "\"SwitzerlandLight\""
+ "\"Helvetica\"" "\"Times-Roman\"")
+ ("FONTSIZE " 'number " ")
+ ("X-SIZE " 'number " ")
+ ("Y-SIZE " 'number " ")
+ ("LINEWIDTH" 'number " ")))
+ (cons "dumb"
+ '(("LINEFEED" 'list " " "feed" "nofeed")
+ ("X-SIZE" 'number " ")
+ ("Y-SIZE" 'number " ")))
+ (cons "emf"
+ '(("COLOR" 'list " " "color" "monochrome")
+ ("LINE" 'list " " "solid" "dashed")
+ ("FONTNAME" 'string " ")
+ ("FONTSIZE" 'number " ")))
+ (cons "emtex"
+ '(("FONTNAME" 'list " " "courier" "roman")
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "fig"
+ '(("COLOR" 'list " " "color" "monochrome")
+ ("FRAMESIZE" 'list " " "small" "big")
+ ("POINTSMAX" 'number " " "pointsmax")
+ ("ORIENTATION" 'list " " "landscape" "portrait")
+ ("UNITS" 'list " " "metric" "inches")
+ ("FONT SIZE" 'number " " "fontsize")
+ ("SIZE" 'pair (" " . " ") "size")
+ ("LINE THICKNESS" 'number " " "thickness")
+ ("LAYER DEPTH" 'number " " "depth")))
+ (cons "hp500c"
+ '(("RESOLUTION" 'list " " "75" "100" "150" "300")
+ ("COMPRESSION" 'list " " "rle" "tiff")))
+ (cons "hpgl"
+ '(("PENS" 'number " ")
+ ("EJECT" 'list " " "eject")))
+ (cons "hpdj"
+ '(("RESOLUTION" 'list " " "75" "100" "150" "300")))
+ (cons "hpljii"
+ '(("RESOLUTION" 'list " " "75" "100" "150" "300")))
+ (cons "hppj"
+ '(("FONT" 'list " " "FNT9X17" "FNT5X9" "FNT13X25")))
+ (cons "imagen"
+ '(("FONT SIZE" 'number " ")
+ ("LAYOUT" 'list " " "portrait" "landscape")
+ ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
+ (cons "gpic"
+ '(("X ORIGIN" 'number " ")
+ ("Y ORIGIN" 'number " " ",")))
+ (cons "latex"
+ '(("FONTNAME" 'list " " "courier" "roman")
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "mif"
+ '(("COLOUR" 'list " " "colour" "monochrome")
+ ("LINETYPE" 'list " " "polyline" "vectors")))
+ (cons "nec-cp6"
+ '(("MODE" 'list " " "monochrome" "colour" "draft")))
+ (cons "pbm"
+ '(("SIZE" 'list " " "small" "medium" "large")
+ ("COLOR" 'list " " "monochrome" "gray" "color")))
+ (cons "pcl5L"
+ '(("MODE" 'list " " "landscape" "portrait")
+ ("FONTNAME" 'list " " "stick" "univers" "cg_times")
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "png"
+ '(("SIZE" 'list " " "small" "medium" "large")
+ ("COLOR" 'list " " "monochrome" "gray" "color")))
+ (cons "postscript"
+ '(("MODE" 'list " " "landscape" "portrait" "eps" "default")
+ ("ENHANCED" 'list " " "enhanced" "noenhanced")
+ ("COLOR" 'list " " "color" "monochrome")
+ ("SOLID" 'list " " "solid" "dashed")
+ ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
+ ("FONTNAME" 'list " " gnuplot-gui-fontname-list)
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "pslatex"
+ '(("COLOR" 'list " " "monochrome" "color")
+ ("DASHED" 'list " " "dashed")
+ ("ROTATION" 'list " " "rotate" "norotate")
+ ("AUXFILE" 'list " " "auxfile")))
+ (cons "pstex"
+ '(("COLOR" 'list " " "monochrome" "color")
+ ("DASHED" 'list " " "dashed")
+ ("ROTATION" 'list " " "rotate" "norotate")
+ ("AUXFILE" 'list " " "auxfile")))
+ (cons "pstricks"
+ '(("HACK TEXT" 'list " " "hacktext" "nohacktext")
+ ("PLOT SCALING" 'list " " "nounit" "unit")))
+ (cons "regis"
+ '(("COLOR DEPTH" 'list "4" "16")))
+ (cons "tgif"
+ '(("LAYOUT" 'list " " "portrait" "landscape")
+ ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
+ ("LINE TYPE" 'list " " "solid" "dashed")
+ ("FONTNAME" 'list " " gnuplot-gui-fontname-list)
+ ("FONTSIZE" 'fontsize " ")))
+ (cons "tpic"
+ '(("POINTSIZE" 'number " ")
+ ("LINEWIDTH" 'number " ")
+ ("INTERVAL " 'number " ")))
+ (cons "vgagl" ; for pm3d patch (also persist, raise in x11) <MT>
+ '(("BACKGROUND" 'position " " "background" 3)
+ ("INTERPOLATION" 'list " " "uniform" "interpolate")
+ ("DUMP" 'file " ")
+ ("MODE" 'string " " "")))
+ (cons "x11"
+ '(("RESET" 'list " " "reset")
+ ("TERMINAL NUMBER" 'number " ")
+ ("PERSIST" 'list " " "persist" "nopersist")
+ ("RAISE" 'list " " "raise" "noraise"))) ))
+
+(defvar gnuplot-gui-terminal-list nil)
+(setq gnuplot-gui-terminal-list
+ (append (list " ") (mapcar 'car gnuplot-gui-terminal-types)))
+
+(defvar gnuplot-gui-set-types nil
+ "Associated list of set option descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-set-types
+ (list (cons "angles"
+ '(("UNITS" 'list " " "degrees" "radians")))
+ (cons "arrow"
+ '(("TAG" 'tag " ")
+ ("FROM" 'position " " "from" 3)
+ ("TO" 'position " " "to" 3)
+ ("HEAD" 'list " " "head" "nohead")
+ ("LINESTYLE" 'number " " "ls")
+ ("LINETYPE " 'number " " "lt")
+ ("LINEWIDTH" 'number " " "lw")))
+ (cons "noarrow"
+ '(("TAG" 'tag " ")))
+ (cons "autoscale"
+ '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+ "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+ "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+ (cons "noautoscale"
+ '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+ "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+ "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+ (cons "bar"
+ '(("SIZE" 'list " " "small" "large")))
+ (cons "border"
+ '(("BORDER CODE" 'number " ")
+ ("LINE STYLE" 'list " " "lines"
+ "dots" "points" "linespoints")
+ ("LINESTYLE" 'number " " "ls")
+ ("LINETYPE" 'number " " "lt")
+ ("LINEWIDTH" 'number " " "lw")
+ ))
+ (cons "boxwidth"
+ '(("WIDTH" 'number " ")))
+ (cons "clabel"
+ '(("FORMAT" 'format " ")))
+ (cons "clip"
+ '(("CLIP TYPE" 'list " " "points" "one" "two")))
+ (cons "noclip"
+ '(("CLIP TYPE" 'list " " "points" "one" "two")))
+ ;;(cons "cntrparam"
+ ;; '(("INTERPOLATION" 'list " " "linear" "cubicspline" "bspline")
+ ;; ("POINTS" 'number " " "points")
+ ;; ("ORDER" 'number " " "order")))
+ (cons "contour"
+ '(("WHERE" 'list " " "base" "surface" "both")))
+ (cons "dgrid3d"
+ '(("ROW,COLUMN,NORM" 'position " " "" 3)))
+ (cons "encoding"
+ '(("ENCODING" 'list " " "default" "iso_8859_1"
+ "cp850" "cp437")))
+ (cons "format"
+ '(("AXIS" 'list " " "x" "y" "z" "xy" "x2" "y2")
+ ("FORMAT" 'format " ")))
+ (cons "dummy"
+ '(("VAR 1" 'string " " "")
+ ("VAR 2" 'string " " ",")))
+ (cons "grid"
+ '(("XTICS" 'list " " "xtics" "mxtics" "noxtics" "nomxtics")
+ ("YTICS" 'list " " "ytics" "mytics" "noytics" "nomytics")
+ ("ZTICS" 'list " " "ztics" "mztics" "noztics" "nomztics")
+ ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" "nomx2tics")
+ ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" "nomy2tics")
+ ("POLAR" 'number " " "polar")
+ ("MAJOR LINETYPE" 'number " ")
+ ("MINOR LINETYPE" 'number " ")))
+ (cons "hidden3d"
+ '(("ALGORITHM" 'list " " "defaults"
+ "offset"
+ "nooffset"
+ ;;"trianglepattern # bitpattern between 0 and 7"
+ "trianglepattern 0" "trianglepattern 1"
+ "trianglepattern 2" "trianglepattern 3"
+ "trianglepattern 4" "trianglepattern 5"
+ "trianglepattern 6" "trianglepattern 7"
+ ;;"undefined # level between 0 and 3"
+ "undefined 0" "undefined 1" "undefined 2" "undefined 3"
+ "noundefined" "altdiagonal" "noaltdiagonal"
+ "bentover" "nobentover")))
+ (cons "historysize"
+ '(("SIZE" 'number " ")))
+ (cons "isosamples"
+ '(("ISO_U LINES" 'number " ")
+ ("ISO_V LINES" 'number " " ",")))
+ (cons "key"
+ '(("LOCATION" 'list " " "left" "right" "top" "bottom"
+ "outside" "below")
+ ("POSITION" 'position " " "" 3)
+ ("JUSTIFICATION" 'list " " "Left" "Right")
+ ("REVERSE" 'list " " "reverse" "noreverse")
+ ("SAMPLE LENGTH" 'number " " "samplen")
+ ("SPACING" 'number " " "spacing")
+ ("WIDTH" 'number " " "width")
+ ("TITLE" 'string " " "title ")
+ ("BOX LINETYPE" 'number " " "box") ;; linetype data
+ ("NOBOX" 'list " " "nobox")))
+ (cons "label"
+ '(("TAG" 'tag " ")
+ ("LABEL TEXT" 'string " ")
+ ("POSITION" 'position " " "at" 3)
+ ;; first, second, graph, screen
+ ("JUSTIFICATION" 'list " " "left" "right" "center")
+ ("ROTATE" 'list " " "rotate" "norotate")
+ ("FONT" 'string " " "font"))) ;; font "name,size"
+ (cons "nolabel"
+ '(("TAG" 'tag " ")))
+ (cons "linestyle"
+ '(("TAG " 'tag " ")
+ ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
+ "boxxyerrorbars" "candlesticks" "dots"
+ "financebars" "fsteps" "histeps" "impulses"
+ "lines" "linespoints" "points" "steps" "vector"
+ "xerrorbars" "xyerrorbars" "yerrorbars")
+ ("LINETYPE " 'number " " "lt")
+ ("LINEWIDTH" 'number " " "lw")
+ ("POINTTYPE" 'number " " "pt")
+ ("POINTSIZE" 'number " " "ps")))
+ (cons "locale"
+ '(("LOCALE" 'string " ")))
+ (cons "logscale"
+ '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+ "x2" "y2")
+ ("BASE" 'number " ")))
+ (cons "nologscale"
+ '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+ "x2" "y2")))
+ (cons "mapping"
+ '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
+ "cylindrical")))
+ ; _margin
+ (cons "bmargin"
+ '(("BOTTOM MARGIN" 'number " ")))
+ (cons "lmargin"
+ '(("LEFT MARGIN" 'number " ")))
+ (cons "rmargin"
+ '(("RIGHT MARGIN" 'number " ")))
+ (cons "tmargin"
+ '(("TOP MARGIN" 'number " ")))
+
+ (cons "missing"
+ '(("CHARACTER" 'string " " 1)))
+ ; m_tics
+ (cons "mxtics" gnuplot-gui-mtics-list)
+ (cons "mytics" gnuplot-gui-mtics-list)
+ (cons "mztics" gnuplot-gui-mtics-list)
+ (cons "mx2tics" gnuplot-gui-mtics-list)
+ (cons "my2tics" gnuplot-gui-mtics-list)
+
+ ; pm3d additions <MT>
+ (cons "mouse"
+ '(("DOUBLECLICK" 'number " " "doubleclick")
+ ("ZOOM" 'list " " "zoomcoordinates" "nozoomcoordinates")
+ ("POLAR" 'list " " "polarcoordinates" "nopolarcoordinates")
+ ("FORMAT" 'string " " "format")
+ ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
+ ("MOUSEFORMAT" 'string " " "mouseformat")
+ ("LABELS" 'list " " "labels" "nolabels")
+ ("LABELOPTIONS" 'string " " "labeloptions")
+ ("ZOOMJUMP" 'list " " "zoomjump" "nozoomjump")
+ ("VERBOSE" 'list " " "verbose" "noverbose")))
+ (cons "palette"
+ '(("COLOR" 'list " " "gray" "color")
+ ("RGBFORMULAE" 'position " " "rgbformulae" 3)
+ ("PARITY" 'list " " "positive" "negative")
+ ("FORMULAE" 'list " " "nops_allcF" "ps_allcF")
+ ("MAXCOLORS" 'number " ")
+ ("COLOR_BOX" 'list " " "nocb" "cbdefault" "cbuser")
+ ("ORIENTATION" 'list " " "cbvertical" "cbhorizontal")
+ ("ORIGIN" 'position " " "origin" 2)
+ ("SIZE" 'position " " "size" 2)
+ ("BORDER" 'number " ")
+ ("NOBORDER" 'list " " "bdefault" "noborder")))
+ (cons "pm3d"
+ '(("AT" 'list* " " "b" "s" "t" "bs" "bt" "st" "bst")
+ ("SCANS" 'list " " "scansautomatic" "scansforward" "scansbackward")
+ ("FLUSH" 'list* " " "begin" "center" "end")
+ ("CLIP" 'list " " "clip1in" "clip4in")
+ ("ZRANGE" 'range (" " . " ") ":")
+ ("HIDDEN3D" 'number " ")
+ ("NOHIDDEN3D" 'list " " "nohidden3d")
+ ("FILLING" 'list " " "transparent" "solid")
+ ("MAP" 'list " " "map")))
+
+ (cons "offsets"
+ '(("LEFT " 'number " ")
+ ("RIGHT " 'number " " ",")
+ ("TOP " 'number " " ",")
+ ("BOTTOM" 'number " " ",")))
+ (cons "origin"
+ '(("X ORIGIN" 'number " ")
+ ("Y ORIGIN" 'number " " ",")))
+ (cons "output"
+ '(("FILENAME" 'file " ")))
+ (cons "pointsize"
+ '(("MULTIPLIER" 'number " ")))
+ (cons "samples"
+ '(("2D PLOT" 'number " ")
+ ("3D PLOT" 'number " " ",")))
+ (cons "size"
+ '(("ASPECT" 'list " " "square" "nosquare"
+ "ratio" "noratio")
+ ("X-SCALE OR RATIO" 'number " ")
+ ("Y-SCALE" 'number " " ",")))
+ (cons "style"
+ '(("DATA TYPE" 'list " " "data" "function")
+ ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
+ "boxxyerrorbars" "candlesticks" "dots"
+ "financebars" "fsteps" "histeps" "impulses"
+ "lines" "linespoints" "points" "steps" "vector"
+ "xerrorbars" "xyerrorbars" "yerrorbars")))
+ (cons "terminal"
+ '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
+ (cons "tics"
+ '(("DIRECTION" 'list " " "in" "out")))
+ (cons "ticslevel"
+ '(("RELATIVE HEIGHT" 'number " ")))
+ (cons "ticscale"
+ '(("MAJOR" 'number " ")
+ ("MINOR" 'number " ")))
+ (cons "timestamp"
+ '(("FORMAT STRING" 'format " ")
+ ("WHERE" 'list " " "top" "bottom")
+ ("ROTATE" 'list " " "rotate" "norotate")
+ ("X-OFFSET" 'number " ")
+ ("Y-OFFSET" 'number " " ",")
+ ("FONTNAME" 'list " " gnuplot-gui-fontname-list)))
+ (cons "timefmt"
+ '(("FORMAT STRING" 'string " ")))
+ (cons "title"
+ '(("TITLE" 'string " ")))
+ (cons "view"
+ '(("X-ROTATION" 'number " ")
+ ("Z-ROTATION" 'number " " ",")
+ ("SCALE" 'number " " ",")
+ ("Z-SCALE" 'number " " ",")))
+ ;; ("SCALE" 'position " " "," 4)
+ ; _data
+ (cons "xdata" gnuplot-gui-data-list)
+ (cons "ydata" gnuplot-gui-data-list)
+ (cons "zdata" gnuplot-gui-data-list)
+ (cons "x2data" gnuplot-gui-data-list)
+ (cons "y2data" gnuplot-gui-data-list)
+ ; _label
+ (cons "xlabel" gnuplot-gui-label-list)
+ (cons "ylabel" gnuplot-gui-label-list)
+ (cons "zlabel" gnuplot-gui-label-list)
+ (cons "x2label" gnuplot-gui-label-list)
+ (cons "y2label" gnuplot-gui-label-list)
+ ; _range, note that the [] syntax for
+ ; the writeback argument is
+ ; not properly supported
+ (cons "xrange" gnuplot-gui-range-list)
+ (cons "yrange" gnuplot-gui-range-list)
+ (cons "zrange" gnuplot-gui-range-list)
+ (cons "x2range" gnuplot-gui-range-list)
+ (cons "y2range" gnuplot-gui-range-list)
+ (cons "trange" gnuplot-gui-range-list)
+ (cons "rrange" gnuplot-gui-range-list)
+ (cons "urange" gnuplot-gui-range-list)
+ (cons "vrange" gnuplot-gui-range-list)
+ ; _tics
+ (cons "xtics" gnuplot-gui-tics-list)
+ (cons "ytics" gnuplot-gui-tics-list)
+ (cons "ztics" gnuplot-gui-tics-list)
+ (cons "x2tics" gnuplot-gui-tics-list)
+ (cons "y2tics" gnuplot-gui-tics-list)
+ ; zeroaxis
+ (cons "zeroaxis" gnuplot-gui-zeroaxis-list)
+ (cons "xzeroaxis" gnuplot-gui-zeroaxis-list)
+ (cons "yzeroaxis" gnuplot-gui-zeroaxis-list)
+ (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
+ (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
+
+ (cons "zero"
+ '(("THRESHOLD" 'number " ")))
+ ))
+
+(defvar gnuplot-gui-command-types nil
+ "Associated list of command descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-command-types
+ (list (cons "cd"
+ '(("FILENAME" 'file " ")))
+ (cons "call"
+ '(("INPUT FILE" 'file " ")
+ ("PARAMETER LIST" 'string " ")))
+ (cons "load"
+ '(("INPUT FILE" 'file " ")))
+ (cons "pause"
+ '(("TIME" 'number " ")
+ ("MESSAGE" 'string " ")))
+ (cons "print"
+ '(("EXPRESSION" 'string " ")))
+ (cons "save"
+ '(("SAVE" 'list " " "functions" "variables" "set")
+ ("FILE" 'file " ")))
+ (cons "update"
+ '(("INITIAL FILE" 'file " " t)
+ ("UPDATED FILE" 'file " " t))) ))
+
+
+(defcustom gnuplot-gui-plot-splot-fit-style 'simple
+ "Control the complexity of the GUI display for plot, splot, and fit.
+The values are 'simple, which causes a limited set of plot, splot, or
+fit options to be displayed, and 'complete, which attempts to display
+all options. The 'complete setting is prone to making errors when
+parsing values already in the script buffer."
+ :group 'gnuplot-gui
+ :type '(radio (const :tag "Simple listing" simple)
+ (const :tag "Complete listing" complete)))
+
+
+(defconst gnuplot-gui-plot-simple-list
+ '(("X RANGE" 'range (" " . " ") ":")
+ ("Y RANGE" 'range (" " . " ") ":")
+ ("DATA FILE" 'file " ")
+ ("THRU" 'string* " " "thru")
+ ("USING" 'modifier " ")
+ ("TITLE" 'string " ")
+ ("WITH" 'list* " " "boxerrorbars" "boxes"
+ "boxxyerrorbars" "candlesticks" "dots" "financebars"
+ "fsteps" "histeps" "impulses" "lines" "linespoints"
+ "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+ "yerrorbars")))
+(defconst gnuplot-gui-plot-full-list
+ '(;;("T RANGE" 'range (" " . " ") ":")
+ ("X RANGE" 'range (" " . " ") ":")
+ ("Y RANGE" 'range (" " . " ") ":")
+ ("xa" 'text "\t---------------------")
+ ("FUNCTION" 'string " ")
+ ("xc" 'text " or")
+ ("DATA FILE" 'file " ")
+ ("INDEX" 'modifier " ")
+ ("EVERY" 'modifier " ")
+ ("THRU" 'string* " " "thru")
+ ("USING" 'modifier " ")
+ ("SMOOTH" 'list* " " "unique" "csplines" "acsplines"
+ "bezier" "sbezier")
+ ;; datafile modifiers
+ ("AXES" 'list* " " "x1y1" "x2y2" "x1y2" "x2y1")
+ ("TITLE" 'string " ")
+ ("NOTITLE" 'list " " "notitle")
+ ("xf" 'text "\t---------------------")
+ ("xi" 'text "Select a standard plotting style")
+ ("WITH" 'list* " " "boxerrorbars" "boxes"
+ "boxxyerrorbars" "candlesticks" "dots" "financebars"
+ "fsteps" "histeps" "impulses" "lines" "linespoints"
+ "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+ "yerrorbars")
+ ("xo" 'text " or a previously defined style")
+ ("LINE STYLE " 'number " " "ls")
+ ("xr" 'text " or specify a style in-line")
+ ("LINE TYPE " 'number " " "lt")
+ ("LINE WIDTH " 'number " " "lw")
+ ("POINT TYPE " 'number " " "pt")
+ ("POINT STYLE" 'number " " "ps")
+ ))
+(defconst gnuplot-gui-splot-simple-list
+ '(("DATA FILE" 'file " ")
+ ("TITLE" 'string " ")
+ ("WITH" 'list* " " "lines" "linespoints" "points" "dots" "impulses")))
+(defconst gnuplot-gui-splot-full-list
+ '(;;("U RANGE" 'range (" " . " ") ":")
+ ;;("V RANGE" 'range (" " . " ") ":")
+ ("X RANGE" 'range (" " . " ") ":")
+ ("Y RANGE" 'range (" " . " ") ":")
+ ("Z RANGE" 'range (" " . " ") ":")
+ ("xa" 'text "\t---------------------")
+ ("FUNCTION" 'string " ")
+ ("xc" 'text " or")
+ ("DATA FILE" 'file " ")
+ ("INDEX" 'modifier " ")
+ ("EVERY" 'modifier " ")
+ ("THRU" 'string* " " "thru")
+ ("USING" 'modifier " ")
+ ("SMOOTH" 'list* " " "unique" "csplines" "acsplines"
+ "bezier" "sbezier")
+ ("TITLE" 'string " ")
+ ("NOTITLE" 'list " " "notitle")
+ ("WITH" 'list* " " "lines" "linespoints" "points" "dots" "impulses")))
+(defconst gnuplot-gui-fit-simple-list
+ '(("FUNCTION" 'string* " " "")
+ ("DATA FILE" 'file " ")
+ ("VIA (params)" 'string* " " "via") ))
+(defconst gnuplot-gui-fit-full-list
+ '(("X RANGE" 'range (" " . " ") ":")
+ ("Y RANGE" 'range (" " . " ") ":")
+ ("xa" 'text "----- fitting functionn and file --------")
+ ("FUNCTION" 'string* " " "")
+ ("DATA FILE" 'file " ")
+ ("xb" 'text "----- datafile modifiers ----------------")
+ ("INDEX" 'modifier " ")
+ ("EVERY" 'modifier " ")
+ ("THRU" 'string* " " "thru")
+ ("USING" 'modifier " ")
+ ("SMOOTH" 'list* " " "unique" "csplines" "acsplines"
+ "bezier" "sbezier")
+ ("xc" 'text "----- parameters (file or parameters) ---")
+ ("VIA (file)" 'string " " "via")
+ ("VIA (params)" 'string* " " "via") ))
+
+(defvar gnuplot-gui-plot-splot-fit nil
+ "Associated list of plot, splot, and fit descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-plot-splot-fit
+ (list (cons "plot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ gnuplot-gui-plot-full-list
+ gnuplot-gui-plot-simple-list))
+ (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ gnuplot-gui-splot-full-list
+ gnuplot-gui-splot-simple-list))
+ (cons "fit" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ gnuplot-gui-fit-full-list
+ gnuplot-gui-fit-simple-list))) )
+
+
+(defvar gnuplot-gui-test-type nil)
+(setq gnuplot-gui-test-type
+ (list (cons "test"
+ '(("TAG" 'tag " ")
+ ("LIST" 'list " " "1" "2" "3")
+ ("LIST*" 'list* " " "1" "2" "3")
+ ("NUMBER" 'number " " "number")
+ ("RANGE" 'range (" " . " ") ":")
+ ("PAIR" 'pair (" " . " ") "pair")
+ ("LABELS" 'labels ())
+ ("FILE" 'file " ")
+ ("TEXT" 'text "this is text")
+ ("STRING" 'string " ")
+ ("STRING*" 'string* " " "string*")
+ ("FORMAT" 'format " ")
+ ("POSITION" 'position " " "at" 3)
+ ("FONTSIZE" 'fontsize " ") ))))
+
+(defvar gnuplot-gui-all-types nil
+ "Associated list of terminal, set option, and command arguments.
+
+Each entry in the list is a cons cell of the form
+ (OPTION . ALIST)
+where OPTION is one of the recognized options in Gnuplot, either a
+command, something that is set, or a terminal type. Only those
+commands, set options, and terminal types that actually take arguments
+are in this associated list.
+
+ALIST is itself an associated list where each entry is of the form:
+
+ (TAG TYPE DEFAULT REST)
+
+TAG is the name used on the widget and indicates one of the options
+for this command, set option, or terminal type.
+
+TYPE is one of
+ 'list a menu-list of strings
+ 'list* a menu-list of strings with a prefix
+ 'number a number with an optional prefix
+ 'tag like number but must be the first argument
+ 'fontsize like number but must be the last argument
+ 'range a pair of numbers like [#,#] or [#:#]
+ 'pair a pair of numbers with no punctuation and a prefix
+ 'file a quoted string and a file browser
+ 'string a quoted string with an optional prefix
+ 'string* an unquoted string with a prefix
+ 'format a quoted string and an info-link to (gnuplot)format
+ 'labels an array as needed for xtics, ytics, etc
+ 'position 2 or 3 comma separated numbers with an optional prefix
+
+DEFAULT is the default value for this option. Note that the default
+for 'range and 'pair is a cons cell and the default for 'labels is a
+list. For most things, the best choice of DEFAULT is a string of
+white space or a cons cell of two strings of white space. Strings of
+white space are better defaults than empty strings or nil.
+
+The value of REST depends upon TYPE:
+
+ For 'list & REST is the list of options that will go into the
+ 'list* menu-button. This can also be a symbol which
+ evaluates to a list containing the options to go into
+ the menu-button. This list variable must contain the
+ DEFAULT.
+ For 'number REST is the prefix string (if it exists) for that number.
+ For 'range REST is the separator, \":\" for plot ranges and
+ \",\" for plot dimensions (see for example the tgif
+ terminal type)
+ For 'string & REST may a number denoting the width of the editable-text
+ 'string* field or it may be a string denoting a prefix. By
+ default, the width is half the width of the frame
+ and there is no prefix. It may be useful to
+ specify \"1\" when the input is a single character
+ as in 'set missing'.
+ For 'file REST determines the label placed before the file insertion
+ field. If non-nil, then TAG is used. If nil, then
+ the default \"File\" is used.
+ For 'position REST is the prefix and the number of comma separated numbers
+ For others REST is not used.
+
+Here is an example entry for the png terminal type:
+
+ (cons \"png\"
+ '((\"SIZE\" 'list \" \" \"small\" \"medium\" \"large\")
+ (\"COLOR\" 'list \" \" \"monochrome\" \"gray\" \"color\")))
+
+This alist is formed at load time by appending together
+`gnuplot-gui-terminal-types', `gnuplot-gui-set-types' and
+`gnuplot-gui-command-types'.")
+
+(setq gnuplot-gui-all-types (append gnuplot-gui-terminal-types
+ gnuplot-gui-set-types
+ gnuplot-gui-command-types
+ gnuplot-gui-plot-splot-fit
+ gnuplot-gui-test-type
+ ))
+
+
+(defun gnuplot-gui-swap-simple-complete ()
+ (interactive)
+ (setq gnuplot-gui-plot-splot-fit-style
+ (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ 'simple 'complete))
+ (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ (progn
+ (setcdr (assoc "plot" gnuplot-gui-all-types) gnuplot-gui-plot-full-list)
+ (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-full-list)
+ (setcdr (assoc "fit" gnuplot-gui-all-types) gnuplot-gui-fit-full-list))
+ (setcdr (assoc "plot" gnuplot-gui-all-types) gnuplot-gui-plot-simple-list)
+ (setcdr (assoc "splot" gnuplot-gui-all-types) gnuplot-gui-splot-simple-list)
+ (setcdr (assoc "fit" gnuplot-gui-all-types) gnuplot-gui-fit-simple-list))
+ (message "Using %s lists for plot, splot, and fit."
+ gnuplot-gui-plot-splot-fit-style) )
+
+
+
+\f
+;;; user interface to the widget-y stuff
+
+(defun gnuplot-gui-mouse-set (event)
+ "Use the mouse to begin setting options using a GUI interface.
+EVENT is a mouse event. Bound to \\[gnuplot-gui-mouse-set]
+Note that \"plot\", \"splot\", \"fit\", and \"cntrparam\" are not
+currently supported."
+ (interactive "@e")
+ (when (fboundp 'widget-create)
+ (save-excursion
+ (mouse-set-point event)
+ (gnuplot-gui-set-options-and-insert))))
+
+(defun gnuplot-gui-get-frame-param (param)
+ (if gnuplot-xemacs-p
+ (plist-get gnuplot-gui-frame-plist param)
+ (cdr (assoc param gnuplot-gui-frame-parameters))))
+(defun gnuplot-gui-set-frame-param (param value)
+ (if gnuplot-xemacs-p
+ (plist-put gnuplot-gui-frame-plist param value)
+ (setcdr (assoc param gnuplot-gui-frame-parameters) value)))
+
+(defun gnuplot-gui-set-options-and-insert ()
+ "Insert arguments using a GUI interface.
+Determine contents of current line and set up the appropriate GUI
+frame. Bound to \\[gnuplot-gui-set-options-and-insert]
+Note that \"cntrparam\" is not currently supported."
+ (interactive)
+ (when (fboundp 'widget-create)
+ (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+ (end (save-excursion (end-of-line) (point-marker)))
+ (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
+ (set nil) (term nil))
+ (save-excursion
+ ;; there can be more then one command per line
+ (if (search-backward ";" begin "to_limit")
+ (progn (forward-char 1) (setq begin (point-marker))))
+ (if (re-search-forward termin end "to_limit")
+ (progn (backward-char (length (match-string 1)))
+ (setq end (point-marker))))
+ (goto-char begin)
+ (skip-syntax-forward "-" end)
+ ;; various constructions are recognized here. at the end of this
+ ;; cond, point should be just after the word whose arguments are
+ ;; to be set
+ (cond ((looking-at "set\\s-+")
+ (setq set t)
+ (goto-char (match-end 0))
+ (if (looking-at "\\sw+") (goto-char (match-end 0)))
+ (when (string-match "^ter" (gnuplot-this-word)) ; terminal?
+ (setq term t)
+ (forward-word 1))
+ (when (string-match "^\\(da\\|fu\\)" (gnuplot-this-word))
+ (unless (looking-at "\\s-+st")
+ (insert " style") (forward-word 1))
+ (forward-word 1)))
+ ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
+ "\\w*"
+ "[\\s-\\']"))
+ (forward-word 1))
+ ;;(goto-char (match-end 0)))
+ (t
+ (forward-word 1)))
+ (if (> (point) end) (goto-char end))
+ (let* ((w (gnuplot-this-word))
+ (wd (try-completion w gnuplot-gui-all-types))
+ (word "") wrd list)
+ (cond ((equal wd t) (setq word w))
+ ((equal wd nil) (setq word w))
+ ((assoc wd gnuplot-gui-all-types) (setq word wd))
+ (t (setq wd nil)))
+ (cond ((equal (string-match "^\\s-*$" w) 0)
+ (message "Blank line"))
+ ((and wd (stringp word))
+ (gnuplot-gui-correct-command word set term begin)
+ (setq gnuplot-gui-alist nil
+ gnuplot-gui-current-string
+ (buffer-substring-no-properties (point) end))
+ (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+ (let* ((old-height (gnuplot-gui-get-frame-param 'height))
+ (old-top (gnuplot-gui-get-frame-param 'top)))
+ (when (or
+ (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ (member* word '("plot" "splot" "fit")
+ :test 'string=))
+ (equal word "test"))
+ (gnuplot-gui-set-frame-param 'height 32)
+ (gnuplot-gui-set-frame-param 'top 50))
+ (gnuplot-gui-prompt-for-frame word)
+ (when (or
+ (and (equal gnuplot-gui-plot-splot-fit-style 'complete)
+ (member* word '("plot" "splot" "fit")
+ :test 'string=))
+ (equal word "test"))
+ (gnuplot-gui-set-frame-param 'height old-height)
+ (gnuplot-gui-set-frame-param 'top old-top)) ))
+ ((setq wrd (car (all-completions w '(("cntrparam")))))
+ (message
+ "Setting arguments for %S is currently unsuported in gnuplot-mode"
+ wrd))
+ ((setq list (all-completions w gnuplot-gui-all-types))
+ (message "%S could be one of %S" w list))
+ (t
+ (message
+ "%S is not a gnuplot command which takes options" w)))) ))))
+
+(defun gnuplot-gui-toggle-popup ()
+ (interactive)
+ (setq gnuplot-gui-popup-flag (not gnuplot-gui-popup-flag))
+ (message (if gnuplot-gui-popup-flag
+ "Argument popup will appear after insertions."
+ "Argument popup will no longer appear after insertions.")))
+
+
+(defun gnuplot-gui-y-n (foo))
+(if gnuplot-xemacs-p
+ (defalias 'gnuplot-gui-y-n 'y-or-n-p-maybe-dialog-box)
+ (defalias 'gnuplot-gui-y-n 'y-or-n-p))
+
+(defun gnuplot-gui-correct-command (word set term begin)
+ "Check syntax of set command and terminal specifications.
+WORD is the item being set. SET and TERM are non-nil if the words
+\"set\" and \"terminal\" were found preceding WORD in the buffer.
+BEGIN is the beginning of the command."
+ (save-excursion
+ (cond ((assoc word gnuplot-gui-terminal-types)
+ (when (and (not (and set term))
+ (gnuplot-gui-y-n
+ (format
+ "%S must be preceded by \"set terminal\". Add it? "
+ word)))
+ (backward-word 1)
+ (let ((e (point-marker)))
+ (goto-char begin)
+ (skip-syntax-forward "-" e)
+ (delete-region (point) e)
+ (insert "set terminal "))))
+ ((assoc word gnuplot-gui-set-types)
+ (when (and (not set)
+ (gnuplot-gui-y-n
+ (format
+ "%S must be preceded by \"set\". Add \"set\"? " word)))
+ (backward-word 1)
+ (let ((e (point-marker)))
+ (goto-char begin)
+ (skip-syntax-forward "-" e)
+ (delete-region (point) e)
+ (insert "set "))))))
+ (message nil))
+
+
+\f
+;;; handle the actual arguments
+
+(defun gnuplot-gui-fix-arg-list (list)
+ "Correct the result of splitting `gnuplot-gui-current-string'.
+LIST is the split string. This removes empty and all-blank strings
+from the list and concatenates the strings that are part of a quoted
+argument, for example an axis label or a font name. It also replaces
+bounding single quotes with double quotes, since double quotes are
+used in `gnuplot-gui-all-types'."
+ (let (fixed-list quote quoted) ; remove blanks
+ (setq list (remove* "\\s-+" list :test 'string-match)
+ list (remove* "" list :test 'string=))
+ (while list ; concatinate parts of quoted string
+ (if (not (string-match "^\\([\]\[()'\"]\\)" (car list)))
+ (setq fixed-list (append fixed-list (list (car list))))
+ (setq quote (match-string 1 (car list))
+ quoted (car list))
+ (if (string= quote "[") (setq quote "]"))
+ (if (string= quote "(") (setq quote ")"))
+ (while (and list
+ (or (equal (length quoted) 1)
+ (not (string-match (concat (regexp-quote quote) "$")
+ quoted))))
+ (setq quoted (concat quoted " " (cadr list))
+ list (cdr list)))
+ (if (string= quote "'")
+ (setq quoted (concat "\"" (substring quoted 1))
+ quoted (concat (substring quoted 0 -1) "\"")))
+ (setq fixed-list (append fixed-list (list quoted))))
+ (setq list (cdr list)) )
+ fixed-list))
+
+(defun gnuplot-gui-set-alist (word string)
+ "Set defaults for arguments, using text from buffer if appropriate.
+WORD is the Gnuplot expression whose arguments are being set. STRING
+is text from the buffer containing the previous values for WORD's
+arguments."
+ (let ((alist (cdr (assoc word gnuplot-gui-all-types)))
+ (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
+ ;; arg-list contains the arguments taken from the buffer
+ (setq gnuplot-gui-alist nil)
+ (while alist
+ (let* ((list (car alist))
+ (tag (gnuplot-gui-type-tag list))
+ (symbol (eval (gnuplot-gui-type-symbol list)))
+ (default (gnuplot-gui-type-default list))
+ (prefix (gnuplot-gui-type-prefix list))
+ (values (gnuplot-gui-type-list list))
+ (this-cons (cond ((stringp default) (cons tag default))
+ ((consp default) ; set cons valued default w/care
+ (cons tag (cons (car default) (cdr default))))
+ (t (cons tag default))))
+ (temp-list arg-list) )
+ ;;(message "%S" temp-list) ; want to lop values off arg-list
+ ; as they are found
+ (if (symbolp (cadr values))
+ (setq values (symbol-value (cadr values))))
+ ;; check if an argument of this type is in arg-list
+ ;; set the current cons cell if it is
+ (while temp-list
+ (cond
+ ;; ---------------------------- list
+ ((member* symbol '(list list*) :test 'equal)
+ (let* ((case-fold-search nil)
+ (match-cons (member* (concat "^" (car temp-list))
+ values :test 'string-match)))
+ (if (and (car match-cons) ; " " may be first elem. of list
+ (not (string= " " (car match-cons))))
+ (setq this-cons (cons tag (car match-cons))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil)
+ (setq temp-list (cdr temp-list)))))
+ ;; ---------------------------- tag (first number in list)
+ ((equal symbol 'tag)
+ (if (string-match "^[-0-9.]+$" (car arg-list))
+ (setq this-cons (cons tag (car arg-list))
+ temp-list nil)
+ (setq temp-list (cdr temp-list))) )
+ ;; ---------------------------- fontsize (last number in list)
+ ((equal symbol 'fontsize)
+ (if (string-match "^[-0-9.]+$" (car (last arg-list)))
+ (setq this-cons (cons tag (car (last arg-list)))
+ temp-list nil)
+ (setq temp-list (cdr temp-list))) )
+ ;; ---------------------------- number with prefix
+ ((equal symbol 'number)
+ (cond ((and (string= prefix (car temp-list))
+ (string-match "^[-0-9.]+$" (cadr temp-list)))
+ (setq this-cons (cons tag (cadr temp-list))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ arg-list (remove* (cadr temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil))
+ ;; --------------------- number without prefix
+ ((and (not prefix)
+ (string-match "^[-0-9.]+$" (car temp-list)))
+ (setq this-cons (cons tag (car temp-list))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil))
+ (t
+ (setq temp-list (cdr temp-list)))))
+ ;; ---------------------------- pair with prefix
+ ((equal symbol 'pair)
+ (if (and (string= prefix (car temp-list))
+ (string-match "^[-0-9.]+$" (cadr temp-list)))
+ (let ((this-car (cadr temp-list))
+ (this-cdr (if (string-match "^[-0-9.]+$" (caddr temp-list))
+ (caddr temp-list) "")))
+ (setq this-cons (cons tag (cons this-car this-cdr))
+ temp-list nil))
+ (setq temp-list (cdr temp-list))))
+ ;; ---------------------------- range
+ ((equal symbol 'range)
+ (if (string-match (concat "\\[\\s-*" ; opening bracket
+ "\\([^:, \t]*\\)" ; first argument
+ "\\s-*[:,]\\s-*" ; separator
+ "\\([^\] \t]*\\)" ; second argument
+ "\\s-*\\]") ; closing bracket
+ (car temp-list))
+ (setq this-cons
+ (cons tag (cons (match-string 1 (car temp-list))
+ (match-string 2 (car temp-list))))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil)
+ (setq temp-list (cdr temp-list)) ))
+ ;; ---------------------------- labels
+ ((equal symbol 'labels)
+ (if (string-match (concat "(" ; opening paren
+ "\\([^\)]*\\)" ; string
+ ")") ; closing paren
+ (car temp-list))
+ (let* ((list (split-string (car temp-list) "[ \t(),]+"))
+ (list (remove* "" list :test 'string=))
+ (return ()))
+ (while list
+ (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
+ (setq return (append return
+ (list (match-string 1 (car list))))
+ list (cdr list)
+ return (append return (list (car list))) )
+ (setq return (append return (list "" (car list)))))
+ (setq list (cdr list)) )
+ (setq this-cons (cons tag return)
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil))
+ (setq temp-list (cdr temp-list))) )
+ ;; ---------------------------- string, file, format
+ ((member* symbol '(string file format) :test 'equal)
+ (if (string-match (concat "['\"]" ; opening quote
+ "\\([^'\"]*\\)" ; string
+ "['\"]") ; closing quote
+ (car temp-list))
+ (setq this-cons (cons tag (match-string 0 (car temp-list)))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil)
+ (setq temp-list (cdr temp-list)) ))
+ ;; ---------------------------- string*
+ ((equal symbol 'string*)
+ (if (string= prefix (car temp-list))
+ (setq this-cons (cons tag (cadr temp-list))
+ arg-list (remove* (car temp-list) arg-list
+ :test 'string= :count 1)
+ arg-list (remove* (cadr temp-list) arg-list
+ :test 'string= :count 1)
+ temp-list nil)
+ (setq temp-list (cdr temp-list)) ) )
+ ;; ---------------------------- other or unknown
+ (t
+ (setq temp-list nil))
+ ))
+ (setq gnuplot-gui-alist
+ (append gnuplot-gui-alist (list this-cons))))
+ (setq alist (cdr alist))) ))
+
+
+(defun gnuplot-gui-post-process-alist (type)
+ "A few types need some additional processing.
+'range, 'pair, and 'labels are cons or list valued and need to b made
+into strings. This is called right before inserting the arguments
+into the buffer. TYPE is the object whose arguments are being set."
+ (let ((alist gnuplot-gui-alist)
+ (types (cdr (assoc type gnuplot-gui-all-types))) )
+ (while alist ;; loop thru alist looking for tyeps needing post-processing
+ (let* ((list (assoc (caar alist) types))
+ (value (cdr (assoc (caar alist) gnuplot-gui-alist)))
+ (prefix (gnuplot-gui-type-prefix list))
+ (symb (gnuplot-gui-type-symbol list)) )
+ (cond
+ ;;-------------------------- flat text
+ ((equal (eval symb) 'text)
+ (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
+ ;;-------------------------- range [#:#] or [#,#]
+ ((equal (eval symb) 'range)
+ (if (and (string-match "^\\s-*$" (car value))
+ (string-match "^\\s-*$" (cdr value)))
+ (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+ (setcdr (assoc (caar alist) gnuplot-gui-alist)
+ (concat "[" (car value) prefix (cdr value) "]")) ) )
+ ;;-------------------------- pair
+ ((equal (eval symb) 'pair)
+ (if (and (string-match "^\\s-*$" (car value))
+ (string-match "^\\s-*$" (cdr value)))
+ (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+ (setcdr (assoc (caar alist) gnuplot-gui-alist)
+ (concat prefix " " (car value) " " (cdr value) )) ) )
+ ;;-------------------------- labels
+ ((equal (eval symb) 'labels)
+ (if (consp value)
+ (let ((word "") (list value))
+ (while list
+ (if (string-match "^\\s-*$" (car list))
+ (setq word (concat word (format "%s, " (cadr list))))
+ (setq word (concat word (format "%S %s, " (car list)
+ (cadr list)))))
+ (setq list (cddr list)) )
+ (setq value (concat "(" (substring word 0 -2) ")")))
+ (setq value "") )
+ (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
+
+ (setq alist (cdr alist))) )))
+
+\f
+;;; GUI frames
+
+(defun gnuplot-gui-prompt-for-frame (&optional option save-frame)
+ (setq option (or option (completing-read "Option: " gnuplot-gui-all-types
+ nil t nil t)))
+ (gnuplot-gui-make-frame
+ option (cdr (assoc option gnuplot-gui-all-types)) save-frame) )
+
+
+(defface gnuplot-gui-error-face '((((class color) (background light))
+ (:foreground "grey30"))
+ (((class color) (background dark))
+ (:foreground "grey70")))
+ "Face used to display message about unknown widget types."
+ :group 'gnuplot-faces)
+
+(defface gnuplot-gui-flat-text-face '((((class color) (background light))
+ (:foreground "MediumBlue"))
+ (((class color) (background dark))
+ (:foreground "LightSteelBlue")))
+ "Face used to display message about unknown widget types."
+ :group 'gnuplot-faces)
+
+(defun gnuplot-gui-make-frame (item alist &optional save-frame)
+ "Open the frame and populate it with widgets.
+ITEM is the object for which arguments are being set. ALIST is
+the alist of arguments for ITEM taken from `gnuplot-gui-all-types'.
+SAVE-FRAME is non-nil when the widgets are being reset."
+ (unless save-frame
+ (setq gnuplot-current-frame (selected-frame)
+ gnuplot-current-buffer (current-buffer)
+ gnuplot-current-buffer-point (point-marker))
+ (unless (and gnuplot-gui-frame (frame-live-p gnuplot-gui-frame))
+ (setq gnuplot-gui-frame (if gnuplot-xemacs-p
+ (make-frame gnuplot-gui-frame-plist)
+ (make-frame gnuplot-gui-frame-parameters))))
+ (select-frame gnuplot-gui-frame)
+ ;;(set-frame-position gnuplot-gui-frame 150 150) ;; so herky-jerky
+ (if gnuplot-xemacs-p
+ (set-mouse-position (selected-window) 0 0)
+ (set-mouse-position gnuplot-gui-frame 0 0)))
+ (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+ (switch-to-buffer (get-buffer-create "*Gnuplot GUI*"))
+ (kill-all-local-variables)
+ (if gnuplot-xemacs-p
+ (progn
+ (set (make-local-variable 'frame-title-format)
+ "Set Gnuplot Options")
+ (set (make-local-variable 'frame-icon-title-format)
+ "Set Gnuplot Options"))
+ (modify-frame-parameters (selected-frame)
+ '((title . "Set Gnuplot Options"))) )
+ (widget-insert "\nSet options for \"" item "\" ")
+ (let (tag help val)
+ (cond ((string-match "^[xyz]2?tics" item)
+ (setq tag "info on tic labels"
+ help "Open a frame displaying the info entry for tic labels"
+ val "xtics"))
+ ((string-match "^no" item)
+ (setq tag (concat "info on " (substring item 2))
+ help (format "Open a frame displaying the info entry for %S"
+ item)
+ val item))
+ (t
+ (setq tag (concat "info on " item)
+ help (format "Open a frame displaying the info entry for %S"
+ item)
+ val item)))
+ (widget-create 'gnuplot-gui-info-link :tag tag :help-echo help :value val))
+
+ (widget-insert "\n\n")
+ (while alist
+ (let* ((this (car alist))
+ (tag (gnuplot-gui-type-tag this))
+ (wtype (gnuplot-gui-type-symbol this))
+ (prefix (gnuplot-gui-type-prefix this))
+ (default (cdr (assoc tag gnuplot-gui-alist)))
+ (list (gnuplot-gui-type-list this)))
+ (if (symbolp (cadr list))
+ (setq list (symbol-value (cadr list))))
+ (widget-insert "\t") ; insert the appropriate widget
+ (cond
+ ;;------------------------------ list, list* ------------
+ ((member* (eval wtype) '(list list*) :test 'equal)
+ (let ((starred (if (equal (eval wtype) 'list*) t nil)))
+ (gnuplot-gui-menu-choice tag default list starred)))
+ ;;------------------------------ number, tag, fontsize --
+ ((member* (eval wtype) '(number tag fontsize) :test 'equal)
+ (gnuplot-gui-number tag default prefix))
+ ;;------------------------------ position ---------------
+ ;;------------------------------ range, pair ------------
+ ((member* (eval wtype) '(range pair) :test 'equal)
+ (let ((is-range (equal (eval wtype) 'range)))
+ (gnuplot-gui-range tag default prefix is-range)))
+ ;;------------------------------ string, string* --------
+ ((member* (eval wtype) '(string string*) :test 'equal)
+ (let ((starred (if (equal (eval wtype) 'string) nil t)))
+ (gnuplot-gui-string tag default prefix starred)))
+ ;;------------------------------ format -----------------
+ ((equal (eval wtype) 'format)
+ (gnuplot-gui-format tag default))
+ ;;------------------------------ file -------------------
+ ((equal (eval wtype) 'file)
+ (gnuplot-gui-file tag default prefix))
+ ;;------------------------------ labels -----------------
+ ((equal (eval wtype) 'labels)
+ (gnuplot-gui-labels tag default))
+ ;;------------------------------ text -------------------
+ ((equal (eval wtype) 'text)
+ (let ((str (gnuplot-gui-type-default this)))
+ (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face str)
+ (widget-insert str "\n")))
+ ;;------------------------------ unknown ----------------
+ (t
+ (let ((str (concat "<" (downcase tag) "> ('"
+ (symbol-name (eval wtype))
+ " arguments are not yet supported)\n")))
+ (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
+ (widget-insert str)) )))
+ (setq alist (cdr alist)))
+ ;; insert control buttons: [Set options] [Reset] [Clear] [Cancel]
+ (widget-insert "\n\t")
+ (widget-create 'push-button
+ :value "Set options"
+ :doc item
+ :button-face 'gnuplot-gui-button-face
+ :help-echo "Push this button to set options"
+ :notify
+ (lambda (widget &rest ignore)
+ (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+ (delete-frame)
+ (select-frame gnuplot-current-frame)
+ (switch-to-buffer gnuplot-current-buffer)
+ (goto-char gnuplot-current-buffer-point)
+ (gnuplot-gui-post-process-alist
+ (widget-get widget :doc))
+ (let ((alist gnuplot-gui-alist) marker
+ (eol (save-excursion (end-of-line) (point-marker) )) )
+ (if (re-search-forward ";" eol "to_limit")
+ (backward-char 1))
+ (delete-region gnuplot-current-buffer-point (point-marker))
+ (delete-horizontal-space)
+ (setq marker (point-marker))
+ (while alist
+ (let ((val (cdar alist)))
+ (if (string-match "^\\s-+$" val) ()
+ (if (string-match "^['\"]\\(.*\\)['\"]$" val)
+ (setq val (concat gnuplot-quote-character
+ (match-string 1 val)
+ gnuplot-quote-character)))
+ (insert (format " %s" val))))
+ (setq alist (cdr alist)))
+ (setq eol (point-marker))
+ (goto-char marker)
+ (while (< (point) eol) ; a few odd cases
+ (unless (looking-at (concat "[" (regexp-quote "(")
+ (regexp-quote "*") ",]"))
+ (just-one-space))
+ (forward-sexp)))
+ (delete-horizontal-space)
+ (if (string= "terminal" (widget-get widget :doc))
+ (gnuplot-gui-set-options-and-insert)) ))
+ (widget-insert " ")
+ (widget-create 'push-button :value "Reset"
+ :help-echo "Push this button to reset all values"
+ :button-face 'gnuplot-gui-button-face
+ :doc item
+ :notify
+ (lambda (widget &rest ignore)
+ (let ((word (widget-get widget :doc)))
+ (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+ (gnuplot-gui-prompt-for-frame word t))))
+ (widget-insert " ")
+ (widget-create 'push-button :value "Clear"
+ :help-echo "Push this button to clear all values"
+ :button-face 'gnuplot-gui-button-face
+ :doc item
+ :notify
+ (lambda (widget &rest ignore)
+ (let* ((word (widget-get widget :doc))
+ (alist (cdr (assoc word gnuplot-gui-all-types))))
+ (while alist
+ (setcdr (assoc (gnuplot-gui-type-tag (car alist))
+ gnuplot-gui-alist)
+ (gnuplot-gui-type-default (car alist)))
+ (setq alist (cdr alist)))
+ (gnuplot-gui-prompt-for-frame word t))) )
+ (widget-insert " ")
+ (widget-create 'push-button :value "Cancel"
+ :help-echo "Quit setting options and dismiss frame"
+ :button-face 'gnuplot-gui-button-face
+ :notify (lambda (widget &rest ignore)
+ (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+ (setq gnuplot-gui-alist nil
+ gnuplot-gui-current-string nil)
+ (delete-frame)
+ (select-frame gnuplot-current-frame)))
+ (goto-char (point-min))
+ (use-local-map widget-keymap)
+ (widget-setup))
+
+\f
+;;; widgets
+
+(defface gnuplot-gui-menu-face '((((class color) (background light))
+ (:bold t :foreground "darkolivegreen"))
+ (((class color) (background dark))
+ (:bold t :foreground "seagreen"))
+ (t
+ (:italic t)))
+ "Face used for menu-buttons."
+ :group 'gnuplot-faces)
+(defface gnuplot-gui-button-face '((((class color) (background light))
+ (:bold t :foreground "sienna"))
+ (((class color) (background dark))
+ (:bold t :foreground "tan"))
+ (t
+ (:italic t)))
+ "Face used for push-buttons.
+Only used in Emacs. XEmacs displays push-buttons with a pixmap."
+ :group 'gnuplot-faces)
+(defface gnuplot-gui-labels-face '((((class color) (background light))
+ (:bold t :foreground "darkslateblue"))
+ (((class color) (background dark))
+ (:bold t :foreground "lightslateblue"))
+ (t
+ (:italic t)))
+ "Face used for insert and delete button in the labels widget."
+ :group 'gnuplot-faces)
+
+(defun gnuplot-gui-menu-choice (item default list &optional starred)
+ "Create a menu widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default argument value, LIST contains the items for the pop-up
+menu. STARRED is true if this a 'list* widget."
+ (let ((widget
+ (apply 'widget-create
+ 'menu-choice :value default :tag item :doc starred
+ :button-face 'gnuplot-gui-menu-face
+ :button-prefix "[" :button-suffix "]"
+ :help-echo (format "Mouse-2 to view the %S menu" (downcase item))
+ :notify
+ (lambda (widget &rest ignore)
+ (let ((lab (if (widget-get widget :doc)
+ (concat (downcase (widget-get widget :tag)) " ")
+ "" )))
+ (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+ (if (string= (widget-value widget) " ") ""
+ (format "%s%s" lab (widget-value widget))) )))
+ (mapcar (lambda (x) (list 'item :value x))
+ list))))
+ (widget-value-set widget default)
+ (if (and starred (not (string-match "^\\s-*$" default)))
+ (setcdr (assoc item gnuplot-gui-alist)
+ (format "%s %s" (downcase item) default)))
+ widget))
+
+(defun gnuplot-gui-number (item default &optional prefix)
+ "Create a number widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default value for the widget, PREFIX is a text string preceding
+the numerical argument."
+ (let ((help-label (or prefix (downcase item))))
+ (widget-insert (capitalize item) ": ")
+ (widget-create 'editable-field
+ :size 2 :tag item :value default :doc prefix
+ :help-echo (format "Insert new value of %S here" help-label)
+ :notify (lambda (widget &rest ignore)
+ (let ((val (widget-value widget))
+ (pre (concat (widget-get widget :doc) " ")))
+ (setcdr (assoc (widget-get widget :tag)
+ gnuplot-gui-alist)
+ (if (string-match
+ "^\\s-*[-0-9.*]+\\s-*$" val)
+ (format "%s%s" pre val) "") )))))
+ (unless (string-match "^\\s-*$" default)
+ (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" prefix default)))
+ (widget-insert " " (make-string (- 40 (current-column)) ?.)
+ " (numeric value)\n"))
+
+(defun gnuplot-gui-string (item default &optional width_or_prefix starred)
+ "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string. STARRED is t if quotes are not to be used."
+ (let ((help-label (downcase item)) width (prefix "") (pp ""))
+ (cond ((stringp width_or_prefix)
+ (setq prefix width_or_prefix
+ pp prefix)
+ (if starred (setq prefix (concat prefix "_star"))) )
+ ((numberp width_or_prefix)
+ (setq width width_or_prefix)))
+ (setq width (or width (/ (frame-width) 2)))
+ (if (string-match "^['\"]" default)
+ (setq default (replace-match "" nil nil default)))
+ (if (string-match "['\"]$" default)
+ (setq default (replace-match "" nil nil default)))
+ (widget-insert (capitalize item) ": ")
+ (widget-create
+ 'editable-field
+ :size width :tag item :doc prefix :value default
+ :help-echo (format "Insert new value of %S here" help-label)
+ :notify (lambda (widget &rest ignore)
+ (let ((val (widget-value widget))
+ (q gnuplot-quote-character)
+ (p (widget-get widget :doc)) )
+ (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+ (if (string-match "^\\s-*$" val)
+ ""
+ (progn
+ (if (string-match "_star$" p)
+ (setq p (concat (substring p 0 -5) " ")
+ q ""))
+ (if (string-match "^\\s-+" val)
+ (setq val (replace-match "" nil nil val)))
+ (if (string-match "\\s-+$" val)
+ (setq val (replace-match "" nil nil val)))
+ (format "%s%s%s%s" p q val q)))))))
+ (unless (string-match "^\\s-*$" default)
+ (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" pp default)))
+ (widget-insert "\n")))
+
+(defun gnuplot-gui-format (item default)
+ "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string."
+ (if (string-match "^['\"]" default)
+ (setq default (replace-match "" nil nil default)))
+ (if (string-match "['\"]$" default)
+ (setq default (replace-match "" nil nil default)))
+ (widget-insert (capitalize item) ": ")
+ (widget-create 'editable-field
+ :size (/ (frame-width) 3) :tag item :value default
+ :help-echo (format "Insert new format string here")
+ :notify (lambda (widget &rest ignore)
+ (let ((val (widget-value widget)))
+ (setcdr (assoc (widget-get widget :tag)
+ gnuplot-gui-alist)
+ (format "%s%s%s"
+ gnuplot-quote-character
+ val
+ gnuplot-quote-character)))))
+ (widget-insert " ")
+ (widget-create 'gnuplot-gui-info-link
+ :tag (concat "info on format")
+ :help-echo "Open a frame displaying the info entry for format"
+ :value "format")
+ (widget-insert "\n"))
+
+
+;; swiped from widget-color-complete
+(defun gnuplot-gui-file-completion (widget)
+ "Complete the filename in WIDGET."
+ (let* ((str (buffer-substring-no-properties (widget-field-start widget)
+ (point)))
+ (file (or (file-name-nondirectory str) ""))
+ (dir (or (file-name-directory str) "./"))
+ (val (file-name-completion file dir)) )
+ (cond ((eq val t)
+ (message "Exact match"))
+ ((null val)
+ (error "Can't find completion for \"%s\"" str))
+ ((not (string-equal str val))
+ (insert (substring val (length file))))
+ (t
+ (message "Making completion list...")
+ (let ((list (file-name-all-completions file dir)))
+ (with-output-to-temp-buffer "*Completions*"
+ (display-completion-list list)))
+ (message "Making completion list...done")))))
+
+(defun gnuplot-gui-file (item default &optional tag)
+ "Create a file widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument. TAG is non-nil if ITEM rather than
+\"File:\" is to be used as the tag."
+ (setq tag (if tag (capitalize item) "File"))
+ (if (string-match "^['\"]" default)
+ (setq default (replace-match "" nil nil default)))
+ (if (string-match "['\"]$" default)
+ (setq default (replace-match "" nil nil default)))
+ (let ((widg (widget-create
+ 'file
+ :value default :tag tag
+ :size (- (/ (frame-width) 2) 3)
+ :doc item :help-echo "Insert a filename here"
+ :complete 'gnuplot-gui-file-completion
+ :notify
+ (lambda (widget &rest ignore)
+ (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+ (format "%s%s%s" gnuplot-quote-character
+ (widget-value widget)
+ gnuplot-quote-character)) )) ))
+ (widget-insert " ")
+ (widget-create
+ 'push-button :value "Browse"
+ :doc item :help-echo "Browse directories for a filename."
+ :parent widg
+ :notify (lambda (widget &rest ignore)
+ (let ((fname (file-relative-name (read-file-name "File: ")
+ default-directory))
+ (q gnuplot-quote-character))
+ (widget-value-set (widget-get widget :parent) fname)
+ (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+ (format "%s%s%s" q fname q))
+ (widget-setup))))
+ (widget-insert "\n")))
+
+(defun gnuplot-gui-labels (item default)
+ "Create a labels widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument."
+ (widget-create
+ '(editable-list
+ (list :inline t :tag "Tic label"
+ (string :tag "label" :size 10
+ :help-echo "Enter the tic label here" )
+ (string :tag " position" :size 10
+ :help-echo "Enter an expression for the tic location here" )))
+ :tag (capitalize item)
+ :value default
+ :format "%{%t%}:\n%v\t %i\n"
+ :entry-format "\t %i %d %v\n"
+ :button-face 'gnuplot-gui-labels-face
+ :notify (lambda (widget &rest ignore)
+ (setcdr (assoc (upcase (widget-get widget :tag))
+ gnuplot-gui-alist)
+ (widget-value widget)))))
+
+(defun gnuplot-gui-range (item default separator is-range)
+ "Create a range or pair widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, SEPARATOR is a text string preceding
+the numerical argument, or the prefix for a pair operator. IS-RANGE
+is non-nil if this is a 'range widget."
+ (widget-insert (capitalize item) ": ")
+ (if is-range (widget-insert "["))
+ (widget-create 'editable-field
+ :size 4 :tag item :value (car default)
+ :help-echo (format "Insert the first value of the %S here"
+ (downcase item))
+ :notify (lambda (widget &rest ignore)
+ (setcar (cdr (assoc (widget-get widget :tag)
+ gnuplot-gui-alist))
+ (format "%s" (widget-value widget)))))
+ (if is-range (widget-insert separator) (widget-insert " "))
+ (widget-create 'editable-field
+ :size 4 :tag item :value (cdr default)
+ :help-echo (format "Insert the second value of the %S here"
+ (downcase item))
+ :notify (lambda (widget &rest ignore)
+ (setcdr (cdr (assoc (widget-get widget :tag)
+ gnuplot-gui-alist))
+ (format "%s" (widget-value widget)))))
+ (if is-range (widget-insert "]"))
+ (widget-insert " " (make-string (- 39 (current-column)) ?.)
+ " (numeric values)\n"))
+
+
+;; suppress compiler warning
+;;(eval-when-compile (defun gnuplot-info-lookup-symbol (sym mode)))
+(define-widget 'gnuplot-gui-info-link 'info-link
+ "A link to an info file for the Gnuplot GUI."
+ :action '(lambda (widget &optional event)
+ (let ((gnuplot-info-display 'frame))
+ (if gnuplot-keywords-pending ; <HW>
+ (gnuplot-setup-info-look))
+ (gnuplot-info-lookup-symbol (widget-value widget)
+ 'gnuplot-mode))))
+
+\f
+;;; just about done
+
+(provide 'gnuplot-gui)
+;;;============================================================================
+;;;
+;;; gnuplot-gui.el ends here
--- /dev/null
+;;;; gnuplot.el -- drive gnuplot from within emacs
+
+;; Copyright (C) 1998 Phil Type and Bruce Ravel, 1999-2002 Bruce Ravel
+
+;; Author: Bruce Ravel <ravel@phys.washington.edu> and Phil Type
+;; Maintainer: Bruce Ravel <ravel@phys.washington.edu>
+;; Created: June 28 1998
+;; Updated: December 13, 2002
+;; Version: 0.6.0
+;; Keywords: gnuplot, plotting
+
+;; This file is not part of GNU Emacs.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This lisp script is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;; Permission is granted to distribute copies of this lisp script
+;; provided the copyright notice and this permission are preserved in
+;; all copies.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; send bug reports to the author (ravel@phys.washington.edu)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Commentary:
+;;
+;; This is a major mode for composing gnuplot scripts and displaying
+;; their results using gnuplot. It is optimized for use with gnuplot
+;; 3.7 or one of the later patchlevels of "version 3.6". It should
+;; also work very handily with version 3.5. This mode offers several
+;; tools to help you compose your scripts, including syntax
+;; colorization using either font-lock or hilit19, a syntax table
+;; appropriate to gnuplot, key bindings, pull-down menus, indentation,
+;; keyword completions and variable customization using the Custom
+;; package. Once the script is composed, there are several function
+;; for sending some or all of the script to gnuplot. The interaction
+;; with the gnuplot process is within a comint buffer.
+;;
+;; C-c C-l send current line to gnuplot
+;; C-c C-v send current line to gnuplot and move forward 1 line
+;; C-c C-r send current region to gnuplot
+;; C-c C-b send entire buffer to gnuplot
+;; C-c C-f send a file to gnuplot
+;; C-c C-i insert filename at point
+;; C-c C-n negate set option on current line
+;; C-c C-c comment region
+;; C-c C-o set arguments for command at point
+;; S-mouse-2 set arguments for command under mouse cursor
+;; C-c C-h read the gnuplot info file
+;; C-c C-e show-gnuplot-buffer
+;; C-c C-k kill gnuplot process
+;; C-c C-u submit a bug report about gnuplot-mode
+;; M-tab or M-ret complete keyword before point
+;; ret newline and indent
+;; tab indent current line
+;;
+;; Gnuplot-mode adds two key bindings to the comint buffer:
+;; M-C-p plot the current script buffer line-by-line
+;; M-C-f save the current script buffer and load that file
+;;
+;; These two functions are useful for starting up gnuplot-mode.
+;;
+;; M-x gnuplot-mode
+;; start gnuplot-mode in the current buffer
+;;
+;; M-x gnuplot-make-buffer
+;; open a new buffer (which is not visiting a file) and start
+;; gnuplot-mode in that buffer
+;;
+;; ---------------------------------------------------------------------
+;;
+;; Other lisp files used by gnuplot.el
+;;
+;; info-look.el (comes with GNU Emacs 20):
+;; This provides the interface to the gnuplot-info file and provides
+;; on-line help and keyword completion functionality. The version
+;; of info-look.el that comes with version 20.2 of Emacs contains a
+;; bug that will impede its interaction with the gnuplot info file.
+;; You should use the version from the gnuplot-mode homepage
+;; instead. info-look is not distributed with XEmacs and so should
+;; be installed along with gnuplot-mode when using XEmacs.
+;;
+;; gnuplot-gui.el (written by Bruce):
+;; Defines the GUI interface for setting setting arguments to
+;; gnuplot options. This uses the widget package extensively.
+;;
+;; ---------------------------------------------------------------------
+;;
+;; This mode was inspired by the original gnu-plot-mode by Gershon
+;; Elber, which is distributed with gnuplot itself and which dates
+;; back to the early 90's. Although this mode encompasses the
+;; functionality of the original, the two share no code and the
+;; current implementation takes advantage of many features of modern
+;; versions of emacs and adheres (or so I intend) to the major mode
+;; conventions described in the emacs-lisp reference for version 19
+;; and later.
+;;
+;; ---------------------------------------------------------------------
+;;
+;; Installation
+;; ============
+;;
+;; A recent version of this file can be found at
+;; http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/
+;;
+;; To autoload gnuplot-mode on any file with gp extension, put this in
+;; your .emacs file
+;; (autoload 'gnuplot-mode "gnuplot" "gnuplot major mode" t)
+;; (autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot-mode" t)
+;;
+;; Something like
+;; (setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode))
+;; auto-mode-alist))
+;; is useful for having files ending in .gp start up in gnuplot-mode.
+;;
+;; Something like
+;; (global-set-key [(f9)] 'gnuplot-make-buffer)
+;; may be useful. This binds f9 to the function that opens a scratch
+;; buffer (i.e. one that is not visiting a file) in gnuplot-mode.
+;; This is handy for your quick 'n' dirty plotting chores.
+;;
+;; To use the `gnuplot-info-lookup-symbol' function, the file
+;; gnuplot.info MUST be installed somewhere that info can find it.
+;; This means you must either:
+;; 1. Copy gnuplot.info to the normal info directory or
+;; 2. Make sure info can find gnuplot.info by putting this in your
+;; .emacs file:
+;; (setenv "INFOPATH"
+;; (concat (getenv "INFOPATH") ":"
+;; (expand-file-name "/path/to/file")))
+;; where "/path/to/file" is the location of gnuplot.info
+;;
+;; This had been tested extensively with Emacs 19.34 and 20.2 and
+;; XEmacs 20.3 and in a limited manner with Emacs 19.30 and XEmacs
+;; 19.14.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; History:
+;;
+;; 0.1 Jun 25 1998 Finished with initial release.
+;; 0.2 Sep 4 1998 Added filename insertion, indentation, and
+;; colorization/completion in comint buffer. <BR>
+;; 0.2a Sep 11 1998 made `indent-line-function' buffer-local (whoops!)
+;; and fixed some stuff in the installation script <BR>
+;; 0.3 Sep 12 1998 include insertions menu <BR>
+;; 0.3a Sep 14 1998 fixed bug finding info file if missing, fixed bug
+;; starting font-lock, fixed bug re overwriting files in
+;; installation script <BR>
+;; 0.3b Sep 15 1998 Added (require 'info) to `(eval-and-compile'
+;; clause, Added (kill-all-local-variables) to `gnuplot-mode',
+;; altered order of:-
+;; (provide 'gnuplot)
+;; (run-hooks 'gnuplot-load-hook)
+;; at the end of the file in case something in the load hook
+;; requires gnuplot (oh not that old one again...), added
+;; `gnuplot-comint-setup-hook', corrected `gnuplot-mark-active'
+;; which caused an error to be raised by (mark) when the mark
+;; was inactive <DB> Some changes to font-lock rules <LB>&<BR>
+;; 0.4 Nov 14 1998 <BR> Use info-look for info interface. No
+;; change to gnuplot-mode user interface, but cleaner code.
+;; With info-look, the help funcion works regardless of the
+;; version number of gnuplot. Also, `gnuplot-keywords' (used
+;; for help, keyword-completion, and hilit19 highlighting) is
+;; now generated automatically.
+;; 0.4a Nov 18 1998 <BR> info-look leaves a couple of really useless
+;; buffers lying around so I cleaned them up. Also fixed
+;; font-lock rules so that things in quotes get highlighted
+;; correctly and the surrounding text is unhighlighted. Fixed
+;; up font-lock rules for plot and splot. Added
+;; `gnuplot-send-line-and-forward' as suggested by <MD>.
+;; 0.4b Nov 21 1998 <BR> added toolbar for xemacs -- see file
+;; gnuplot-toolbar.el. fixed error message in plot line
+;; function when line is empty. option added to display the
+;; comint buffer showing the gnuplot process in a separate
+;; frame
+;; 0.4c Minor stuff: Nov 30 1998 <BR> fixed highlighting in comint
+;; buffer. fixed frame behavior. added "[:]" to range
+;; insertions. added :link to defgroup. Dec 1 1998 <BR> fixed
+;; some mismatched defcustoms. added a few lines to suppress
+;; some compile-time warnings. Dec 3 1998 <BR> Fixed behavior
+;; of filename insertion function. Added more :links to
+;; defgroup.
+;; 0.4d Dec 6 1998 <BR> Added function gnuplot-setup-info-look and
+;; variable gnuplot-info-hook to handle various versions of the
+;; gnuplot info file.
+;; 0.4e Dec 12 1998 <BR> Split up gnuplot-insertions-menu for ease of
+;; custimization, put menubar initialization in a function.
+;; 0.4f Dec 14 1998 <BR> defcustom the insertions submenus, add
+;; gnuplot-insertion-menu-flag, intelligent Makefile knows
+;; which info-look to compile
+;; 0.5 Dec 27 1998 <BR> wrote initial draft of gnuplot-gui.el,
+;; included it in insertions menu and in `gnuplot-insert'.
+;; Negate option function, bound to C-c C-n. Dec 29 1998 <BR>
+;; C-c C-h with no response goes to Commands menu. Transparent
+;; toolbar icons. Replace kw-compl with a simple completion
+;; function. Put gnuplot-toolbar code in gnuplot.el.
+;; 0.5a Jan 23 1999 <BR> send file uses the load command. add
+;; gnuplot-plot-from-comint and
+;; gnuplot-save-and-plot-from-comint and keybindings in the
+;; comint buffer. do (process-kill-without-query
+;; gnuplot-process nil). `gnuplot-negate-option' checks if set
+;; option has a negated form.
+;; 0.5b `gnuplot-kill-gnuplot-buffer' made more robust. fixed a bug
+;; in `gnuplot-plot-from-comint'. fixed description of
+;; gnuplot-faces group.
+;; 0.5c update copyright information, update gpelcard
+;; 0.5d Mar 20 1999 <BR> adopt installation materials from <LH>. Add
+;; some support for hidden3d. Use constants in types alists in
+;; gui. Various other minor improvements to the types alists.
+;; 0.5e Apr 6 1999 <BR> at the suggestion of <SE> I did away with the
+;; gnuplot-which-highlight variable and revamped how
+;; colorization gets turned on. This is a bit tricky since I
+;; want it to work with font-lock under emacs and xemacs and
+;; with hilit19. Apr 11 1999 <BR> insert space at end of
+;; unique completion. add a few GUI types, rewrite some stuff
+;; in the GUI interface. primitive support for plot, splot,
+;; and fit. Fixed completion in file widget.
+;; 0.5f May 15 1999 <BR> Add pgnuplot.c and Win9x install instructions
+;; to the distribution. Fixed a defface bug. Added
+;; `gnuplot-keywords-when' allowing deferral of parsing the
+;; info file.
+;; 0.5g May 27 1999 <BR> Fixed font-locking of strings and
+;; comments. Figure out gnuplot-version number from startup
+;; message and set `gnuplot-echo-command-line-flag'
+;; accordingly. Added `gnuplot-program-version' variable.
+;; Check that font-lock is actually a feature, as suggested by
+;; <KL>
+;; 0.5h Aug 15 1999 <BR> Added `gnuplot-determine-gnuplot-version' so
+;; that the gnuplot version number and `comint-process-echos'
+;; actually get set correctly. Actually, the first time
+;; something is plotted, the echoing might not work, but the
+;; second time it will.
+;; 0.5i Sep 2 1999 <BR> Once again changed how
+;; `comint-process-echos' gets set. Maybe I got it right this
+;; time? Also fixed certain situations where the info file
+;; did notget properly loaded (insertion with info toggle on
+;; and info button in GUI).
+;; 0.5j Sep 9 1999 <BR> Do a more robust check for the gnuplot
+;; process before killing the gnuplot buffer, as suggested by
+;; <SE>.
+;; 0.5k Sep 22 1999 <BR> make `gnuplot-send-line-and-forward' skip
+;; over blank and comment lines as suggested by <SE>. Jan 10
+;; 2000 Bound C-c C-j to `gnuplot-forward-script-line'.
+;; 0.5l Nov 16 2000 <BR> support for pm3d in gnuplot-gui and in plot
+;; options insertions menu. mentioned pm3d in gpelcard. gui
+;; support for x11 pm3d and vgagl terms.
+;; `gnuplot-negate-option' works with new syntax.
+;; 0.5m Nov 17 2000 <BR> add colorization and gui support for new
+;; commands in 3.8. gui support for emf term. gui support for
+;; new "set style" syntax. much better scheme for determining
+;; gnuplot version number + make better use of it.
+;; 0.5n Jan 4 2001 <BR> corrected a serious problem interacting with
+;; speedbar
+;; 0.5o skipped
+;; 0.5p Mar 14 2001 <BR> fixed problem with toolbar creation and
+;; speedbar clicking
+;; 0.5q May 30 2001 <BR> added font-lock bindings for words associated
+;; with plotting
+;; 0.5r Oct 17 2001 <BR> Incorporate two suggestions by <RF>, bind
+;; C-c C-c to comment-region and C-c C-o to the GUI, also make
+;; C-c C-l respect continuation lines
+;; April 12, 2002 <BR> added feature to trim length of gnuplot
+;; process buffer
+;; 0.5s Jun 7 2002 <BR> Yet again changed how `comint-process-echos'
+;; gets set. It really needs to be nil on NTEmacs 21.1 or
+;; comint gets stuck in an infinate loop.
+;; 0.5t Sep 16 2002 <BR> Fixed a problem with C-c C-v jumping
+;; forward 2 lines at a time
+;; 0.6.0 Dec 13 2002 <BR> Changed numbering scheme to accommodate
+;; gnuplot packaging requirements
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Acknowledgements:
+;; David Batty <DB> (numerous corrections)
+;; Laurent Bonnaud <LB> (suggestions regarding font-lock rules)
+;; Markus Dickebohm <MD> (suggested `gnuplot-send-line-and-forward')
+;; Stephen Eglan <SE> (suggested the use of info-look,
+;; contributed a bug fix regarding shutting
+;; down the gnuplot process, improvement to
+;; `gnuplot-send-line-and-forward')
+;; Robert Fenk <RF> (suggested respecting continuation lines)
+;; Michael Karbach <MK> (suggested trimming the gnuplot process buffer)
+;; Alex Chan Libchen <AL> (suggested font-lock for plotting words)
+;; Kuang-Yu Liu <KL> (pointed out buggy dependence on font-lock)
+;; Hrvoje Niksic <HN> (help with defcustom arguments for insertions)
+;; Andreas Rechtsteiner <AR> (pointed out problem with C-c C-v)
+;; Michael Sanders <MS> (help with the info-look interface)
+;; Jinwei Shen <JS> (suggested functionality in comint buffer)
+;; Michael M. Tung <MT> (prompted me to add pm3d support)
+;; Holger Wenzel <HW> (suggested using `gnuplot-keywords-when')
+;; Wolfgang Zocher <WZ> (pointed out problem with gnuplot-mode + speedbar)
+;; and especially to Lars Hecking <LH> for including gnuplot-mode
+;; with the gnuplot 3.7-beta distribution and for providing me with
+;; installation materials
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; To Do:
+;;
+;; 1. Since `gnuplot-display-process' can be nil, it would be
+;; handy to have a function to put on
+;; `gnuplot-after-plot-buffer-hook' to check and see if the script
+;; executed properly. Alas I am not sure how gnuplot signals its
+;; errors.
+;; 2. improve plot, splot, fit in GUI
+;; 3. interface to setting bind command using `read-key-sequence'.
+;; this is a pain because the nomenclature is really different in
+;; gnuplot than in `read-key-sequence'
+;;
+;;; Bugs:
+;;
+;; -- indentation is not quite right (but close)
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Code:
+
+(require 'comint)
+(require 'easymenu)
+
+\f
+;;; --- variable definitions + eval-and-compile clauses
+
+;; handle defcustom
+(eval-and-compile
+ (condition-case ()
+ (require 'custom)
+ (error nil))
+ (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
+ nil ;; We've got what we needed
+ ;; We have the old custom-library, hack around it!
+ (if (fboundp 'defgroup)
+ nil
+ (defmacro defgroup (&rest args)
+ nil))
+ (if (fboundp 'defface)
+ nil
+ (defmacro defface (var values doc &rest args)
+ `(progn
+ (defvar (, var) (quote (, var)))
+ ;; To make colors for your faces you need to set your .Xdefaults
+ ;; or set them up ahead of time in your .emacs file.
+ (make-face (, var))
+ )))
+ (if (fboundp 'defcustom)
+ nil
+ (defmacro defcustom (var value doc &rest args)
+ `(defvar (, var) (, value) (, doc))))))
+
+;; (eval-and-compile
+;; (condition-case ()
+;; (require 'kw-compl)
+;; (error nil)))
+(eval-and-compile ;; <DB>
+ (require 'info))
+(eval-and-compile
+ (condition-case ()
+ (require 'info-look)
+ (error nil)))
+;; this just gets rid of an annoying compile time error message
+;; (eval-when-compile
+;; (defun gnuplot-dummy ())
+;; (defalias 'hilit-set-mode-patterns 'gnuplot-dummy))
+
+
+(defconst gnuplot-xemacs-p (string-match "XEmacs" (emacs-version)))
+(defconst gnuplot-ntemacs-p (string-match "msvc" (emacs-version)))
+(defvar gnuplot-three-eight-p "")
+
+(defconst gnuplot-maintainer "Bruce Ravel")
+(defconst gnuplot-maintainer-email "ravel@phys.washington.edu")
+(defconst gnuplot-maintainer-url
+ "http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/")
+(defconst gnuplot-version "0.6.0")
+
+(defgroup gnuplot nil
+ "Gnuplot-mode for Emacs."
+ :prefix "gnuplot-"
+ :group 'processes
+ :group 'applications
+ :group 'local
+ :link '(emacs-library-link :tag "Lisp File" "gnuplot.el")
+ :link '(url-link :tag "Homepage"
+ "http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/")
+ :link '(custom-manual "(gnuplot)Top")
+ :link '(emacs-commentary-link :tag "Commentary" "gnuplot.el") )
+(defgroup gnuplot-insertions nil
+ "Insert commands into gnuplot-scripts from a pull-down menu."
+ :prefix "gnuplot-insertions-"
+ :group 'gnuplot)
+(defgroup gnuplot-hooks nil
+ "Hook variables used by `gnuplot-mode'."
+ :prefix "gnuplot-"
+ :group 'gnuplot)
+
+(defcustom gnuplot-mode-hook nil
+ "*Hook run when `gnuplot-mode' is entered."
+ :group 'gnuplot-hooks
+ :type 'hook)
+(defcustom gnuplot-load-hook nil
+ "*Hook run when gnuplot.el is first loaded."
+ :group 'gnuplot-hooks
+ :type 'hook)
+(defcustom gnuplot-after-plot-hook nil
+ "*Hook run after gnuplot plots something.
+This is the last thing done by the functions for plotting a line, a
+region, a buffer, or a file."
+ :group 'gnuplot-hooks
+ :type 'hook)
+(defcustom gnuplot-info-hook nil
+ "*Hook run before setting up the info-look interface.
+This hook is necessary to handle inconsistencies in versions of and
+sources of the gnuplot info file. If Gnuplot-mode can find the info
+file generated from the 3.6beta patchlevel 347 (or later) release of
+Gnuplot, then this hook probably is not necessary. Some versions of
+the info file may have a General Index session, which can be used by
+info-look. In that case the following (or something similar with the
+value of `info-lookup-symbol-alist' altered appropriately) should be
+placed in the .emacs file.
+
+Emacs version 20.2 ships with a different version of info-look that
+does 20.3. If you use any version of Emacs 19, you must use the
+version from 20.2. Any version of XEmacs 20 or 21 should use the
+version from 20.3 but can use either. XEmacs 19 should use the
+version 20.2.
+
+For the newer version of info-look, do this:
+
+ (add-hook \'gnuplot-info-hook
+ \'(lambda ()
+ (let ((elem (assoc \'gnuplot-mode info-lookup-alist)))
+ (delete elem info-lookup-alist)
+ (info-lookup-maybe-add-help
+ :mode 'gnuplot-mode :topic 'symbol
+ :regexp \"[a-zA-Z][_a-zA-Z0-9]*\"
+ :doc-spec '((\"(gnuplot)General Index\" nil
+ \"[_a-zA-Z0-9]+\"))))))
+
+For the older version of info-look, do this:
+
+ (add-hook \'gnuplot-info-hook
+ \'(lambda ()
+ (let ((elem (assoc \'gnuplot-mode info-lookup-alist)))
+ (delete elem info-lookup-alist)
+ (setq info-lookup-alist
+ (append info-lookup-alist
+ \'((gnuplot-mode
+ \"[a-zA-Z][_a-zA-Z0-9]*\" nil
+ ((\"(gnuplot)General Index\" nil
+ \"[_a-zA-Z0-9]+\" )))))))))"
+ :group 'gnuplot-hooks
+ :type 'hook)
+;; comint hook suggested by <DB>
+(defcustom gnuplot-comint-setup-hook nil
+ "*Hook run after setting up the gnuplot buffer in comint mode.
+So the configuration can be customised by the user."
+ :group 'gnuplot-hooks
+ :type 'hook)
+(defvar gnuplot-recently-sent nil
+ "This is a record of the most recent kind of text sent to gnuplot.
+It takes as its value nil, 'line, 'region, 'buffer, or 'file. It is
+useful for functions included in `gnuplot-after-plot-hook'.")
+(make-variable-buffer-local 'gnuplot-recently-sent)
+
+(defcustom gnuplot-program "gnuplot"
+ "*The name of the gnuplot executable."
+ :group 'gnuplot
+ :type 'string)
+(defvar gnuplot-program-version nil
+ "Version number of gnuplot.
+This is found using `gnuplot-determine-gnuplot-version")
+(defcustom gnuplot-process-name "gnuplot"
+ "Name given to the gnuplot buffer and process."
+ :group 'gnuplot
+ :type 'string)
+(defvar gnuplot-buffer nil
+ "*The name of the buffer displaying the gnuplot process.")
+(defvar gnuplot-process nil
+ "Variable holding the process handle.")
+(defvar gnuplot-process-frame nil
+ "The frame for displaying the gnuplot process.
+This is used when `gnuplot-display-process' is equal to 'frame.")
+(defvar gnuplot-comint-recent-buffer nil
+ "The most recently plotted gnuplot script buffer.
+This is used by the function that plot from the comint buffer. It is
+reset every time something is plotted from a script buffer.")
+
+(defcustom gnuplot-gnuplot-buffer "plot.gp"
+ "*The name of the gnuplot scratch buffer opened by 'gnuplot-make-buffer'."
+ :group 'gnuplot
+ :type 'string)
+
+(defcustom gnuplot-display-process 'window
+ "This controls how the gnuplot process buffer is displayed.
+The values are
+ 'frame display gnuplot process in a separate frame
+ 'window display gnuplot process in this frame but in another window
+ nil `gnuplot-process' is in the current frame but not displayed"
+ :group 'gnuplot
+ :type '(radio (const :tag "Separate frame" frame)
+ (const :tag "Separate window" window)
+ (const :tag "Not displayed" nil)))
+(defcustom gnuplot-info-display 'window
+ "*Determines how `gnuplot-info-lookup-symbol' displays the info file.
+The values are
+ 'frame display info file in a separate frame
+ 'window display info file in another window
+ nil display info file in the current window"
+ :group 'gnuplot
+ :type '(radio (const :tag "Separate frame" frame)
+ (const :tag "Separate window" window)
+ (const :tag "This window" nil)))
+
+(defcustom gnuplot-echo-command-line-flag (not gnuplot-ntemacs-p)
+ "*This sets the fall-back value of `comint-process-echos'.
+If `gnuplot-mode' cannot figure out what version number of gnuplot
+this is, then the value of this variable will be used for
+`comint-process-echos'. It seems that gnuplot 3.5 wants this to be
+nil and 3.7 wants it to be t. If lines that you send to gnuplot from
+the `gnuplot-mode' buffer are not appearing at the gnuplot prompt in
+the process buffer, try toggling it. Also see the document string for
+`comint-process-echos'. If you change this, kill the gnuplot process
+and start it again."
+ :group 'gnuplot
+ :type 'boolean)
+(defcustom gnuplot-insertions-show-help-flag nil
+ "*Non-nil means to display certain help messages automatically.
+These messages are shown after menu insertion of gnuplot commands."
+ :group 'gnuplot-insertions
+ :type 'boolean)
+
+(defcustom gnuplot-delay 0.01
+ "*Amount of time to delay before sending a new line to gnuplot.
+This is needed so that the the line is not written in the gnuplot
+buffer in advance of its prompt. Increase this number if the
+prompts and lines are displayed out of order."
+ :group 'gnuplot
+ :type 'number)
+(defcustom gnuplot-buffer-max-size 1000
+ "*The maximum size in lines of the gnuplot process buffer.
+Each time text is written in the gnuplot process buffer, lines are
+trimmed from the beginning of the buffer so that the buffer is this
+many lines long. The lines are deleted after the most recent lines
+were interpretted by gnuplot. Setting to 0 turns off this feature
+(i.e. no lines get trimmed)."
+ :group 'gnuplot
+ :type 'integer)
+(defcustom gnuplot-quote-character "\'"
+ "*Quotation character used for inserting quoted strings.
+Gnuplot can use single or double quotes. If you prefer to have the
+filename insertion function never insert quotes for you, set this
+to the empty string."
+ :group 'gnuplot
+ :type '(radio (const :tag "double quote" "\"")
+ (const :tag "single quote" "\'")
+ (const :tag "none" "" )))
+;; (defcustom gnuplot-gnuplot-version nil
+;; "*Force gnuplot-mode to behave for this version of gnuplot."
+;; :group 'gnuplot
+;; :type '(radio (const :tag "unspecified" nil)
+;; (const :tag "3.8 or newer" "3.8")
+;; (const :tag "3.7 or older" "3.7")))
+
+(defvar gnuplot-info-frame nil)
+(defvar gnuplot-info-nodes '())
+
+(defvar gnuplot-first-call t)
+
+;; with info-look, there is no need to carry this list around -- it
+;; can be generated on the fly appropriate to the currently installed
+;; version of gnuplot.info
+(defvar gnuplot-keywords nil
+ "A list of keywords used in GNUPLOT.
+These are set by `gnuplot-set-keywords-list' from the values in
+`info-lookup-cache'.")
+(defvar gnuplot-keywords-pending t ;; <HW>
+ "A boolean which gets toggled when the info file is probed.")
+(defcustom gnuplot-keywords-when 'deferred ;; 'immediately
+ "This variable controls when the info file is parsed.
+The choices are immediately upon starting gnuplot-mode or the first
+time that data is needed. If you use hilit19, then the info file is
+parsed immediately regardless of the value of this variable. But
+you're not using that musty old thing, are you..."
+ :group 'gnuplot
+ :type
+ '(radio (const :tag "Parse info file when gnuplot-mode starts" immediately)
+ (const :tag "Parse info file the first time it is needed" deferred)))
+
+(defgroup gnuplot-faces nil
+ "Text faces used by gnuplot-mode."
+ :prefix "gnuplot-"
+ :group 'gnuplot)
+
+(cond ((and (featurep 'custom) (fboundp 'custom-declare-variable))
+ (defface gnuplot-prompt-face '((((class color))
+ (:foreground "firebrick"))
+ (t
+ (:bold t :underline t)))
+ "Face used for the prompt in the gnuplot process buffer."
+ :group 'gnuplot-faces))
+ (t
+ (make-face 'gnuplot-prompt-face)
+ (set-face-foreground 'gnuplot-prompt-face "firebrick")))
+
+\f
+;;; --- key bindings and menus
+
+(defvar gnuplot-mode-map nil)
+(if gnuplot-mode-map
+ ()
+ (setq gnuplot-mode-map (make-sparse-keymap))
+ (define-key gnuplot-mode-map "\C-c\C-b" 'gnuplot-send-buffer-to-gnuplot)
+ (define-key gnuplot-mode-map "\C-c\C-c" 'comment-region) ; <RF>
+ (define-key gnuplot-mode-map "\C-c\C-o" 'gnuplot-gui-set-options-and-insert)
+ (define-key gnuplot-mode-map "\C-c\C-d" 'gnuplot-show-version)
+ (define-key gnuplot-mode-map "\C-c\C-e" 'gnuplot-show-gnuplot-buffer)
+ (define-key gnuplot-mode-map "\C-c\C-f" 'gnuplot-send-file-to-gnuplot)
+ (define-key gnuplot-mode-map "\C-c\C-h" 'gnuplot-info-lookup-symbol)
+ (define-key gnuplot-mode-map "\C-c\C-i" 'gnuplot-insert-filename)
+ (define-key gnuplot-mode-map "\C-c\C-j" 'gnuplot-forward-script-line)
+ (define-key gnuplot-mode-map "\C-c\C-k" 'gnuplot-kill-gnuplot-buffer)
+ (define-key gnuplot-mode-map "\C-c\C-l" 'gnuplot-send-line-to-gnuplot)
+ (define-key gnuplot-mode-map "\C-c\C-n" 'gnuplot-negate-option)
+ (define-key gnuplot-mode-map "\C-c\C-p" 'gnuplot-show-gnuplot-version)
+ (define-key gnuplot-mode-map "\C-c\C-r" 'gnuplot-send-region-to-gnuplot)
+ ;;(define-key gnuplot-mode-map "\C-c\C-t" 'gnuplot-gui-swap-simple-complete)
+ (define-key gnuplot-mode-map "\C-c\C-u" 'gnuplot-bug-report)
+ (define-key gnuplot-mode-map "\C-c\C-v" 'gnuplot-send-line-and-forward)
+ (define-key gnuplot-mode-map "\C-c\C-z" 'gnuplot-customize)
+ (define-key gnuplot-mode-map "\M-\r" 'gnuplot-complete-keyword)
+ (define-key gnuplot-mode-map "\M-\t" 'gnuplot-complete-keyword)
+ (define-key gnuplot-mode-map "\C-i" 'indent-for-tab-command)
+ (define-key gnuplot-mode-map "\C-m" 'newline-and-indent)
+ ;;(define-key gnuplot-mode-map "\C-m" 'reindent-then-newline-and-indent)
+ ;;(if (featurep 'kw-compl)
+ ;; (define-key gnuplot-mode-map "\M-\r" 'kw-compl-abbrev)))
+ (cond (gnuplot-xemacs-p
+ (define-key gnuplot-mode-map '(shift button2)
+ 'gnuplot-gui-mouse-set))
+ (t
+ (define-key gnuplot-mode-map [S-mouse-2]
+ 'gnuplot-gui-mouse-set))) )
+
+(defvar gnuplot-mode-menu nil)
+(defvar gnuplot-menu nil
+ "Menu for `gnuplot-mode'.")
+(setq gnuplot-menu
+ '("Gnuplot"
+ ["Send line to gnuplot" gnuplot-send-line-to-gnuplot t]
+ ["Send line & move forward" gnuplot-send-line-and-forward (not (eobp))]
+ ["Send region to gnuplot" gnuplot-send-region-to-gnuplot
+ (gnuplot-mark-active)]
+ ["Send buffer to gnuplot" gnuplot-send-buffer-to-gnuplot t]
+ ["Send file to gnuplot" gnuplot-send-file-to-gnuplot t]
+ "---"
+ ["Insert filename at point" gnuplot-insert-filename t]
+ ["Negate set option" gnuplot-negate-option t]
+ ;;["Set key binding" gnuplot-set-binding gnuplot-three-eight-p]
+ ["Keyword help" gnuplot-info-lookup-symbol
+ (or gnuplot-keywords gnuplot-keywords-pending)]
+ ["Show gnuplot process buffer" gnuplot-show-gnuplot-buffer t]
+ ["Set arguments at point" gnuplot-gui-set-options-and-insert
+ (fboundp 'gnuplot-gui-set-options-and-insert)]
+ ["Swap plot/splot/fit lists in GUI" gnuplot-gui-swap-simple-complete
+ (fboundp 'gnuplot-gui-swap-simple-complete)]
+ "---"
+ ["Customize gnuplot" gnuplot-customize t]
+ ["Submit bug report" gnuplot-bug-report t]
+ ["Show gnuplot-mode version" gnuplot-show-version t]
+ ["Show gnuplot version" gnuplot-show-gnuplot-version t]
+ "---"
+ ["Kill gnuplot" gnuplot-kill-gnuplot-buffer t]
+ ))
+
+\f
+;;; --- insertions variables and menus
+
+;;(load-library "gnuplot-insertions")
+(defvar gnuplot-mode-insertions-menu nil)
+(defvar gnuplot-insertions-menu nil
+ "Menu for insertions in `gnuplot-mode'.
+
+The insertions menu is composed of several sub-menus. The variables
+describing the sub-menus are:
+ `gnuplot-insertions-adornments'
+ `gnuplot-insertions-plot-options'
+ `gnuplot-insertions-terminal'
+ `gnuplot-insertions-x-axis'
+ `gnuplot-insertions-y-axis'
+ `gnuplot-insertions-z-axis'
+ `gnuplot-insertions-x2-axis'
+ `gnuplot-insertions-y2-axis'
+ `gnuplot-insertions-parametric-plots'
+ `gnuplot-insertions-polar-plots'
+ `gnuplot-insertions-surface-plots'
+These variables can be customized by the user. For example, there are
+many terminal types which are not in the terminal submenu but which
+may be compiled into a user's copy of gnuplot.
+
+Each of these variables is a list whose first element is a string and
+all the rest are vectors as described in the document string for
+`easy-menu-define'. The callback used throughout these menus is
+`gnuplot-insert' which inserts the appropriate set expression and,
+optionally, looks up that item in the gnuplot info file.
+
+The easiest way to customize the submenus is to use the custom
+package. Just type \\[gnuplot-customize] and follow your nose.
+
+You can also add new items to any of these sub-menus by adding to the
+`gnuplot-load-hook' in your .emacs file. Here is an example of adding
+the \"regis\" terminal type to the terminal sub-menu:
+
+ (add-hook
+ 'gnuplot-load-hook
+ '(lambda ()
+ (setq gnuplot-insertions-terminal
+ (append gnuplot-insertions-terminal
+ (list
+ [\"regis\"
+ (gnuplot-insert \"set terminal regis\")
+ t])))))")
+
+(defvar gnuplot-insertions-top ()
+ "Top part of insertions menu.
+See the document string for `gnuplot-insertions-menu'")
+
+(defcustom gnuplot-insertions-menu-flag t
+ "*Non-nil means to place the insertion menu in the menubar.
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type 'boolean)
+
+(defcustom gnuplot-insertions-adornments ; this is icky...
+ (if gnuplot-three-eight-p
+ '("adornments"
+ ["arrow" (gnuplot-insert "set arrow ") t]
+ ["bar" (gnuplot-insert "set bar") t]
+ ["border" (gnuplot-insert "set border") t]
+ ["boxwidth" (gnuplot-insert "set boxwidth ") t]
+ ["format" (gnuplot-insert "set format ") t]
+ ["grid" (gnuplot-insert "set grid") t]
+ ["key" (gnuplot-insert "set key ") t]
+ ["label" (gnuplot-insert "set label ") t]
+ ["pointsize" (gnuplot-insert "set pointsize ") t]
+ ["samples" (gnuplot-insert "set samples ") t]
+ ["size" (gnuplot-insert "set size ") t]
+ ["style" (gnuplot-insert "set style ") t]
+ ["tics" (gnuplot-insert "set tics ") t]
+ ["timefmt" (gnuplot-insert "set timefmt ") t]
+ ["timestamp" (gnuplot-insert "set timestamp ") t]
+ ["title" (gnuplot-insert "set title ") t]
+ ["zeroaxis" (gnuplot-insert "set zeroaxis") t] )
+ '("adornments"
+ ["data style" (gnuplot-insert "set data style ") t]
+ ["function style" (gnuplot-insert "set function style ") t]
+ ["arrow" (gnuplot-insert "set arrow ") t]
+ ["bar" (gnuplot-insert "set bar") t]
+ ["border" (gnuplot-insert "set border") t]
+ ["boxwidth" (gnuplot-insert "set boxwidth ") t]
+ ["format" (gnuplot-insert "set format ") t]
+ ["grid" (gnuplot-insert "set grid") t]
+ ["key" (gnuplot-insert "set key ") t]
+ ["label" (gnuplot-insert "set label ") t]
+ ["pointsize" (gnuplot-insert "set pointsize ") t]
+ ["samples" (gnuplot-insert "set samples ") t]
+ ["size" (gnuplot-insert "set size ") t]
+ ["tics" (gnuplot-insert "set tics ") t]
+ ["timefmt" (gnuplot-insert "set timefmt ") t]
+ ["timestamp" (gnuplot-insert "set timestamp ") t]
+ ["title" (gnuplot-insert "set title ") t]
+ ["zeroaxis" (gnuplot-insert "set zeroaxis") t] ))
+ "Adornments submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+
+(defcustom gnuplot-insertions-plot-options
+ '("plot options"
+ ["autoscale" (gnuplot-insert "set autoscale ") t]
+ ["clip" (gnuplot-insert "set clip ") t]
+ ["encoding" (gnuplot-insert "set encoding ") t]
+ ["locale" (gnuplot-insert "set locale ") t]
+ ["logscale" (gnuplot-insert "set logscale ") t]
+ ["multiplot" (gnuplot-insert "set multiplot") t]
+ ["missing" (gnuplot-insert "set missing \"\"") t]
+ ["palette" (gnuplot-insert "set palette ") t] ; <MT>
+ ["pm3d" (gnuplot-insert "set pm3d ") t]
+ ["offsets" (gnuplot-insert "set offsets ") t]
+ ["output" (gnuplot-insert "set output ") t]
+ ["zero" (gnuplot-insert "set zero ") t] )
+ "Plot options submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-terminal
+ '("terminal"
+ ["eepic" (gnuplot-insert "set terminal eepic") t]
+ ["fig" (gnuplot-insert "set terminal fig") t]
+ ["gpic" (gnuplot-insert "set terminal gpic") t]
+ ["latex" (gnuplot-insert "set terminal latex") t]
+ ["linux" (gnuplot-insert "set terminal linux") t]
+ ["pbm" (gnuplot-insert "set terminal pbm") t]
+ ["png" (gnuplot-insert "set terminal png") t]
+ ["postscript" (gnuplot-insert "set terminal postscript") t]
+ ["pslatex" (gnuplot-insert "set terminal pslatex") t]
+ ["table" (gnuplot-insert "set terminal table") t]
+ ["tek40xx" (gnuplot-insert "set terminal tek40xx") t]
+ ["tkcanvas" (gnuplot-insert "set terminal tkcanvas") t]
+ ["tpic" (gnuplot-insert "set terminal tpic") t]
+ ["vgagl" (gnuplot-insert "set terminal vgagl") t] ; for pm3d patch
+ ["vttek" (gnuplot-insert "set terminal vttek") t]
+ ["x11" (gnuplot-insert "set terminal x11") t] )
+ "Terminal submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-x-axis
+ '("x-axis"
+ ["xdata" (gnuplot-insert "set xdata ") t]
+ ["xlabel" (gnuplot-insert "set xlabel ") t]
+ ["xrange" (gnuplot-insert "set xrange [:]") t]
+ ["xtics" (gnuplot-insert "set xtics ") t]
+ ["mxtics" (gnuplot-insert "set mxtics ") t]
+ ["xzeroaxis" (gnuplot-insert "set xzeroaxis ") t]
+ ["xdtics" (gnuplot-insert "set xdtics ") t]
+ ["xmtics" (gnuplot-insert "set xmtics ") t])
+ "X-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-x2-axis
+ '("x2-axis"
+ ["x2data" (gnuplot-insert "set xdata ") t]
+ ["x2label" (gnuplot-insert "set xlabel ") t]
+ ["x2range" (gnuplot-insert "set xrange [:]") t]
+ ["x2tics" (gnuplot-insert "set xtics ") t]
+ ["mx2tics" (gnuplot-insert "set mxtics ") t]
+ ["x2zeroaxis" (gnuplot-insert "set xzeroaxis ") t]
+ ["x2dtics" (gnuplot-insert "set xdtics ") t]
+ ["x2mtics" (gnuplot-insert "set xmtics ") t])
+ "X2-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-y-axis
+ '("y-axis"
+ ["ydata" (gnuplot-insert "set ydata ") t]
+ ["ylabel" (gnuplot-insert "set ylabel ") t]
+ ["ymtics" (gnuplot-insert "set ymtics ") t]
+ ["yrange" (gnuplot-insert "set yrange [:]") t]
+ ["ytics" (gnuplot-insert "set ytics ") t]
+ ["yzeroaxis" (gnuplot-insert "set yzeroaxis ") t]
+ ["ydtics" (gnuplot-insert "set ydtics ") t]
+ ["mytics" (gnuplot-insert "set mytics ") t])
+ "Y-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-y2-axis
+ '("y2-axis"
+ ["y2data" (gnuplot-insert "set ydata ") t]
+ ["y2label" (gnuplot-insert "set ylabel ") t]
+ ["y2range" (gnuplot-insert "set yrange [:]") t]
+ ["y2tics" (gnuplot-insert "set ytics ") t]
+ ["my2tics" (gnuplot-insert "set mytics ") t]
+ ["y2zeroaxis" (gnuplot-insert "set yzeroaxis ") t]
+ ["y2mtics" (gnuplot-insert "set ymtics ") t]
+ ["y2dtics" (gnuplot-insert "set ydtics ") t])
+ "Y2-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+
+(defcustom gnuplot-insertions-z-axis
+ '("z-axis"
+ ["zdata" (gnuplot-insert "set zdata ") t]
+ ["zlabel" (gnuplot-insert "set zlabel ") t]
+ ["zrange" (gnuplot-insert "set zrange [:]") t]
+ ["ztics" (gnuplot-insert "set ztics ") t]
+ ["mztics" (gnuplot-insert "set mztics ") t]
+ ["zdtics" (gnuplot-insert "set zdtics ") t]
+ ["zmtics" (gnuplot-insert "set zmtics ") t] )
+ "Z-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-parametric-plots
+ '("parametric plots"
+ ["parametric" (gnuplot-insert "set parametric") t]
+ ["isosamples" (gnuplot-insert "set isosamples ") t]
+ ["dummy" (gnuplot-insert "set dummy ") t]
+ ["trange" (gnuplot-insert "set trange [:]") t]
+ ["urange" (gnuplot-insert "set urange [:]") t]
+ ["vrange" (gnuplot-insert "set vrange [:]") t] )
+ "Parametric plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-polar-plots
+ '("polar plots"
+ ["polar" (gnuplot-insert "set polar") t]
+ ["angles" (gnuplot-insert "set angles ") t]
+ ["rrange" (gnuplot-insert "set rrange [:]") t] )
+ "Polar plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-surface-plots
+ '("surface plots"
+ ["clabel" (gnuplot-insert "set clabel ") t]
+ ["cntrparam" (gnuplot-insert "set cntrparam ") t]
+ ["contour" (gnuplot-insert "set contour") t]
+ ["dgrid3d" (gnuplot-insert "set dgrid3d ") t]
+ ["hidden3d" (gnuplot-insert "set hidden3d ") t]
+ ["mapping" (gnuplot-insert "set mapping ") t]
+ ["surface" (gnuplot-insert "set surface ") t]
+ ["view" (gnuplot-insert "set view ") t] )
+ "Surface plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer. You will see the change the next time you
+create a `gnuplot-mode' buffer."
+ :group 'gnuplot-insertions
+ :type '(list (string :tag "Title")
+ (repeat :inline t
+ (vector (string :tag "Name")
+ (function :tag "Callback")
+ (boolean :tag "Enabled" t)))))
+
+
+
+(defvar gnuplot-insertions-bottom ()
+ "Bottom part of the insertions menu.
+This part contains the toggle buttons for displaying info or
+opening an argument-setting popup.")
+(setq gnuplot-insertions-bottom
+ '("---"
+ ["Display of info with insertion" gnuplot-toggle-info-display
+ :style toggle :selected gnuplot-insertions-show-help-flag]
+ ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
+ :active (fboundp 'gnuplot-gui-toggle-popup)
+ :style toggle :selected (and (fboundp 'gnuplot-gui-toggle-popup)
+ gnuplot-gui-popup-flag)] ))
+
+
+;; Regarding a comment by <DB>:
+;;
+;; This is from the header in easymenu.el distributed with XEmacs:
+;;
+;; ;; - Function: easy-menu-add MENU [ MAP ]
+;; ;; Add MENU to the current menubar in MAP.
+;; ;;
+;; ;; - Function: easy-menu-remove MENU
+;; ;; Remove MENU from the current menubar.
+;; ;;
+;; ;; Emacs 19 never uses `easy-menu-add' or `easy-menu-remove', menus
+;; ;; automatically appear and disappear when the keymaps specified by
+;; ;; the MAPS argument to `easy-menu-define' are activated.
+;; ;;
+;; ;; XEmacs will bind the map to button3 in each MAPS, but you must
+;; ;; explicitly call `easy-menu-add' and `easy-menu-remove' to add and
+;; ;; remove menus from the menu bar.
+;;
+;; in Emacs, easy-menu-add is defined like this:
+;; (defun easy-menu-add (menu &optional map))
+
+(defun gnuplot-setup-menubar ()
+ "Initial setup of gnuplot and insertions menus."
+ (if gnuplot-insertions-menu-flag ; set up insertions menu
+ (progn
+ (if gnuplot-xemacs-p
+ (setq gnuplot-insertions-top
+ '("insert set expression" "--:doubleLine"))
+ (setq gnuplot-insertions-top
+ '("insert set expression" "---")))
+ (setq gnuplot-insertions-menu
+ (append (list "Insertions")
+ gnuplot-insertions-top
+ (list gnuplot-insertions-adornments)
+ (list gnuplot-insertions-plot-options)
+ (list gnuplot-insertions-terminal)
+ (list gnuplot-insertions-x-axis)
+ (list gnuplot-insertions-y-axis)
+ (list gnuplot-insertions-z-axis)
+ (list gnuplot-insertions-x2-axis)
+ (list gnuplot-insertions-y2-axis)
+ (list gnuplot-insertions-parametric-plots)
+ (list gnuplot-insertions-polar-plots)
+ (list gnuplot-insertions-surface-plots)
+ gnuplot-insertions-bottom))
+ (easy-menu-define gnuplot-mode-insertions-menu gnuplot-mode-map
+ "Insertions menu used in Gnuplot-mode"
+ gnuplot-insertions-menu)
+ (easy-menu-add gnuplot-mode-insertions-menu gnuplot-mode-map)))
+ (easy-menu-define ; set up gnuplot menu
+ gnuplot-mode-menu gnuplot-mode-map "Menu used in gnuplot-mode"
+ gnuplot-menu)
+ (easy-menu-add gnuplot-mode-menu gnuplot-mode-map) )
+
+;; There is no `mark-active' variable in XEmacs. Hassle! This is not
+;; only replicates mark-active, but it only returns true if the region
+;; is of non-zero width.
+;; Error checking suggested by <DB>
+(defun gnuplot-mark-active ()
+ "Return non-nil if the mark is active and it is not equal to point."
+ (condition-case nil
+ (and (mark) (/= (mark) (point)))
+ (error nil)))
+
+\f
+;;; --- XEmacs toolbar
+
+(defgroup gnuplot-toolbar nil
+ "Toolbar used by XEmacs."
+ :prefix "gnuplot-toolbar-"
+ :group 'gnuplot)
+
+(defcustom gnuplot-toolbar-display-flag gnuplot-xemacs-p
+ "*Non-nil means to display display a toolbar in XEmacs."
+ :group 'gnuplot-toolbar
+ :type 'boolean)
+
+(defcustom gnuplot-toolbar-use-toolbar (if (featurep 'toolbar) 'left-toolbar nil)
+ "*If nil, do not use a toolbar.
+If it is non-nil, it must be a toolbar. The five legal values are
+`default-toolbar', `top-toolbar', `bottom-toolbar', `right-toolbar',
+and `left-toolbar', although choosing `default-toolbar' or
+`top-toolbar' may be a bad idea since either will make the GNUPLOT
+toolbar replace the standard toolbar. Changing this will not change
+the toolbar in a currently existing buffer, but it will take effect
+the next time you use `gnuplot-mode' and emacs.
+
+This is only used if a toolbar can be displayed, thus this is used in
+XEmacs and ignored in FSF Emacs."
+ :type '(choice (const default-toolbar)
+ (const top-toolbar)
+ (const bottom-toolbar)
+ (const left-toolbar)
+ (const right-toolbar)
+ (const :tag "No toolbar" nil))
+ :group 'gnuplot-toolbar)
+
+(defvar gnuplot-toolbar-location "")
+
+(defun gnuplot-toolbar-setup-toolbar (toolbar)
+ "Setup function for the `gnuplot-mode' toolbar.
+TOOLBAR contains the toolbar specification.
+This is basically swiped from VM."
+ (let ((width 46) (height 46)
+ (buffer (current-buffer))
+ (frame (selected-frame))
+ (tag-set '(win)))
+ (cond
+ ((eq (symbol-value gnuplot-toolbar-use-toolbar) right-toolbar)
+ (setq gnuplot-toolbar-location "right")
+ (set-specifier right-toolbar toolbar buffer)
+ (set-specifier right-toolbar-width width frame tag-set))
+ ((eq (symbol-value gnuplot-toolbar-use-toolbar) left-toolbar)
+ (setq gnuplot-toolbar-location "left")
+ (set-specifier left-toolbar toolbar buffer)
+ (set-specifier left-toolbar-width width frame tag-set))
+ ((eq (symbol-value gnuplot-toolbar-use-toolbar) bottom-toolbar)
+ (setq gnuplot-toolbar-location "bottom")
+ (set-specifier bottom-toolbar toolbar buffer)
+ (set-specifier bottom-toolbar-height height frame tag-set))
+ ((eq (symbol-value gnuplot-toolbar-use-toolbar) top-toolbar)
+ (setq gnuplot-toolbar-location "top")
+ (set-specifier top-toolbar toolbar buffer)
+ (set-specifier top-toolbar-height height frame tag-set))) ))
+
+(defvar gnuplot-line-xpm
+ (if (featurep 'xpm)
+ (toolbar-make-button-list
+ "/* XPM */
+static char *line[] = {
+/* width height num_colors chars_per_pixel */
+\" 40 40 5 1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaa..a..aaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a....aaa...aaaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a..a..a..a..aaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a.aa..a.....aaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..a..aaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..a..a..aaaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..aa...aaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+ "XPM format image used for the \"plot line\" button"))
+
+(defvar gnuplot-region-xpm
+ (if (featurep 'xpm)
+ (toolbar-make-button-list
+ "/* XPM */
+static char *region[] = {
+/* width height num_colors chars_per_pixel */
+\" 40 40 5 1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa.a..a...aaa....a..aa...aa....aaaaa\",
+\"aaaaaa...a..a..a..a..a..a..a..a..a..aaaa\",
+\"aaaaaa..aa.....a.aa..a....aa..a.aa..aaaa\",
+\"aaaaa..a...aaaa..aa.a..a..aa....a..aaaaa\",
+\"aaaaa..a...a..a..a..a..a..a..a..a..aaaaa\",
+\"aaaa..aaaa...aaa....a..aa...aa..a..aaaaa\",
+\"aaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+ "XPM format image used for the \"plot region\" button"))
+
+(defvar gnuplot-buffer-xpm
+ (if (featurep 'xpm)
+ (toolbar-make-button-list
+ "/* XPM */
+static char *buffer[] = {
+/* width height num_colors chars_per_pixel */
+\" 40 40 5 1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa..aaaaaaaaaa......aaaaaaaaaaaaaa\",
+\"aaaaaaaa..aaaaaaaaa..a..aaaaaaaaaaaaaaaa\",
+\"aaaaaaa....aa..a.........a...aa.a.aaaaaa\",
+\"aaaaaaa..a..a..a..a..a..a..a..a...aaaaaa\",
+\"aaaaaaa.aa....aa..a..a..a.....a..aaaaaaa\",
+\"aaaaaa...a.a..a..a..a..a..aaaa..aaaaaaaa\",
+\"aaaaaa.....a..a..a..a..a..a..a..aaaaaaaa\",
+\"aaaaaa....aaa..a.a..a..aa...aa..aaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+ "XPM format image used for the \"plot buffer\" button"))
+
+(defvar gnuplot-doc-xpm
+ (if (featurep 'xpm)
+ (toolbar-make-button-list
+ "/* XPM */
+static char *book_index[] = {
+/* width height num_colors chars_per_pixel */
+\" 40 40 6 1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff0000\",
+\"d c #ffffff\",
+\"e c #708090\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa.........bbeaaaebb..........aaaaaa\",
+\"aaaaaa.ddddddddaaebebeaaddddddddd.aaaaaa\",
+\"aaaa...dab.bddeebadbdaeebedeeeeed...aaaa\",
+\"aaaa.c.dbaddddebeedbdeebeedebebed.c.aaaa\",
+\"aaaa.c.d.de.edeebeabdbbeeddebbbed.c.aaaa\",
+\"aaaa.c.dbad.ddebeadbdeeebeddeeeed.c.aaaa\",
+\"aaaa.c.dab..ddeeeedbdebeeedebebed.c.aaaa\",
+\"aaaa.c.dddddddeebeabdebebedeebedd.c.aaaa\",
+\"aaaa.c.debebedebeedbdbebeedbeeeeb.c.aaaa\",
+\"aaaa.c.debeeedeeeaabdaaddddebedbb.c.aaaa\",
+\"aaaa.c.deebeddbebedbdbaa.adeeedeb.c.aaaa\",
+\"aaaa.c.ddeebedeeebaba.dd.dddeeedd.c.aaaa\",
+\"aaaa.c.debeebdbeeedbd....ddeebeed.c.aaaa\",
+\"aaaa.c.deebeedeebadbd.dd.ddeeeedd.c.aaaa\",
+\"aaaa.c.dbbebddeeeeabd.aa.adebebbd.c.aaaa\",
+\"aaaa.c.deeeeedeebeabaedddddeeeedd.c.aaaa\",
+\"aaaa.c.dbebbbdebeadbdaeeeedebeeed.c.aaaa\",
+\"aaaa.c.deeebddeeebdbdeebeedeebeed.c.aaaa\",
+\"aaaa.c.debeeedebeeabdebebedebeebd.c.aaaa\",
+\"aaaa.c.deebbedeeeedbdeeeeddeeeeed.c.aaaa\",
+\"aaaa.c.dddddddddaadbdaddddddddddd.c.aaaa\",
+\"aaaa.c..........beabaeb...........c.aaaa\",
+\"aaaa.c.bbbbbbbbbb.bbbbbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c.bbbbbbbbbb..e.bbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c.bbbbbbbbbb.b.bbbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c............e.e.............c.aaaa\",
+\"aaaa.cccccccccccc.a.a.ccccccccccccc.aaaa\",
+\"aaaa................................aaaa\",
+\"aaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+ "XPM format image used for the \"document\" button"))
+
+(defvar gnuplot-help-xpm
+ (if (featurep 'xpm)
+ (toolbar-make-button-list
+ "/* XPM */
+static char *help_btn[] = {
+/* width height num_colors chars_per_pixel */
+\" 40 40 3 1\",
+/* colors */
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #000000\",
+\"c c #ff0000\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaabbbccccccccbbbaaaaaaaaaaaaa\",
+\"aaaaaaaaaaabbccccccccccccccbbaaaaaaaaaaa\",
+\"aaaaaaaaaabccccccccccccccccccbaaaaaaaaaa\",
+\"aaaaaaaaabccccccccccccccccccccbaaaaaaaaa\",
+\"aaaaaaaabcccccccbbbbbbbbcccccccbaaaaaaaa\",
+\"aaaaaaaabccccbbbaaaaaaaabbbccccbaaaaaaaa\",
+\"aaaaaaabccccbaaaaaaaaaaaaaabccccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabbbbbaaaaaaaaaaaaaaabccccbaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaabbbccccbaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbbbcccccccbaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabcccccccccccccbaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccccccccccbaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccccccccbbaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbbbbbbaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+ "XPM format image used for the \"help\" button"))
+
+(defvar gnuplot-toolbar
+ '([gnuplot-line-xpm
+ gnuplot-line-fn t "Plot the line under point"]
+ [gnuplot-region-xpm
+ gnuplot-region-fn t "Plot the selected region"]
+ [gnuplot-buffer-xpm
+ gnuplot-buffer-fn t "Plot the entire buffer"]
+ [:style 3d :size 8]
+ [gnuplot-help-xpm
+ gnuplot-help-fn t "Look at the gnuplot process buffer"]
+ [gnuplot-doc-xpm
+ gnuplot-doc-fn t "Look at the gnuplot document"])
+ "The gnuplot toolbar.")
+
+(fset 'gnuplot-line-fn 'gnuplot-send-line-and-forward)
+(fset 'gnuplot-region-fn 'gnuplot-send-region-to-gnuplot)
+(fset 'gnuplot-buffer-fn 'gnuplot-send-buffer-to-gnuplot)
+(fset 'gnuplot-help-fn 'gnuplot-show-gnuplot-buffer)
+(fset 'gnuplot-doc-fn 'gnuplot-info-lookup-symbol)
+
+(defvar gnuplot-all-buttons-defined
+ (and (listp gnuplot-line-xpm) (listp gnuplot-region-xpm)
+ (listp gnuplot-buffer-xpm) (listp gnuplot-doc-xpm)
+ (listp gnuplot-help-xpm)))
+
+
+(defun gnuplot-make-toolbar-function ()
+ (if (and gnuplot-xemacs-p gnuplot-all-buttons-defined)
+ (progn
+ ;;(remove-specifier gnuplot-toolbar-use-toolbar (current-buffer))
+ (gnuplot-toolbar-setup-toolbar gnuplot-toolbar)
+ (add-spec-to-specifier (symbol-value gnuplot-toolbar-use-toolbar)
+ gnuplot-toolbar
+ (current-buffer) ))))
+
+;;(defalias 'gnuplot-make-toolbar 'gnuplot-make-toolbar-function)
+
+
+\f
+;;; --- syntax colorization, syntax table
+
+(defvar gnuplot-mode-syntax-table nil
+ "Syntax table in use in `gnuplot-mode' buffers.
+This is the same as the standard syntax table except that ' is a
+string quote character, ` and _ are word characters, and math
+operators are punctuation characters.")
+(if gnuplot-mode-syntax-table
+ ()
+ (setq gnuplot-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?* "." gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?+ "." gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?- "." gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?/ "." gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?% "." gnuplot-mode-syntax-table)
+ ;;(modify-syntax-entry ?& "." gnuplot-mode-syntax-table) ; rarely used
+ ;;(modify-syntax-entry ?^ "." gnuplot-mode-syntax-table) ; operators
+ ;;(modify-syntax-entry ?| "." gnuplot-mode-syntax-table) ; in gnuplot,
+ ;;(modify-syntax-entry ?& "." gnuplot-mode-syntax-table) ; (by me,
+ ;;(modify-syntax-entry ?? "." gnuplot-mode-syntax-table) ; anyway...)
+ ;;(modify-syntax-entry ?~ "." gnuplot-mode-syntax-table) ;
+ (modify-syntax-entry ?' "\"" gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?` "w" gnuplot-mode-syntax-table)
+ (modify-syntax-entry ?_ "w" gnuplot-mode-syntax-table))
+
+
+(defvar gnuplot-font-lock-keywords nil)
+(defvar gnuplot-font-lock-keywords-1 nil)
+(defvar gnuplot-font-lock-keywords-2 nil)
+
+;; used make-regexp to generate the regular expression strings
+;; this is all pattern based
+;; (insert (format "%s"
+;; (regexp-quote
+;; (make-regexp
+;; '("abs" "acos" "acosh" "arg" "asin" "asinh" "atan"
+;; "atan2" "atanh" "besj0" "besj1" "besy0" "besy1"
+;; "ceil" "cos" "cosh" "erf" "erfc" "exp" "floor"
+;; "gamma" "ibeta" "inverf" "igamma" "imag" "invnorm"
+;; "int" "lgamma" "log" "log10" "norm" "rand" "real"
+;; "sgn" "sin" "sinh" "sqrt" "tan" "tanh" "column"
+;; "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec"
+;; "tm_wday" "tm_yday" "tm_year" "valid")))))
+
+;; Set up colorization for gnuplot.
+;; This handles font-lock for emacs and xemacs.
+;; hilit19 is handled in `gnuplot-mode'.
+;; These regular expressions treat the gnuplot vocabulary as complete
+;; words. Although gnuplot will recognise unique abbreviations, these
+;; regular expressions will not."
+(if (featurep 'font-lock) ; <KL>
+ (setq gnuplot-font-lock-keywords
+ (list
+ ; comments
+ '("#.*$" . font-lock-comment-face)
+ ; quoted things
+ ;'("['\"]\\([^'\"\n]*\\)['\"]"
+ ; 1 font-lock-string-face)
+ '("'[^'\n]*'?" . font-lock-string-face)
+ ; stuff in brackets, sugg. by <LB>
+ '("\\[\\([^]]+\\)\\]"
+ 1 font-lock-reference-face)
+ ; variable/function definitions
+ '("\\(\\<[a-z]+[a-z_0-9()]*\\)[ \t]*="
+ 1 font-lock-variable-name-face)
+ ; built-in function names
+ (cons (concat
+ "\\<\\("
+ "a\\(bs\\|cosh\?\\|rg\\|sinh\?\\|"
+ "tan\\(\\|\[2h\]\\)\\)\\|"
+ "bes\\(j\[01\]\\|y\[01\]\\)\\|"
+ "c\\(eil\\|o\\(lumn\\|sh\?\\)\\)\\|"
+ "e\\(rfc\?\\|xp\\)\\|floor\\|gamma\\|"
+ "i\\(beta\\|gamma\\|mag\\|"
+ "n\\(t\\|v\\(erf\\|norm\\)\\)\\)\\|"
+ "l\\(gamma\\|og\\(\\|10\\)\\)\\|"
+ "norm\\|r\\(and\\|eal\\)\\|"
+ "s\\(gn\\|inh\?\\|qrt\\)\\|"
+ "t\\(anh\?\\|m_\\(hour\\|m\\(day\\|in\\|on\\)\\|"
+ "sec\\|wday\\|y\\(day\\|ear\\)\\)\\)\\|"
+ "valid"
+ "\\)\\>")
+ font-lock-function-name-face)
+ ; reserved words associated with
+ ; plotting <AL>
+ '("\\<\\(axes\\|every\\|index\\|l\\(\[stw\]\\|ine\\(style\\|type\\|width\\)\\)\\|notitle\\|p\\(\[st\]\\|oint\\(size\\|type\\)\\)\\|smooth\\|t\\(hru\\|itle\\)\\|using\\|with\\)\\>" . font-lock-type-face)
+ '("\\<\\(box\\(e\\(rrorbars\\|s\\)\\|xyerrorbars\\)\\|candlesticks\\|dots\\|errorbars\\|f\\(inancebars\\|steps\\)\\|histeps\\|impulses\\|lines\\(\\|points\\)\\|points\\|steps\\|vector\\|x\\(errorbars\\|yerrorbars\\)\\|yerrorbars\\)\\>" . font-lock-function-name-face)
+ ; (s)plot -- also thing (s)plotted
+ '("\\<s?plot\\>" . font-lock-keyword-face)
+ '("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
+ 1 font-lock-variable-name-face)
+ ; other common commands
+ ; miscellaneous commands
+ (cons (concat "\\<\\("
+ "bind\\|"
+ "c\\(d\\|lear\\)\\|exit\\|fit\\|h\\(elp\\|istory\\)\\|load\\|"
+ "p\\(ause\\|rint\\|wd\\)\\|quit\\|replot\\|"
+ "s\\(ave\\|et\\|how\\)\\|unset"
+ "\\)\\>\\|!.*$")
+ font-lock-reference-face))
+ gnuplot-font-lock-keywords-1 gnuplot-font-lock-keywords
+ gnuplot-font-lock-keywords-2 gnuplot-font-lock-keywords) )
+
+(if (and gnuplot-xemacs-p (featurep 'font-lock))
+ (put 'gnuplot-mode 'font-lock-defaults
+ '((gnuplot-font-lock-keywords
+ gnuplot-font-lock-keywords-1
+ gnuplot-font-lock-keywords-2)
+ t t ((?_ . "w")) )))
+
+;; these two lines get rid of an annoying compile time error
+;; message. that function gets non-trivially defalias-ed in
+;; gnuplot-toolbar.el
+;; (defun gnuplot-make-toolbar-dummy ())
+;; (defalias 'gnuplot-make-toolbar 'gnuplot-make-toolbar-dummy)
+
+\f
+;;; --- functions for sending commands to gnuplot
+
+(defun gnuplot-split-string (string)
+ "Break STRING at each carriage return, returning a list of lines."
+ (let ((list ()) (line "") (index 0))
+ (while (< index (length string))
+ (if (char-equal (elt string index) ?\n)
+ (setq list (append list (list line))
+ line "")
+ (setq line (concat line (char-to-string (elt string index)))))
+ (setq index (1+ index)) )
+ list))
+
+;; -- the calls to `sleep-for' are to allow enough time for gnuplot
+;; to write to the buffer before the next line is inserted
+;; -- note that the input string is split into lines and each line is
+;; sent to gnuplot individually. this is a bit slow, but it puts
+;; each line on the comint history.
+(defun gnuplot-send-string-to-gnuplot (string text)
+ "Sends STRING to the gnuplot program.
+If no gnuplot process exists, a new one is created. TEXT indicates
+the type of text being sent to gnuplot and is typically one of
+nil, 'line, 'region, 'buffer, or 'file. TEXT may be useful for
+functions in `gnuplot-after-plot-hook'. `gnuplot-after-plot-hook' is
+called by this function after all of STRING is sent to gnuplot."
+ (gnuplot-make-gnuplot-buffer) ; make sure a gnuplot buffer exists
+ (or gnuplot-program-version
+ (progn
+ (message "Determining gnuplot version number (sitting for 2 seconds)")
+ (gnuplot-fetch-version-number)
+ (sit-for 2)))
+ (setq gnuplot-comint-recent-buffer (current-buffer))
+ (if (equal gnuplot-display-process 'frame)
+ (or (and gnuplot-process-frame
+ (frame-live-p gnuplot-process-frame))
+ (let ((frame (selected-frame)))
+ (setq gnuplot-process-frame (make-frame))
+ (select-frame gnuplot-process-frame)
+ (switch-to-buffer gnuplot-buffer)
+ (delete-other-windows)
+ (select-frame frame))) )
+ (let ((buffer (current-buffer))
+ (gbuffer (get-buffer gnuplot-buffer))
+ (list (gnuplot-split-string string)))
+ (set-buffer gbuffer)
+ (goto-char (point-max))
+ ;; bruce asks: what is this next line for?
+ (set-marker (process-mark gnuplot-process) (point-marker))
+ (sleep-for (* 20 gnuplot-delay))
+ (while list
+ (insert (car list))
+ (comint-send-input)
+ (sleep-for gnuplot-delay)
+ (setq list (cdr list))
+ (goto-char (point-max)))
+ (set-buffer buffer)
+ (cond ((equal gnuplot-display-process 'window)
+ (select-window (display-buffer gbuffer))
+ (goto-char (point-max))
+ (or (pos-visible-in-window-p (point) (selected-window))
+ (recenter 5))
+ (other-window 1))
+ ((equal gnuplot-display-process 'frame)
+ ;;(raise-frame gnuplot-process-frame)
+ (select-frame gnuplot-process-frame)
+ (display-buffer gbuffer)
+ (goto-char (point-max))
+ (or (pos-visible-in-window-p (point) (selected-window))
+ (recenter 5))))
+ ;;(process-send-string gnuplot-program string)
+ (setq gnuplot-recently-sent text)
+ (run-hooks 'gnuplot-after-plot-hook)))
+
+(defun gnuplot-send-region-to-gnuplot (&optional begin end text)
+ "Sends a selected region to the gnuplot program.
+If BEGIN and END are not specified, point and mark are used. TEXT
+indicates the type of text being sent to gnuplot. This will be
+'region unless explicitly set by a function calling this one. Other
+typical values are of nil, 'line, 'buffer, or 'file. TEXT may be
+useful for function in `gnuplot-after-plot-hook'."
+ (interactive "r")
+ (let (string (txt (or text 'region)))
+ (cond ((equal major-mode 'gnuplot-mode)
+ (setq string (buffer-substring-no-properties begin end))
+ (if (string= (substring string -1) "\n") ()
+ (setq string (concat string "\n")))
+ (gnuplot-send-string-to-gnuplot string txt))
+ (t
+ (message (concat "You can only send regions from "
+ "gnuplot-mode buffers to gnuplot."))))))
+
+(defun gnuplot-send-line-to-gnuplot ()
+ "Sends the current line to the gnuplot program.
+Respects continuation lines.
+This sets `gnuplot-recently-sent' to 'line."
+ (interactive)
+ (cond ((equal major-mode 'gnuplot-mode)
+ (let ((start (save-excursion (beginning-of-line) (point-marker)))
+ end
+ ;(end (save-excursion (beginning-of-line 2) (point-marker)))
+ )
+ (save-excursion
+ (goto-char start)
+ (end-of-line)
+ (backward-char 1)
+ (while (looking-at "\\\\") ; go to end of last continuation line
+ (end-of-line 2)
+ (backward-char 1))
+ (beginning-of-line 2)
+ (setq end (point-marker)))
+ (if (not (string-match "\\`\\s-*\\'"
+ (buffer-substring-no-properties start end)))
+ (gnuplot-send-region-to-gnuplot start end 'line))
+ end))
+ (t
+ (message "You can only send lines in gnuplot-mode buffers to gnuplot.")
+ nil)))
+
+;; I chose a very easy to type but slightly non-mnemonic key-binding
+;; for this (C-c C-v). It seems like the kind of thing one would want
+;; to do repeatedly without incurring RSI. 8^)
+(defun gnuplot-send-line-and-forward (&optional num)
+ "Call `gnuplot-send-line-to-gnuplot' and move forward 1 line.
+You can use a numeric prefix to send more than one line. Blank lines and
+lines with only comments are skipped when moving forward."
+ (interactive "p")
+ (let (end)
+ (while (> num 0)
+ (setq end (gnuplot-send-line-to-gnuplot))
+ (goto-char end)
+ (backward-char 1) ; <AR>
+ (gnuplot-forward-script-line 1)
+ (setq num (1- num)))))
+
+
+(defun gnuplot-forward-script-line (&optional num) ; <SE>
+ "Move forward my NUM script lines.
+Blank lines and commented lines are not included in the NUM count."
+ (interactive "p")
+ (while (> num 0)
+ (and (not (eobp)) (forward-line 1))
+ (while (and (not (eobp))
+ (or (looking-at "^\\s-*$")
+ (looking-at "^\\s-*#")))
+ (forward-line 1))
+ (setq num (1- num))) )
+
+(defun gnuplot-send-buffer-to-gnuplot ()
+ "Sends the entire buffer to the gnuplot program.
+This sets `gnuplot-recently-sent' to 'buffer."
+ (interactive)
+ (if (equal major-mode 'gnuplot-mode)
+ (gnuplot-send-region-to-gnuplot (point-min) (point-max) 'buffer)
+ (message "You can only send gnuplot-mode buffers to gnuplot.")))
+
+(defun gnuplot-send-file-to-gnuplot ()
+ "Sends a selected file to the gnuplot program using the \"load\" command.
+This sets `gnuplot-recently-sent' to 'file."
+ (interactive)
+ (let ((string (read-file-name "Name of file to send to gnuplot > " nil nil t)))
+ (setq string (concat "load '" (expand-file-name string) "'\n"))
+ (message "%S" string)
+ (gnuplot-make-gnuplot-buffer) ; make sure a gnuplot buffer exists
+ (gnuplot-send-string-to-gnuplot string 'file)))
+
+;; suggested by <JS>
+(defun gnuplot-plot-from-comint ()
+ "Send the contents of a script to gnuplot from the process buffer.
+This inserts the contents of the most recently used gnuplot script
+into the process buffer and sends those lines to gnuplot. It does
+this by copying the script line by line."
+ (interactive)
+ (if (equal major-mode 'comint-mode)
+ (let (string list (buffer (current-buffer)))
+ (set-buffer gnuplot-comint-recent-buffer)
+ (setq string (buffer-substring-no-properties (point-min) (point-max))
+ string (concat string "\n")
+ list (gnuplot-split-string string))
+ (set-buffer buffer)
+ (while list
+ (insert (car list))
+ (comint-send-input)
+ (sleep-for gnuplot-delay)
+ (setq list (cdr list)))
+ (comint-send-input))
+ (message
+ "`gnuplot-plot-from-comint' only works in the gnuplot process buffer")))
+
+(defun gnuplot-save-and-plot-from-comint ()
+ "Send a current script to gnuplot from the process buffer.
+This sends the most recently used gnuplot script to gnuplot using the
+\"load\" command. This function first saves the script buffer to a
+file, prompting for a filename if one is not associated with the script
+buffer. Then it sends a load command to gnuplot using the name of the
+file visited by the script buffer."
+ (interactive)
+ (if (equal major-mode 'comint-mode)
+ (let (fname (buffer (current-buffer)))
+ (set-buffer gnuplot-comint-recent-buffer)
+ (save-buffer)
+ (setq fname (buffer-file-name))
+ (set-buffer buffer)
+ (goto-char (point-max))
+ (insert (format "load '%s'" fname))
+ (comint-send-input))
+ (message (concat "`gnuplot-save-and-plot-from-comint' only works "
+ "in the gnuplot process buffer"))))
+
+
+(defun gnuplot-trim-gnuplot-buffer ()
+ "Trim lines form the beginning of the *gnuplot* buffer.
+This keeps that buffer from growing excessively in size. Normally,
+this function is attached to `gnuplot-after-plot-hook'"
+ (if (> gnuplot-buffer-max-size 0)
+ (save-excursion
+ (set-buffer gnuplot-buffer)
+ (let ((nlines (count-lines (point-min) (point-max)))
+ (kill-whole-line t))
+ (while (> nlines gnuplot-buffer-max-size)
+ (goto-char (point-min))
+ (kill-line)
+ (setq nlines (1- nlines)))
+ (goto-char (point-max)) ))))
+(add-hook 'gnuplot-after-plot-hook 'gnuplot-trim-gnuplot-buffer nil nil)
+
+\f
+;;; --- functions controlling the gnuplot process
+
+;; use of comint-setup-hook suggested by <DB>
+(defun gnuplot-comint-start-function ()
+ "Function run when comint/gnuplot started.
+This sets font-lock and keyword completion in the comint/gnuplot
+buffer. Further customization is possible via
+`gnuplot-comint-setup-hook'."
+ ;;(if (not (fboundp 'hilit-set-mode-patterns))
+ (if (featurep 'font-lock)
+ (progn
+ (make-variable-buffer-local 'font-lock-defaults)
+ (setq font-lock-defaults '(gnuplot-font-lock-keywords t t))
+ (if gnuplot-xemacs-p (turn-on-font-lock))))
+ ;;(if (featurep 'kw-compl)
+ ;; (progn
+ ;; (setq kw-compl-list gnuplot-keywords
+ ;; kw-compl-upper-case nil)
+ ;; (define-key comint-mode-map "\M-\r" 'kw-compl-abbrev)))
+ (define-key comint-mode-map "\M-\C-p" 'gnuplot-plot-from-comint)
+ (define-key comint-mode-map "\M-\C-f" 'gnuplot-save-and-plot-from-comint)
+ (define-key comint-mode-map "\C-d" 'gnuplot-delchar-or-maybe-eof)
+ (define-key comint-mode-map "\M-\r" 'gnuplot-complete-keyword)
+ (define-key comint-mode-map "\M-\t" 'gnuplot-complete-keyword)
+ (run-hooks 'gnuplot-comint-setup-hook))
+
+(defun gnuplot-make-gnuplot-buffer ()
+ "Switch to the gnuplot program buffer or create one if none exists."
+ (or (and gnuplot-process (get-process gnuplot-process)
+ gnuplot-buffer (get-buffer gnuplot-buffer))
+ (progn
+ (message "Starting gnuplot plotting program...")
+ (setq gnuplot-buffer (make-comint gnuplot-process-name gnuplot-program)
+ gnuplot-process (get-process gnuplot-process-name))
+ (process-kill-without-query gnuplot-process nil)
+ (save-excursion
+ (set-buffer gnuplot-buffer)
+ (when (featurep 'xemacs)
+ ;; XEmacs needs the call to make-local-hook
+ (make-local-hook 'kill-buffer-hook))
+ (add-hook 'kill-buffer-hook 'gnuplot-close-down nil t)
+ (gnuplot-comint-start-function)
+ (make-local-variable 'comint-output-filter-functions)
+ (setq comint-output-filter-functions
+ (append comint-output-filter-functions
+ '(comint-postoutput-scroll-to-bottom
+ gnuplot-protect-prompt-fn)))
+ (message "Starting gnuplot plotting program...Done")))))
+
+
+(defun gnuplot-fetch-version-number ()
+ ;;(interactive)
+ (message "gnuplot-mode %s -- determining gnuplot version ......"
+ gnuplot-version)
+ (let* ((command (concat "echo \"show version\" | " gnuplot-program))
+ (process (start-process-shell-command "gnuplot-version"
+ "*gnuplot-version*"
+ command)))
+ (set-process-sentinel process 'gnuplot-determine-version-number)))
+
+(defun gnuplot-determine-version-number (process event)
+ (save-excursion
+ (let (version)
+ (if (string-match "SPEEDBAR" (format "%S" (current-buffer))) ;; <WZ>
+ (if (fboundp 'speedbar-switch-buffer-attached-frame)
+ (speedbar-switch-buffer-attached-frame "*gnuplot-version*")
+ (progn
+ (speedbar-select-attached-frame)
+ (switch-to-buffer "*gnuplot-version*")))
+ (switch-to-buffer "*gnuplot-version*"))
+ (goto-char (point-min))
+ (re-search-forward "[Vv]ersion\\s-+" (point-max) t)
+ (if (looking-at "[0-9]\\.[0-9]+")
+ (setq version (match-string 0))
+ (setq version "3.7"))
+ (kill-buffer (get-buffer "*gnuplot-version*"))
+ ;;(and (interactive-p) (message "You are using gnuplot version %s" version))
+ (setq gnuplot-program-version version
+ gnuplot-three-eight-p (>= (string-to-number gnuplot-program-version) 3.8))
+ (gnuplot-setup-menu-and-toolbar)
+ )))
+
+(defun gnuplot-setup-menu-and-toolbar ()
+ ;; set up the menubar (possibly dependent on version number)
+ (gnuplot-setup-menubar)
+ ;; set up the toolbar (possibly dependent on version number)
+ (if (and gnuplot-xemacs-p gnuplot-toolbar-display-flag)
+ (condition-case () ; deal with the toolbar
+ (and (require 'toolbar)
+ (require 'xpm)
+ (gnuplot-make-toolbar-function))
+ (error nil)))
+ (message "gnuplot-mode %s (gnuplot %s) -- report bugs with %S"
+ gnuplot-version gnuplot-program-version
+ (substitute-command-keys "\\[gnuplot-bug-report]"))
+ )
+
+
+
+;; (defun gnuplot-determine-gnuplot-version ()
+;; "Figure out which version of gnuplot we are running."
+;; (interactive)
+;; (cond (gnuplot-gnuplot-version
+;; (setq comint-process-echoes nil ;; t
+;; gnuplot-program-version gnuplot-gnuplot-version))
+;; (t
+;; (let ((counter 0))
+;; (save-excursion
+;; (set-buffer gnuplot-buffer)
+;; (goto-char (point-min))
+;; ;; it may take a while for emacs to display the gnuplot start-up
+;; ;; message. since we need this to determine the version number
+;; ;; and hence the value of `comint-process-echoes', we must wait
+;; ;; for this to happen.
+;; (while (and (equal (point-max) (point-min)) (< 10 counter))
+;; (1+ counter)
+;; (sleep-for 0.1))
+;; (if (re-search-forward "[Vv]ersion" (point-max) t)
+;; (progn
+;; (cond ((or (looking-at "\\s-*3.8") (looking-at "\\s-*4"))
+;; (setq comint-process-echoes nil ;; t
+;; gnuplot-program-version "3.8"))
+;; ((looking-at "\\s-*3.7")
+;; (setq comint-process-echoes nil ;; t
+;; gnuplot-program-version "3.7"))
+;; (t
+;; (setq comint-process-echoes nil
+;; gnuplot-program-version "3.5") )))
+;; (setq comint-process-echoes gnuplot-echo-command-line-flag)))))))
+
+(defun gnuplot-protect-prompt-fn (string)
+ "Prevent the Gnuplot prompt from being deleted or overwritten.
+STRING is the text as originally inserted in the comint buffer."
+ (save-excursion
+ (let ((b (progn
+ (goto-char (point-max))
+ (beginning-of-line)
+ (point)))
+ e)
+ (if (re-search-forward "^gnuplot> " (point-max) t)
+ (progn
+ (setq e (point))
+ (put-text-property b e 'rear-nonsticky '(read-only intangible face))
+ (put-text-property b e 'intangible t)
+ (put-text-property b e 'face 'gnuplot-prompt-face)
+ ;;(put-text-property b e 'read-only t)
+ )) )))
+
+(defun gnuplot-close-down ()
+ "Tidy up when deleting the gnuplot buffer."
+ (if (eq (process-status gnuplot-process) 'run);; <SE>
+ (kill-process gnuplot-process))
+ (setq gnuplot-process nil
+ gnuplot-buffer nil))
+
+(defun gnuplot-delchar-or-maybe-eof (arg)
+ "Delete ARG characters forward, or (if at eob) send an EOF to subprocess.
+This is very similar to `comint-delchar-or-maybe-eof'."
+ (interactive "p")
+ (if (eobp)
+ (gnuplot-kill-gnuplot-buffer)
+ (delete-char arg)))
+
+(defun gnuplot-kill-gnuplot-buffer ()
+ "Kill the gnuplot process and its display buffers."
+ (interactive)
+ (if (and gnuplot-process
+ (eq (process-status gnuplot-process) 'run)) ;; <SE>
+ (kill-process gnuplot-process))
+ (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
+ (progn
+ (if (one-window-p) ()
+ (delete-window (get-buffer-window gnuplot-buffer)))
+ (kill-buffer gnuplot-buffer)))
+ (setq gnuplot-process nil
+ gnuplot-buffer nil))
+
+
+(defun gnuplot-show-gnuplot-buffer ()
+ "Switch to the buffer containing the gnuplot process.
+When `gnuplot-display-process' is nil this will switch to
+the gnuplot process buffer. When that variable is non-nil, the
+gnuplot process buffer will be displayed in a window."
+ (interactive)
+ (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
+ (cond ((equal gnuplot-display-process 'window)
+ (switch-to-buffer-other-window gnuplot-buffer))
+ ((equal gnuplot-display-process 'frame)
+ (or (and gnuplot-process-frame
+ (frame-live-p gnuplot-process-frame))
+ (setq gnuplot-process-frame (make-frame)))
+ (raise-frame gnuplot-process-frame)
+ (select-frame gnuplot-process-frame)
+ (switch-to-buffer gnuplot-buffer))
+ (t
+ (switch-to-buffer gnuplot-buffer)))
+ (message "There is not an active Gnuplot process.")))
+
+\f
+;;; --- miscellaneous functions: insert file name, indentation, negation
+
+(defun gnuplot-insert-filename ()
+ "Insert a filename at point, prompting for name in the minibuffer.
+This inserts a filename relative to the buffer's default directory.
+Uses completion and the value of `gnuplot-quote-character'.
+Bound to \\[gnuplot-insert-filename]"
+ (interactive)
+ (insert gnuplot-quote-character
+ (file-relative-name (read-file-name "Filename > " "")
+ default-directory)
+ gnuplot-quote-character) )
+
+;; is this more complicated than it need be ...?
+;; this doesn't quite do plot lists correctly:
+;; plot sin(x),\
+;; cos(x) # ok
+;; set auto # not ok, should be under "p" (but does it matter?)
+
+(defun gnuplot-indent-line ()
+ "Set indentation in gnuplot buffer.
+For most lines, set indentation to previous level of indentation.
+Attempt to add additional indentation for continued plot and splot
+lines."
+ (interactive)
+ (let ((indent 0))
+ (save-excursion
+ (save-excursion
+ (end-of-line 0)
+ (if (bobp) ()
+ (re-search-backward "^[ \t]*." (point-min) "to_limit")
+ (back-to-indentation)
+ (setq indent (current-column))
+ (if (looking-at "s?pl\\(o?\\|\\(ot\\)?\\)[ \t]+.?")
+ (let ((plus (1- (length (match-string 0)))))
+ (end-of-line)
+ (backward-char 1)
+ (if (looking-at (regexp-quote "\\"))
+ (setq indent (+ plus indent)))))))
+ (if (= (current-indentation) indent)
+ ()
+ (beginning-of-line)
+ (delete-horizontal-space)
+ (insert (make-string indent ? ))))
+ (if (looking-at "[ \t]+$")
+ (end-of-line))))
+
+;; FWIW, here are all the options which can be negated:
+;; (insert (format "%s"
+;; (regexp-quote
+;; (make-regexp
+;; '("arrow" "autoscale" "border" "clabel" "clip"
+;; "contour" "dgrid3d" "grid" "hidden3d" "key" "label"
+;; "linestyle" "logscale" "multiplot" "mxtics"
+;; "mytics" "mztics" "mx2tics" "my2tics"
+;; "offsets" "polar" "surface" "timestamp" "title"
+;; "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics"
+;; "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics"
+;; "xtics" "ytics" "ztics" "x2tics" "y2tics"
+;; "xzeroaxis" "yzeroaxis" "zzeroaxis" "x2zeroaxis"
+;; "y2zeroaxis")))))
+
+(defun gnuplot-negate-option ()
+ "Append \"no\" to or remove \"no\" from the set option on the current line.
+This checks if the set option is one which has a negated form."
+ (interactive)
+ (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+ (end (save-excursion (end-of-line) (point-marker)))
+ (regex "a\\(rrow\\|utoscale\\)\\|border\\|c\\(l\\(abel\\|ip\\)\\|ontour\\)\\|dgrid3d\\|grid\\|hi\\(dden3d\\|storysize\\)\\|key\\|l\\(abel\\|inestyle\\|ogscale\\)\\|m\\(ouse\\|ultiplot\\|x\\(2tics\\|tics\\)\\|y\\(2tics\\|tics\\)\\|ztics\\)\\|offsets\\|polar\\|surface\\|ti\\(mestamp\\|tle\\)\\|x\\(2\\(dtics\\|mtics\\|tics\\|zeroaxis\\)\\|dtics\\|mtics\\|tics\\|zeroaxis\\)\\|y\\(2\\(dtics\\|mtics\\|tics\\|zeroaxis\\)\\|dtics\\|mtics\\|tics\\|zeroaxis\\)\\|z\\(dtics\\|mtics\\|tics\\|zeroaxis\\)"))
+ (save-excursion
+ (if (search-backward ";" begin t)
+ (progn (forward-char 1) (setq begin (point-marker))))
+ (if (search-forward ";" end t)
+ (progn (forward-char -1) (setq end (point-marker))))
+ (goto-char begin)
+ (skip-syntax-forward "-" end)
+ (if (looking-at "\\(un\\)?set\\s-+")
+ (cond ((and gnuplot-program-version
+ (> (string-to-number gnuplot-program-version) 3.7))
+ (cond ((looking-at "unset")
+ (delete-char 2))
+ ((looking-at (concat "set\\s-+\\(" regex "\\)"))
+ (insert "un"))
+ (t
+ (message "There is not a negatable set option on this line"))))
+ (t
+ (goto-char (match-end 0))
+ (if (> (point) end) (goto-char end))
+ (cond ((looking-at "no")
+ (delete-char 2))
+ ((looking-at regex)
+ (insert "no"))
+ (t
+ (message "There is not a negatable set option on this line")))))
+ (message "There is not a set option on this line")) )))
+
+;; (defun gnuplot-set-binding ()
+;; "Interactively select a key sequence for binding to a plot function.
+;; This is only useful in gnuplot 3.8 and for plot terminals which support
+;; key bindings (i.e. those covered by pm3d)."
+;; (interactive)
+;; (let ((keyseq (read-key-sequence "Choose a key sequence now"))
+;; (command (read-string "Bind to this command > ")))
+;; (setq keyseq (format "%S" keyseq))
+;; (string-match "keypress-event\\s-+" keyseq)
+;; (setq keyseq (substring keyseq (match-end 0) -2))
+;; ;; need to convert from emacs nomenclature to gnuplot. what a pain.
+;; (let* ((alist '(("backspace" . "Backspace") ("tab" . "Tab") ("linefeed" . "Linefeed")
+;; ("clear" . "Clear") ("return" . "Return") ("pause" . "Pause")
+;; ("scroll-lock" . "Scroll_Lock") ("SysReq" . "sys-req")
+;; ("escape" . "Escape") ("delete" . "Delete") ("home" . "Home")
+;; ("left" . "Left") ("right" . "Right") ("up" . "Up") ("down" . "Down")
+;; ("prior" . "PageUp") ("next" . "PageDown") ("end" . "End")
+;; ("begin". "Begin")))
+;; (match (assoc keyseq alist)))
+;; (if match (setq keyseq (cdr match)))
+;;
+;; (insert (format "bind \"%s\" \"%s\"" keyseq command)))))
+
+
+(defun gnuplot-customize ()
+ "Customize `gnuplot-mode'."
+ (interactive)
+ (if (fboundp 'customize-group)
+ (customize-group "gnuplot")
+ (message "The Custom library is not installed.")))
+
+
+\f
+;;; --- help from the info file, keyword list + completion, insert function
+
+
+;; set up stuff for info-look (as suggested by <SE>)
+;; modified with suggestion from <MS>
+(defun gnuplot-setup-info-look ()
+ "Setup info-look in the gnuplot buffer.
+Also set the variable `gnuplot-keywords' and do something sensible if
+info-look was not available.
+See the comments in `gnuplot-info-hook'."
+ (interactive)
+ (setq gnuplot-keywords-pending nil)
+ (if (featurep 'info-look)
+ (progn
+ (cond ((boundp 'info-lookup-symbol-alist) ; older version
+ (setq info-lookup-symbol-alist
+ (append
+ info-lookup-symbol-alist
+ '((gnuplot-mode
+ "[a-zA-Z][_a-zA-Z0-9]*" nil
+ (("(gnuplot)Top" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)Commands" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)Functions" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)plot" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)set-show" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)data-file" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)smooth" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)style" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)terminal" nil "[_a-zA-Z0-9]+")
+ ;;("(gnuplot)General Index" nil "[_a-zA-Z0-9]+")
+ ) "[_a-zA-Z0-9]+" ))) ))
+ (t ; newer version
+ (info-lookup-maybe-add-help
+ :mode 'gnuplot-mode :topic 'symbol
+ :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+ :doc-spec '(("(gnuplot)Top" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)Commands" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)Functions" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)plot" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)set-show" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)data-file" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)smooth" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)style" nil "[_a-zA-Z0-9]+")
+ ("(gnuplot)terminal" nil "[_a-zA-Z0-9]+")
+ ) )))
+ ;; this hook is my best way of working with info-look and
+ ;; allowing multiple versions of the gnuplot-info file.
+ ;; yes, this is a hassle.
+ (run-hooks 'gnuplot-info-hook)
+ (let ((there (bufferp (get-buffer "*info*"))))
+ (info-lookup-setup-mode 'symbol 'gnuplot-mode)
+ (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
+ ;; why are these buffers here? I think that the general
+ ;; user will not want them lying around
+ (and (get-buffer "info dir") (kill-buffer "info dir"))
+ (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
+ (setq gnuplot-keywords (gnuplot-set-keywords-list))
+ )
+
+ ;; or do something sensible if info-look is not installed
+ (defun info-lookup-interactive-arguments (symbol)
+ (message
+ "Help is not available. The gnuplot info file could not be found.")
+ (list nil nil))) )
+
+
+(defun gnuplot-set-keywords-list ()
+ "Set `gnuplot-keywords' from `info-lookup-cache'.
+Return a list of keywords."
+ (let* ((list (cdr (assoc 'symbol info-lookup-cache)))
+ (list (cdr (cdr (assoc 'gnuplot-mode list))))
+ (list (car list))
+ (store ()) item)
+ (while list
+ (setq item (car (car list))
+ item (format "%s" item) ; keep this line for the sake of
+ store (append (list item) store) ; info-look.el w/o my patch
+ list (cdr list)))
+ (delete "nil" store)
+ store ))
+
+
+(defun gnuplot-complete-keyword ()
+ "Perform completion on keyword preceding point.
+This is a pretty simple minded completion function. It is loosely
+adapted from `lisp-complete-symbol'."
+ (interactive)
+ (if gnuplot-keywords-pending ; <HW>
+ (gnuplot-setup-info-look))
+ (let* ((end (point))
+ (beg (unwind-protect (save-excursion (backward-sexp 1) (point))))
+ (patt (buffer-substring beg end))
+ (pattern (if (string-match "\\([^ \t]*\\)\\s-+$" patt)
+ (match-string 1 patt) patt))
+ (alist (mapcar 'list gnuplot-keywords))
+ (completion (try-completion pattern alist)))
+ (cond ((eq completion t))
+ ((null completion)
+ (message "No gnuplot keywords complete \"%s\"" pattern))
+ (t
+ (when (not (string= pattern completion))
+ (delete-region beg end)
+ (insert completion))
+ (let* ((list (all-completions pattern alist))
+ (mess (format "%S could be one of %S" pattern list))
+ (orig (current-buffer))
+ (buff (get-buffer-create " *gnuplot-completions*")))
+ (if (= (length list) 1) (insert " "))
+ (if (< (length mess) (frame-width))
+ (if (> (length list) 1) (message mess))
+ (switch-to-buffer-other-window buff)
+ (insert mess)
+ (fill-region (point-min) (point-max))
+ (goto-char (point-min))
+ (enlarge-window
+ (+ 2 (- (count-lines (point-min) (point-max))
+ (window-height))))
+ (sit-for (max (length list) 15))
+ (switch-to-buffer orig)
+ (kill-buffer buff)
+ (delete-other-windows) ))) )))
+
+(defun gnuplot-info-lookup-symbol (symbol &optional mode)
+ "Wrapper for `info-lookup-symbol'.
+Takes SYMBOL and MODE as arguments exactly as `info-lookup-symbol'.
+After doing the info lookup, this displays the info file in a window
+frame as specified by the value of `gnuplot-info-display'. If
+`gnuplot-info-display' is 'window, then the window will be shrunk to
+the size of the info entry if it is smaller than half the height of
+the frame."
+ (interactive
+ (cond (gnuplot-keywords
+ (info-lookup-interactive-arguments 'symbol))
+ (gnuplot-keywords-pending ; <HW>
+ (gnuplot-setup-info-look)
+ (info-lookup-interactive-arguments 'symbol))
+ (t
+ (list nil (message
+ "Help is not available. The gnuplot info file could not be found.")))))
+ (if (and (featurep 'info-look) gnuplot-keywords)
+ (let ((buff (current-buffer))
+ (info-lookup-other-window-flag
+ (if gnuplot-info-display t nil)))
+ (if symbol () (setq symbol "Commands"))
+ (info-lookup-symbol symbol mode)
+ (cond ((equal gnuplot-info-display 'window)
+ (let ((sw (selected-window))
+ (window-min-height 2))
+ (other-window 1)
+ (enlarge-window
+ (min (- (count-lines (point-min) (point-max)) (window-height))
+ (- (/ (frame-height) 2) (window-height))))
+ (select-window sw)))
+ ((equal gnuplot-info-display 'frame)
+ (switch-to-buffer buff)
+ (delete-other-windows)
+ (or (and gnuplot-info-frame
+ (frame-live-p gnuplot-info-frame))
+ (setq gnuplot-info-frame (make-frame)))
+ (select-frame gnuplot-info-frame)
+ (raise-frame gnuplot-info-frame)
+ (if gnuplot-xemacs-p (setq toolbar-info-frame gnuplot-info-frame))
+ (switch-to-buffer "*info*") )) )))
+
+
+(defun gnuplot-insert (string)
+ "Insert STRING at point and display help for for STRING.
+Help is not shown if `gnuplot-insertions-show-help-flag' is nil. The
+help shown is for STRING unless STRING begins with the word \"set\" or
+\"show\", in which case help is shown for the thing being set or
+shown."
+ (interactive)
+ (cond ((and (not gnuplot-three-eight-p)
+ (string-match "\\(emf\\|p\\(alette\\|m3d\\)\\|vgagl\\)" string))
+ (message "%S is an option introduced in gnuplot 3.8 (You are using %s)"
+ string gnuplot-program-version) )
+ (t
+ (insert string)
+ (let ((topic string) term)
+ (if (string-match
+ "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
+ string)
+ (progn
+ (setq topic (downcase (match-string 2 string))
+ term (match-string 4 string))
+ (if (string= topic "terminal") (setq topic (downcase term)))))
+ (cond ((and (fboundp 'gnuplot-gui-set-options-and-insert)
+ gnuplot-gui-popup-flag)
+ (gnuplot-gui-set-options-and-insert))
+ (gnuplot-insertions-show-help-flag
+ (if gnuplot-keywords-pending ; <HW>
+ (gnuplot-setup-info-look))
+ (gnuplot-info-lookup-symbol topic)) ) )) ) )
+
+(defun gnuplot-toggle-info-display ()
+ (interactive)
+ (setq gnuplot-insertions-show-help-flag (not gnuplot-insertions-show-help-flag))
+ (message (if gnuplot-insertions-show-help-flag
+ "Help will be displayed after insertions."
+ "Help no longer displayed after insertions.")))
+
+\f
+;;; --- bug reports
+;; grep '(defcustom' gnuplot.el gnuplot-gui.el | awk '{print $2}'
+(defun gnuplot-bug-report ()
+ "Submit a bug report about `gnuplot-mode' by email.
+Please do not send any bug reports about gnuplot itself to the
+maintainer of `gnuplot-mode'."
+ (interactive)
+ (let ((line (make-string 62 ?-)))
+ (require 'reporter)
+ (and (y-or-n-p
+ "Do you really want to submit an email report about gnuplot? ")
+ (y-or-n-p
+ (concat "Variable values will be written to the message. "
+ "Don't erase them. OK? "))
+ (reporter-submit-bug-report
+ (format "%s <%s>" gnuplot-maintainer gnuplot-maintainer-email)
+ (format "gnuplot-mode (version %s)" gnuplot-version)
+ (append ; variables to display values of in mail
+ '(gnuplot-mode-hook
+ gnuplot-load-hook
+ gnuplot-after-plot-hook
+ gnuplot-info-hook
+ gnuplot-comint-setup-hook
+ gnuplot-program
+ gnuplot-program-version
+ gnuplot-process-name
+ gnuplot-gnuplot-buffer
+ gnuplot-display-process
+ gnuplot-info-display
+ gnuplot-echo-command-line-flag
+ gnuplot-insertions-show-help-flag
+ gnuplot-delay
+ gnuplot-quote-character
+ gnuplot-keywords-when
+ ;;gnuplot-insertions-menu-flag
+ ;;gnuplot-insertions-adornments
+ ;;gnuplot-insertions-plot-options
+ ;;gnuplot-insertions-terminal
+ ;;gnuplot-insertions-x-axis
+ ;;gnuplot-insertions-x2-axis
+ ;;gnuplot-insertions-y-axis
+ ;;gnuplot-insertions-y2-axis
+ ;;gnuplot-insertions-z-axis
+ ;;gnuplot-insertions-parametric-plots
+ ;;gnuplot-insertions-polar-plots
+ ;;gnuplot-insertions-surface-plots
+ gnuplot-toolbar-display-flag
+ gnuplot-toolbar-use-toolbar
+ gnuplot-gui-popup-flag
+ gnuplot-gui-frame-plist
+ gnuplot-gui-frame-parameters
+ gnuplot-gui-fontname-list
+ gnuplot-gui-plot-splot-fit-style
+ ;; plus a few more...
+ gnuplot-comint-recent-buffer
+ gnuplot-version
+ Info-directory-list
+ exec-path
+ features ))
+ nil ; pre-hooks
+ nil ; post-hooks
+ (concat line ; salutation
+ "\nInsert your description of the gnuplot-mode bug here.\n"
+ "Please be as specific as possible.\n\n"
+ "There are several known shortcomings of gnuplot-mode.\n"
+ "Many of these have to do with the complicated and inconsistent\n"
+ "syntax of gnuplot itself. See the document string for the\n"
+ "function `gnuplot-mode' (use `"
+ (substitute-command-keys "\\[describe-function]")
+ "') for details.\n\n"
+ "Note that this bug report form should be used for problems\n"
+ "with gnuplot-mode only. Problems with gnuplot itself should\n"
+ "be addressed directly to the developers of gnuplot.\n"
+ "The maintainer of gnuplot-mode will not field questions about\n"
+ "gnuplot itself. Thank you.\n"
+ line)
+ ))))
+
+
+\f
+;;; --- autoloaded functions: gnuplot-mode and gnuplot-make-buffer
+
+;;;###autoload
+(defun gnuplot-mode ()
+ "Major mode for editing and executing GNUPLOT scripts.
+This was written with version 3.7 of gnuplot in mind but it should
+work fine with version 3.5 and the various 3.6 beta versions.
+
+Report bugs in `gnuplot-mode' using \\[gnuplot-bug-report].
+
+ ------O------
+
+The help functions, keyword completion, and several other features
+depend upon having the info file properly installed. The info file
+can be made in the document directory of the gnuplot distribution or
+is available at the `gnuplot-mode' web page:
+ http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/
+
+If the help function does not work properly, you may have an older
+version of the gnuplot info file. Try the suggestion in the document
+string for the variable `gnuplot-info-hook'. See the `gnuplot-mode'
+web page for more details.
+
+ ------O------
+
+There are several known shortcomings of `gnuplot-mode', version 0.5g
+and up. Many of the shortcomings involve the graphical interface
+(refered to as the GUI) to setting arguments to plot options. Here is
+a list:
+
+ 1. Currently there is no way for `gnuplot-mode' to know if information
+ sent to gnuplot was correctly plotted.
+ 2. Indentation is sometimes a bit flaky.
+ 3. \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
+ a bit flaky. Their arguments may not be read correctly from
+ existing text, and continuation lines (common for plot and splot)
+ are not supported.
+ 4. The GUI does not know how to read from continuation lines.
+ 5. Comma separated position arguments to plot options are
+ unsupported in the GUI. Colon separated datafile modifiers (used
+ for plot, splot, and fit) are not supported either. Arguments
+ not yet supported by the GUI generate messages printed in grey
+ text.
+ 6. The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
+ unsupported.
+
+ ------O------
+
+ Key bindings:
+ \\{gnuplot-mode-map}"
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map gnuplot-mode-map)
+ (setq major-mode 'gnuplot-mode
+ mode-name "Gnuplot")
+ (set (make-local-variable 'comment-start) "# ")
+ (set (make-local-variable 'comment-end) "")
+ (set (make-local-variable 'comment-column) 32)
+ (set (make-local-variable 'comment-start-skip) "#[ \t]*")
+ (set (make-local-variable 'indent-line-function) 'gnuplot-indent-line)
+ (set-syntax-table gnuplot-mode-syntax-table)
+ (if (or (fboundp 'hilit-set-mode-patterns)
+ (equal gnuplot-keywords-when 'immediately)) ; <HW>
+ (gnuplot-setup-info-look)) ;; <SE>
+ (if (fboundp 'hilit-set-mode-patterns) ; deal with hilit19 (ho hum!)
+ (let ((keywords (concat "\\b\\(" (mapconcat 'identity
+ gnuplot-keywords "\\|")
+ "\\)\\b")))
+ (hilit-set-mode-patterns
+ 'gnuplot-mode
+ `(("#.*$" nil comment)
+ ("\\([a-zA-Z0-9_-]+\\)\\(([^)]*)\\)?\\s *=" nil define)
+ ,(list keywords 'nil 'keyword)
+ (hilit-string-find ?\\ string)
+ ))) )
+ ;;(if (featurep 'kw-compl) ; old-style keyword completion
+ ;; (setq kw-compl-list gnuplot-keywords
+ ;; kw-compl-upper-case nil)) ; gnuplot keywords must be lower case
+ (if gnuplot-xemacs-p ; deal with font-lock
+ (if (fboundp 'turn-on-font-lock) (turn-on-font-lock))
+ (progn
+ (make-variable-buffer-local 'font-lock-defaults)
+ (setq font-lock-defaults '(gnuplot-font-lock-keywords t t))))
+;; (if (and gnuplot-xemacs-p gnuplot-toolbar-display-flag)
+;; (condition-case () ; deal with the toolbar
+;; (and (require 'toolbar)
+;; (require 'xpm)
+;; (gnuplot-make-toolbar-function))
+;; (error nil)))
+ (if (fboundp 'widget-create) ; gunplot-gui
+ (condition-case ()
+ (require 'gnuplot-gui)
+ (error nil)))
+ (setq gnuplot-first-call nil ; a few more details ...
+ gnuplot-comint-recent-buffer (current-buffer)
+ comint-process-echoes gnuplot-echo-command-line-flag)
+ (run-hooks 'gnuplot-mode-hook)
+ ;; the first time we need to figure out which gnuplot we are running
+ (if gnuplot-program-version
+ (gnuplot-setup-menu-and-toolbar)
+ (gnuplot-fetch-version-number)))
+
+;;;###autoload
+(defun gnuplot-make-buffer ()
+ "Open a new buffer in `gnuplot-mode'.
+When invoked, it switches to a new, empty buffer visiting no file
+and then starts `gnuplot-mode'.
+
+It is convenient to bind this function to a global key sequence. For
+example, to make the F10 key open a gnuplot script buffer, put the
+following in your .emacs file:
+ (autoload 'gnuplot-make-buffer \"gnuplot\"
+ \"open a buffer in gnuplot mode\" t)
+ (global-set-key [(f10)] 'gnuplot-make-buffer)"
+ (interactive)
+ (switch-to-buffer gnuplot-gnuplot-buffer)
+ (gnuplot-mode))
+
+(defun gnuplot-show-version ()
+ "Show version number in echo area"
+ (interactive)
+ (message "gnuplot-mode %s -- URL: %s" gnuplot-version gnuplot-maintainer-url))
+
+(defun gnuplot-show-gnuplot-version ()
+ "Show gnuplot program and version number in echo area"
+ (interactive)
+ (message "You are calling gnuplot %s as %s" gnuplot-program-version gnuplot-program))
+
+
+;;; That's it! ----------------------------------------------------------------
+
+\f
+;;; --- final chores: provide 'gnuplot and run load-hook
+;; provide before run-hooks suggested by <DB>
+(provide 'gnuplot)
+(run-hooks 'gnuplot-load-hook)
+
+;;;============================================================================
+;;;
+;;; gnuplot.el ends here
--- /dev/null
+%
+% Encoding for ISO-8859-1 (also called Latin1)
+%
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin1Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
+/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
+/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/yacute/thorn/ydieresis
+] def
--- /dev/null
+%
+% Encoding for ISO-8859-15 (also called Latin9)
+%
+/reencodeISO15 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin15Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin15Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/space/exclamdown/cent/sterling/Euro/yen/Scaron
+/section/scaron/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/Zcaron/mu/paragraph/periodcentered/zcaron/onesuperior/ordmasculine
+/guillemotright/OE/oe/Ydieresis/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
+/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/yacute/thorn/ydieresis
+] def
--- /dev/null
+%
+% Encoding for ISO-8859-2 (also called Latin2), with
+% minor differences to "true" ISO-8859-2 (*commaaccent
+% instead of *cedilla for sStT -> incorrect in ISO-8859-2,
+% the standard will probably be modified in this respect)
+% Levente Novak <novak@jaguar.dote.hu>
+
+/reencodeISO2 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin2Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin2Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M
+/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/nbspace/Aogonek/breve/Lslash/currency/Lcaron/Sacute/section
+/dieresis/Scaron/Scommaaccent/Tcaron/Zacute/hyphen/Zcaron/Zdotaccent
+/degree/aogonek/ogonek/lslash/acute/lcaron/sacute/caron/cedilla
+/scaron/scommaaccent/tcaron/zacute/hungarumlaut/zcaron/zdotaccent
+/Racute/Aacute/Acircumflex/Abreve/Adieresis/Lacute/Cacute/Ccedilla
+/Ccaron/Eacute/Eogonek/Edieresis/Ecaron/Iacute/Icircumflex/Dcaron
+/Dcroat/Nacute/Ncaron/Oacute/Ocircumflex/Ohungarumlaut/Odieresis
+/multiply/Rcaron/Uring/Uacute/Uhungarumlaut/Udieresis/Yacute
+/Tcommaaccent/germandbls/racute/aacute/acircumflex/abreve/adieresis
+/lacute/cacute/ccedilla/ccaron/eacute/eogonek/edieresis/ecaron
+/iacute/icircumflex/dcaron/dcroat/nacute/ncaron/oacute/ocircumflex
+/ohungarumlaut/odieresis/divide/rcaron/uring/uacute/uhungarumlaut
+/udieresis/yacute/tcommaaccent/dotaccent
+] def
--- /dev/null
+%
+% Encoding for ISO_8859_9 (also called Latin5)
+% Plus code points 80-9F used in Codepage 1254
+%
+/reencodeISO9 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin5Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin5Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/Euro/.notdef/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef/.notdef
+/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef/Ydieresis
+/.notdef/space/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/acute/mu/paragraph/bullet/cedilla/onesuperior/ordmasculine
+/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Gbreve/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Idotaccent
+/Scedilla/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/gbreve/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/dotlessi/scedilla/ydieresis
+] def
--- /dev/null
+# This document was obtained from http://www.adobe.com/devnet/opentype/archives/aglfn.txt
+# ###################################################################################
+# Copyright (c) 2003,2005,2006,2007 Adobe Systems Incorporated
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this documentation file to use, copy, publish, distribute,
+# sublicense, and/or sell copies of the documentation, and to permit
+# others to do the same, provided that:
+# - No modification, editing or other alteration of this document is
+# allowed; and
+# - The above copyright notice and this permission notice shall be
+# included in all copies of the documentation.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this documentation file, to create their own derivative works
+# from the content of this document to use, copy, publish, distribute,
+# sublicense, and/or sell the derivative works, and to permit others to do
+# the same, provided that the derived work is not represented as being a
+# copy or version of this document.
+#
+# Adobe shall not be liable to any party for any loss of revenue or profit
+# or for indirect, incidental, special, consequential, or other similar
+# damages, whether based on tort (including without limitation negligence
+# or strict liability), contract or other legal or equitable grounds even
+# if Adobe has been advised or had reason to know of the possibility of
+# such damages.Ê The Adobe materials are provided on an "AS IS" basis.Ê
+# Adobe specifically disclaims all express, statutory, or implied
+# warranties relating to the Adobe materials, including but not limited to
+# those concerning merchantability or fitness for a particular purpose or
+# non-infringement of any third party rights regarding the Adobe
+# materials.
+# ###################################################################################
+# Name: Adobe Glyph List For New Fonts
+# Table version: 1.6
+# Date: 30 Januaury 2006
+#
+# Description:
+#
+# The Adobe Glyph List For New Fonts (AGLFN) is meant to provide a list of
+# base glyph names which are compatible with the AGL specification at
+# http://partners.adobe.com/asn/developer/type/unicodegn.html.
+# and which can be used as described in section 6 of that document.
+#
+# This list comprises the set of glyph names from the AGLv2,0 which map
+# to via the AGL rules to the semanticly correct Unicode value. For
+# example, Asmall is omitted as the AGL maps this to the Unicode
+# Private Use Area value F761, rather than to the Unicode value for the
+# character "A". "ffi" is also omitted, as the AGL maps this to the
+# Alphabetic Presentation Forms Area value FB03, rather than
+# decomposing it to the three-value Unicode sequence 0066,0066,0069.
+# See section 7.1 of the Unicode Standard 4.0 on this issue.
+# "arrowvertex" is omitted becuase this now has a real Unicode
+# character value, and the AGL is now incorrect in mapping this to the
+# Private Use Area value F8E6.
+#
+# If you do not find an appropriate name for your glyph in this list,
+# then please refer to section 6 of the document:
+# http://partners.adobe.com/asn/developer/typeforum/unicodegn.html.
+#
+# The Unicode values and names are given for convenience.
+#
+# Format: Semicolon-delimited fields:
+#
+# (1) Standard UV or CUS UV. (4 uppercase hexadecimal digits)
+#
+# (2) Glyph name. (upper- and lowercase letters, digits)
+#
+# (3) Character names: Unicode character names for standard UVs, and
+# descriptive names for CUS UVs. (uppercase letters, hyphen, space)
+#
+# The entries are sorted by glyph name in increasing ASCII order; entries
+# with the same glyph name are sorted in decreasing priority order.
+#
+# Lines starting with "#" are comments; blank lines should be ignored.
+#
+# 1.6 [30 January 2006]
+# - Completed work intended in 1.5
+#
+# 1.5 [23 November 2005]
+# - removed duplicated block at end of file
+# - changed mappings:
+# 2206;Delta;INCREMENT changed to 0394;Delta;GREEK CAPITAL LETTER DELTA
+# 2126;Omega;OHM SIGN changed to 03A9;Omega;GREEK CAPITAL LETTER OMEGA
+# 03BC;mu;MICRO SIGN changed to 03BC;mu;GREEK SMALL LETTER MU
+# - corrected statement above about why ffi is omitted.
+
+# 1.4 [24 September 2003] Changed version to 1.4, to avoid confusion
+# with the AGL 1.3
+# fixed spelling errors in the header
+# fully removed arrowvertex, as it is mapped only to a PUA Unicode value in some fonts.
+#
+# 1.1 [17 April 2003] Renamed [Tt]cedilla back to [Tt]commaaccent:
+#
+# 1.0 [31 Jan 2003] Original version. Derived from the AGLv1.2 by:
+# - removing the PUA area codes
+# - removing duplicate Unicode mappings, and
+# - renaming tcommaaccent to tcedilla and Tcommaaccent to Tcedilla
+#
+0041;A;LATIN CAPITAL LETTER A
+00C6;AE;LATIN CAPITAL LETTER AE
+01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE
+00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE
+0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE
+00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS
+00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE
+0391;Alpha;GREEK CAPITAL LETTER ALPHA
+0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS
+0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON
+0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK
+00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE
+01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE
+0042;B;LATIN CAPITAL LETTER B
+0392;Beta;GREEK CAPITAL LETTER BETA
+0043;C;LATIN CAPITAL LETTER C
+0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE
+010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON
+00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA
+0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE
+03A7;Chi;GREEK CAPITAL LETTER CHI
+0044;D;LATIN CAPITAL LETTER D
+010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON
+0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE
+0394;Delta;GREEK CAPITAL LETTER DELTA
+0045;E;LATIN CAPITAL LETTER E
+00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE
+0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE
+011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON
+00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS
+0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE
+00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE
+0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON
+014A;Eng;LATIN CAPITAL LETTER ENG
+0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK
+0395;Epsilon;GREEK CAPITAL LETTER EPSILON
+0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS
+0397;Eta;GREEK CAPITAL LETTER ETA
+0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS
+00D0;Eth;LATIN CAPITAL LETTER ETH
+20AC;Euro;EURO SIGN
+0046;F;LATIN CAPITAL LETTER F
+0047;G;LATIN CAPITAL LETTER G
+0393;Gamma;GREEK CAPITAL LETTER GAMMA
+011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE
+01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON
+011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+0122;Gcommaaccent;LATIN CAPITAL LETTER G WITH CEDILLA
+0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE
+0048;H;LATIN CAPITAL LETTER H
+25CF;H18533;BLACK CIRCLE
+25AA;H18543;BLACK SMALL SQUARE
+25AB;H18551;WHITE SMALL SQUARE
+25A1;H22073;WHITE SQUARE
+0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE
+0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0049;I;LATIN CAPITAL LETTER I
+0132;IJ;LATIN CAPITAL LIGATURE IJ
+00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE
+012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE
+00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS
+0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE
+2111;Ifraktur;BLACK-LETTER CAPITAL I
+00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE
+012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON
+012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK
+0399;Iota;GREEK CAPITAL LETTER IOTA
+03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS
+0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE
+004A;J;LATIN CAPITAL LETTER J
+0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+004B;K;LATIN CAPITAL LETTER K
+039A;Kappa;GREEK CAPITAL LETTER KAPPA
+0136;Kcommaaccent;LATIN CAPITAL LETTER K WITH CEDILLA
+004C;L;LATIN CAPITAL LETTER L
+0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE
+039B;Lambda;GREEK CAPITAL LETTER LAMDA
+013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON
+013B;Lcommaaccent;LATIN CAPITAL LETTER L WITH CEDILLA
+013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE
+004D;M;LATIN CAPITAL LETTER M
+039C;Mu;GREEK CAPITAL LETTER MU
+004E;N;LATIN CAPITAL LETTER N
+0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE
+0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON
+0145;Ncommaaccent;LATIN CAPITAL LETTER N WITH CEDILLA
+00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE
+039D;Nu;GREEK CAPITAL LETTER NU
+004F;O;LATIN CAPITAL LETTER O
+0152;OE;LATIN CAPITAL LIGATURE OE
+00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE
+014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE
+00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS
+00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE
+01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN
+0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON
+03A9;Omega;GREEK CAPITAL LETTER OMEGA
+038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS
+039F;Omicron;GREEK CAPITAL LETTER OMICRON
+038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS
+00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE
+01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE
+0050;P;LATIN CAPITAL LETTER P
+03A6;Phi;GREEK CAPITAL LETTER PHI
+03A0;Pi;GREEK CAPITAL LETTER PI
+03A8;Psi;GREEK CAPITAL LETTER PSI
+0051;Q;LATIN CAPITAL LETTER Q
+0052;R;LATIN CAPITAL LETTER R
+0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE
+0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON
+0156;Rcommaaccent;LATIN CAPITAL LETTER R WITH CEDILLA
+211C;Rfraktur;BLACK-LETTER CAPITAL R
+03A1;Rho;GREEK CAPITAL LETTER RHO
+0053;S;LATIN CAPITAL LETTER S
+250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT
+2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT
+2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT
+2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT
+253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL
+251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL
+2502;SF110000;BOX DRAWINGS LIGHT VERTICAL
+2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL
+2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT
+255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT
+255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT
+2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL
+256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE
+0160;Scaron;LATIN CAPITAL LETTER S WITH CARON
+015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA
+015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0218;Scommaaccent;LATIN CAPITAL LETTER S WITH COMMA BELOW
+03A3;Sigma;GREEK CAPITAL LETTER SIGMA
+0054;T;LATIN CAPITAL LETTER T
+03A4;Tau;GREEK CAPITAL LETTER TAU
+0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE
+0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON
+0162;Tcommaaccent;LATIN CAPITAL LETTER T WITH CEDILLA
+0398;Theta;GREEK CAPITAL LETTER THETA
+00DE;Thorn;LATIN CAPITAL LETTER THORN
+0055;U;LATIN CAPITAL LETTER U
+00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE
+016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE
+00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS
+00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE
+01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN
+0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON
+0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK
+03A5;Upsilon;GREEK CAPITAL LETTER UPSILON
+03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL
+03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS
+016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE
+0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE
+0056;V;LATIN CAPITAL LETTER V
+0057;W;LATIN CAPITAL LETTER W
+1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE
+0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS
+1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE
+0058;X;LATIN CAPITAL LETTER X
+039E;Xi;GREEK CAPITAL LETTER XI
+0059;Y;LATIN CAPITAL LETTER Y
+00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE
+0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS
+1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE
+005A;Z;LATIN CAPITAL LETTER Z
+0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE
+017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON
+017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0396;Zeta;GREEK CAPITAL LETTER ZETA
+0061;a;LATIN SMALL LETTER A
+00E1;aacute;LATIN SMALL LETTER A WITH ACUTE
+0103;abreve;LATIN SMALL LETTER A WITH BREVE
+00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX
+00B4;acute;ACUTE ACCENT
+0301;acutecomb;COMBINING ACUTE ACCENT
+00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS
+00E6;ae;LATIN SMALL LETTER AE
+01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE
+2015;afii00208;HORIZONTAL BAR
+0410;afii10017;CYRILLIC CAPITAL LETTER A
+0411;afii10018;CYRILLIC CAPITAL LETTER BE
+0412;afii10019;CYRILLIC CAPITAL LETTER VE
+0413;afii10020;CYRILLIC CAPITAL LETTER GHE
+0414;afii10021;CYRILLIC CAPITAL LETTER DE
+0415;afii10022;CYRILLIC CAPITAL LETTER IE
+0401;afii10023;CYRILLIC CAPITAL LETTER IO
+0416;afii10024;CYRILLIC CAPITAL LETTER ZHE
+0417;afii10025;CYRILLIC CAPITAL LETTER ZE
+0418;afii10026;CYRILLIC CAPITAL LETTER I
+0419;afii10027;CYRILLIC CAPITAL LETTER SHORT I
+041A;afii10028;CYRILLIC CAPITAL LETTER KA
+041B;afii10029;CYRILLIC CAPITAL LETTER EL
+041C;afii10030;CYRILLIC CAPITAL LETTER EM
+041D;afii10031;CYRILLIC CAPITAL LETTER EN
+041E;afii10032;CYRILLIC CAPITAL LETTER O
+041F;afii10033;CYRILLIC CAPITAL LETTER PE
+0420;afii10034;CYRILLIC CAPITAL LETTER ER
+0421;afii10035;CYRILLIC CAPITAL LETTER ES
+0422;afii10036;CYRILLIC CAPITAL LETTER TE
+0423;afii10037;CYRILLIC CAPITAL LETTER U
+0424;afii10038;CYRILLIC CAPITAL LETTER EF
+0425;afii10039;CYRILLIC CAPITAL LETTER HA
+0426;afii10040;CYRILLIC CAPITAL LETTER TSE
+0427;afii10041;CYRILLIC CAPITAL LETTER CHE
+0428;afii10042;CYRILLIC CAPITAL LETTER SHA
+0429;afii10043;CYRILLIC CAPITAL LETTER SHCHA
+042A;afii10044;CYRILLIC CAPITAL LETTER HARD SIGN
+042B;afii10045;CYRILLIC CAPITAL LETTER YERU
+042C;afii10046;CYRILLIC CAPITAL LETTER SOFT SIGN
+042D;afii10047;CYRILLIC CAPITAL LETTER E
+042E;afii10048;CYRILLIC CAPITAL LETTER YU
+042F;afii10049;CYRILLIC CAPITAL LETTER YA
+0490;afii10050;CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0402;afii10051;CYRILLIC CAPITAL LETTER DJE
+0403;afii10052;CYRILLIC CAPITAL LETTER GJE
+0404;afii10053;CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405;afii10054;CYRILLIC CAPITAL LETTER DZE
+0406;afii10055;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407;afii10056;CYRILLIC CAPITAL LETTER YI
+0408;afii10057;CYRILLIC CAPITAL LETTER JE
+0409;afii10058;CYRILLIC CAPITAL LETTER LJE
+040A;afii10059;CYRILLIC CAPITAL LETTER NJE
+040B;afii10060;CYRILLIC CAPITAL LETTER TSHE
+040C;afii10061;CYRILLIC CAPITAL LETTER KJE
+040E;afii10062;CYRILLIC CAPITAL LETTER SHORT U
+0430;afii10065;CYRILLIC SMALL LETTER A
+0431;afii10066;CYRILLIC SMALL LETTER BE
+0432;afii10067;CYRILLIC SMALL LETTER VE
+0433;afii10068;CYRILLIC SMALL LETTER GHE
+0434;afii10069;CYRILLIC SMALL LETTER DE
+0435;afii10070;CYRILLIC SMALL LETTER IE
+0451;afii10071;CYRILLIC SMALL LETTER IO
+0436;afii10072;CYRILLIC SMALL LETTER ZHE
+0437;afii10073;CYRILLIC SMALL LETTER ZE
+0438;afii10074;CYRILLIC SMALL LETTER I
+0439;afii10075;CYRILLIC SMALL LETTER SHORT I
+043A;afii10076;CYRILLIC SMALL LETTER KA
+043B;afii10077;CYRILLIC SMALL LETTER EL
+043C;afii10078;CYRILLIC SMALL LETTER EM
+043D;afii10079;CYRILLIC SMALL LETTER EN
+043E;afii10080;CYRILLIC SMALL LETTER O
+043F;afii10081;CYRILLIC SMALL LETTER PE
+0440;afii10082;CYRILLIC SMALL LETTER ER
+0441;afii10083;CYRILLIC SMALL LETTER ES
+0442;afii10084;CYRILLIC SMALL LETTER TE
+0443;afii10085;CYRILLIC SMALL LETTER U
+0444;afii10086;CYRILLIC SMALL LETTER EF
+0445;afii10087;CYRILLIC SMALL LETTER HA
+0446;afii10088;CYRILLIC SMALL LETTER TSE
+0447;afii10089;CYRILLIC SMALL LETTER CHE
+0448;afii10090;CYRILLIC SMALL LETTER SHA
+0449;afii10091;CYRILLIC SMALL LETTER SHCHA
+044A;afii10092;CYRILLIC SMALL LETTER HARD SIGN
+044B;afii10093;CYRILLIC SMALL LETTER YERU
+044C;afii10094;CYRILLIC SMALL LETTER SOFT SIGN
+044D;afii10095;CYRILLIC SMALL LETTER E
+044E;afii10096;CYRILLIC SMALL LETTER YU
+044F;afii10097;CYRILLIC SMALL LETTER YA
+0491;afii10098;CYRILLIC SMALL LETTER GHE WITH UPTURN
+0452;afii10099;CYRILLIC SMALL LETTER DJE
+0453;afii10100;CYRILLIC SMALL LETTER GJE
+0454;afii10101;CYRILLIC SMALL LETTER UKRAINIAN IE
+0455;afii10102;CYRILLIC SMALL LETTER DZE
+0456;afii10103;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457;afii10104;CYRILLIC SMALL LETTER YI
+0458;afii10105;CYRILLIC SMALL LETTER JE
+0459;afii10106;CYRILLIC SMALL LETTER LJE
+045A;afii10107;CYRILLIC SMALL LETTER NJE
+045B;afii10108;CYRILLIC SMALL LETTER TSHE
+045C;afii10109;CYRILLIC SMALL LETTER KJE
+045E;afii10110;CYRILLIC SMALL LETTER SHORT U
+040F;afii10145;CYRILLIC CAPITAL LETTER DZHE
+0462;afii10146;CYRILLIC CAPITAL LETTER YAT
+0472;afii10147;CYRILLIC CAPITAL LETTER FITA
+0474;afii10148;CYRILLIC CAPITAL LETTER IZHITSA
+045F;afii10193;CYRILLIC SMALL LETTER DZHE
+0463;afii10194;CYRILLIC SMALL LETTER YAT
+0473;afii10195;CYRILLIC SMALL LETTER FITA
+0475;afii10196;CYRILLIC SMALL LETTER IZHITSA
+04D9;afii10846;CYRILLIC SMALL LETTER SCHWA
+200E;afii299;LEFT-TO-RIGHT MARK
+200F;afii300;RIGHT-TO-LEFT MARK
+200D;afii301;ZERO WIDTH JOINER
+066A;afii57381;ARABIC PERCENT SIGN
+060C;afii57388;ARABIC COMMA
+0660;afii57392;ARABIC-INDIC DIGIT ZERO
+0661;afii57393;ARABIC-INDIC DIGIT ONE
+0662;afii57394;ARABIC-INDIC DIGIT TWO
+0663;afii57395;ARABIC-INDIC DIGIT THREE
+0664;afii57396;ARABIC-INDIC DIGIT FOUR
+0665;afii57397;ARABIC-INDIC DIGIT FIVE
+0666;afii57398;ARABIC-INDIC DIGIT SIX
+0667;afii57399;ARABIC-INDIC DIGIT SEVEN
+0668;afii57400;ARABIC-INDIC DIGIT EIGHT
+0669;afii57401;ARABIC-INDIC DIGIT NINE
+061B;afii57403;ARABIC SEMICOLON
+061F;afii57407;ARABIC QUESTION MARK
+0621;afii57409;ARABIC LETTER HAMZA
+0622;afii57410;ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;afii57411;ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;afii57412;ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;afii57413;ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;afii57414;ARABIC LETTER YEH WITH HAMZA ABOVE
+0627;afii57415;ARABIC LETTER ALEF
+0628;afii57416;ARABIC LETTER BEH
+0629;afii57417;ARABIC LETTER TEH MARBUTA
+062A;afii57418;ARABIC LETTER TEH
+062B;afii57419;ARABIC LETTER THEH
+062C;afii57420;ARABIC LETTER JEEM
+062D;afii57421;ARABIC LETTER HAH
+062E;afii57422;ARABIC LETTER KHAH
+062F;afii57423;ARABIC LETTER DAL
+0630;afii57424;ARABIC LETTER THAL
+0631;afii57425;ARABIC LETTER REH
+0632;afii57426;ARABIC LETTER ZAIN
+0633;afii57427;ARABIC LETTER SEEN
+0634;afii57428;ARABIC LETTER SHEEN
+0635;afii57429;ARABIC LETTER SAD
+0636;afii57430;ARABIC LETTER DAD
+0637;afii57431;ARABIC LETTER TAH
+0638;afii57432;ARABIC LETTER ZAH
+0639;afii57433;ARABIC LETTER AIN
+063A;afii57434;ARABIC LETTER GHAIN
+0640;afii57440;ARABIC TATWEEL
+0641;afii57441;ARABIC LETTER FEH
+0642;afii57442;ARABIC LETTER QAF
+0643;afii57443;ARABIC LETTER KAF
+0644;afii57444;ARABIC LETTER LAM
+0645;afii57445;ARABIC LETTER MEEM
+0646;afii57446;ARABIC LETTER NOON
+0648;afii57448;ARABIC LETTER WAW
+0649;afii57449;ARABIC LETTER ALEF MAKSURA
+064A;afii57450;ARABIC LETTER YEH
+064B;afii57451;ARABIC FATHATAN
+064C;afii57452;ARABIC DAMMATAN
+064D;afii57453;ARABIC KASRATAN
+064E;afii57454;ARABIC FATHA
+064F;afii57455;ARABIC DAMMA
+0650;afii57456;ARABIC KASRA
+0651;afii57457;ARABIC SHADDA
+0652;afii57458;ARABIC SUKUN
+0647;afii57470;ARABIC LETTER HEH
+06A4;afii57505;ARABIC LETTER VEH
+067E;afii57506;ARABIC LETTER PEH
+0686;afii57507;ARABIC LETTER TCHEH
+0698;afii57508;ARABIC LETTER JEH
+06AF;afii57509;ARABIC LETTER GAF
+0679;afii57511;ARABIC LETTER TTEH
+0688;afii57512;ARABIC LETTER DDAL
+0691;afii57513;ARABIC LETTER RREH
+06BA;afii57514;ARABIC LETTER NOON GHUNNA
+06D2;afii57519;ARABIC LETTER YEH BARREE
+06D5;afii57534;ARABIC LETTER AE
+20AA;afii57636;NEW SHEQEL SIGN
+05BE;afii57645;HEBREW PUNCTUATION MAQAF
+05C3;afii57658;HEBREW PUNCTUATION SOF PASUQ
+05D0;afii57664;HEBREW LETTER ALEF
+05D1;afii57665;HEBREW LETTER BET
+05D2;afii57666;HEBREW LETTER GIMEL
+05D3;afii57667;HEBREW LETTER DALET
+05D4;afii57668;HEBREW LETTER HE
+05D5;afii57669;HEBREW LETTER VAV
+05D6;afii57670;HEBREW LETTER ZAYIN
+05D7;afii57671;HEBREW LETTER HET
+05D8;afii57672;HEBREW LETTER TET
+05D9;afii57673;HEBREW LETTER YOD
+05DA;afii57674;HEBREW LETTER FINAL KAF
+05DB;afii57675;HEBREW LETTER KAF
+05DC;afii57676;HEBREW LETTER LAMED
+05DD;afii57677;HEBREW LETTER FINAL MEM
+05DE;afii57678;HEBREW LETTER MEM
+05DF;afii57679;HEBREW LETTER FINAL NUN
+05E0;afii57680;HEBREW LETTER NUN
+05E1;afii57681;HEBREW LETTER SAMEKH
+05E2;afii57682;HEBREW LETTER AYIN
+05E3;afii57683;HEBREW LETTER FINAL PE
+05E4;afii57684;HEBREW LETTER PE
+05E5;afii57685;HEBREW LETTER FINAL TSADI
+05E6;afii57686;HEBREW LETTER TSADI
+05E7;afii57687;HEBREW LETTER QOF
+05E8;afii57688;HEBREW LETTER RESH
+05E9;afii57689;HEBREW LETTER SHIN
+05EA;afii57690;HEBREW LETTER TAV
+05F0;afii57716;HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1;afii57717;HEBREW LIGATURE YIDDISH VAV YOD
+05F2;afii57718;HEBREW LIGATURE YIDDISH DOUBLE YOD
+05B4;afii57793;HEBREW POINT HIRIQ
+05B5;afii57794;HEBREW POINT TSERE
+05B6;afii57795;HEBREW POINT SEGOL
+05BB;afii57796;HEBREW POINT QUBUTS
+05B8;afii57797;HEBREW POINT QAMATS
+05B7;afii57798;HEBREW POINT PATAH
+05B0;afii57799;HEBREW POINT SHEVA
+05B2;afii57800;HEBREW POINT HATAF PATAH
+05B1;afii57801;HEBREW POINT HATAF SEGOL
+05B3;afii57802;HEBREW POINT HATAF QAMATS
+05C2;afii57803;HEBREW POINT SIN DOT
+05C1;afii57804;HEBREW POINT SHIN DOT
+05B9;afii57806;HEBREW POINT HOLAM
+05BC;afii57807;HEBREW POINT DAGESH OR MAPIQ
+05BD;afii57839;HEBREW POINT METEG
+05BF;afii57841;HEBREW POINT RAFE
+05C0;afii57842;HEBREW PUNCTUATION PASEQ
+02BC;afii57929;MODIFIER LETTER APOSTROPHE
+2105;afii61248;CARE OF
+2113;afii61289;SCRIPT SMALL L
+2116;afii61352;NUMERO SIGN
+202C;afii61573;POP DIRECTIONAL FORMATTING
+202D;afii61574;LEFT-TO-RIGHT OVERRIDE
+202E;afii61575;RIGHT-TO-LEFT OVERRIDE
+200C;afii61664;ZERO WIDTH NON-JOINER
+066D;afii63167;ARABIC FIVE POINTED STAR
+02BD;afii64937;MODIFIER LETTER REVERSED COMMA
+00E0;agrave;LATIN SMALL LETTER A WITH GRAVE
+2135;aleph;ALEF SYMBOL
+03B1;alpha;GREEK SMALL LETTER ALPHA
+03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS
+0101;amacron;LATIN SMALL LETTER A WITH MACRON
+0026;ampersand;AMPERSAND
+2220;angle;ANGLE
+2329;angleleft;LEFT-POINTING ANGLE BRACKET
+232A;angleright;RIGHT-POINTING ANGLE BRACKET
+0387;anoteleia;GREEK ANO TELEIA
+0105;aogonek;LATIN SMALL LETTER A WITH OGONEK
+2248;approxequal;ALMOST EQUAL TO
+00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE
+01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+2194;arrowboth;LEFT RIGHT ARROW
+21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW
+21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW
+21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW
+21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW
+21D1;arrowdblup;UPWARDS DOUBLE ARROW
+2193;arrowdown;DOWNWARDS ARROW
+2190;arrowleft;LEFTWARDS ARROW
+2192;arrowright;RIGHTWARDS ARROW
+2191;arrowup;UPWARDS ARROW
+2195;arrowupdn;UP DOWN ARROW
+21A8;arrowupdnbse;UP DOWN ARROW WITH BASE
+005E;asciicircum;CIRCUMFLEX ACCENT
+007E;asciitilde;TILDE
+002A;asterisk;ASTERISK
+2217;asteriskmath;ASTERISK OPERATOR
+0040;at;COMMERCIAL AT
+00E3;atilde;LATIN SMALL LETTER A WITH TILDE
+0062;b;LATIN SMALL LETTER B
+005C;backslash;REVERSE SOLIDUS
+007C;bar;VERTICAL LINE
+03B2;beta;GREEK SMALL LETTER BETA
+2588;block;FULL BLOCK
+007B;braceleft;LEFT CURLY BRACKET
+007D;braceright;RIGHT CURLY BRACKET
+005B;bracketleft;LEFT SQUARE BRACKET
+005D;bracketright;RIGHT SQUARE BRACKET
+02D8;breve;BREVE
+00A6;brokenbar;BROKEN BAR
+2022;bullet;BULLET
+0063;c;LATIN SMALL LETTER C
+0107;cacute;LATIN SMALL LETTER C WITH ACUTE
+02C7;caron;CARON
+21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS
+010D;ccaron;LATIN SMALL LETTER C WITH CARON
+00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA
+0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE
+00B8;cedilla;CEDILLA
+00A2;cent;CENT SIGN
+03C7;chi;GREEK SMALL LETTER CHI
+25CB;circle;WHITE CIRCLE
+2297;circlemultiply;CIRCLED TIMES
+2295;circleplus;CIRCLED PLUS
+02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT
+2663;club;BLACK CLUB SUIT
+003A;colon;COLON
+20A1;colonmonetary;COLON SIGN
+002C;comma;COMMA
+2245;congruent;APPROXIMATELY EQUAL TO
+00A9;copyright;COPYRIGHT SIGN
+00A4;currency;CURRENCY SIGN
+0064;d;LATIN SMALL LETTER D
+2020;dagger;DAGGER
+2021;daggerdbl;DOUBLE DAGGER
+010F;dcaron;LATIN SMALL LETTER D WITH CARON
+0111;dcroat;LATIN SMALL LETTER D WITH STROKE
+00B0;degree;DEGREE SIGN
+03B4;delta;GREEK SMALL LETTER DELTA
+2666;diamond;BLACK DIAMOND SUIT
+00A8;dieresis;DIAERESIS
+0385;dieresistonos;GREEK DIALYTIKA TONOS
+00F7;divide;DIVISION SIGN
+2593;dkshade;DARK SHADE
+2584;dnblock;LOWER HALF BLOCK
+0024;dollar;DOLLAR SIGN
+20AB;dong;DONG SIGN
+02D9;dotaccent;DOT ABOVE
+0323;dotbelowcomb;COMBINING DOT BELOW
+0131;dotlessi;LATIN SMALL LETTER DOTLESS I
+22C5;dotmath;DOT OPERATOR
+0065;e;LATIN SMALL LETTER E
+00E9;eacute;LATIN SMALL LETTER E WITH ACUTE
+0115;ebreve;LATIN SMALL LETTER E WITH BREVE
+011B;ecaron;LATIN SMALL LETTER E WITH CARON
+00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS
+0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE
+00E8;egrave;LATIN SMALL LETTER E WITH GRAVE
+0038;eight;DIGIT EIGHT
+2208;element;ELEMENT OF
+2026;ellipsis;HORIZONTAL ELLIPSIS
+0113;emacron;LATIN SMALL LETTER E WITH MACRON
+2014;emdash;EM DASH
+2205;emptyset;EMPTY SET
+2013;endash;EN DASH
+014B;eng;LATIN SMALL LETTER ENG
+0119;eogonek;LATIN SMALL LETTER E WITH OGONEK
+03B5;epsilon;GREEK SMALL LETTER EPSILON
+03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS
+003D;equal;EQUALS SIGN
+2261;equivalence;IDENTICAL TO
+212E;estimated;ESTIMATED SYMBOL
+03B7;eta;GREEK SMALL LETTER ETA
+03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS
+00F0;eth;LATIN SMALL LETTER ETH
+0021;exclam;EXCLAMATION MARK
+203C;exclamdbl;DOUBLE EXCLAMATION MARK
+00A1;exclamdown;INVERTED EXCLAMATION MARK
+2203;existential;THERE EXISTS
+0066;f;LATIN SMALL LETTER F
+2640;female;FEMALE SIGN
+2012;figuredash;FIGURE DASH
+25A0;filledbox;BLACK SQUARE
+25AC;filledrect;BLACK RECTANGLE
+0035;five;DIGIT FIVE
+215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS
+0192;florin;LATIN SMALL LETTER F WITH HOOK
+0034;four;DIGIT FOUR
+2044;fraction;FRACTION SLASH
+20A3;franc;FRENCH FRANC SIGN
+0067;g;LATIN SMALL LETTER G
+03B3;gamma;GREEK SMALL LETTER GAMMA
+011F;gbreve;LATIN SMALL LETTER G WITH BREVE
+01E7;gcaron;LATIN SMALL LETTER G WITH CARON
+011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX
+0123;gcommaaccent;LATIN SMALL LETTER G WITH CEDILLA
+0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE
+00DF;germandbls;LATIN SMALL LETTER SHARP S
+2207;gradient;NABLA
+0060;grave;GRAVE ACCENT
+0300;gravecomb;COMBINING GRAVE ACCENT
+003E;greater;GREATER-THAN SIGN
+2265;greaterequal;GREATER-THAN OR EQUAL TO
+00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0068;h;LATIN SMALL LETTER H
+0127;hbar;LATIN SMALL LETTER H WITH STROKE
+0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX
+2665;heart;BLACK HEART SUIT
+0309;hookabovecomb;COMBINING HOOK ABOVE
+2302;house;HOUSE
+02DD;hungarumlaut;DOUBLE ACUTE ACCENT
+002D;hyphen;HYPHEN-MINUS
+0069;i;LATIN SMALL LETTER I
+00ED;iacute;LATIN SMALL LETTER I WITH ACUTE
+012D;ibreve;LATIN SMALL LETTER I WITH BREVE
+00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS
+00EC;igrave;LATIN SMALL LETTER I WITH GRAVE
+0133;ij;LATIN SMALL LIGATURE IJ
+012B;imacron;LATIN SMALL LETTER I WITH MACRON
+221E;infinity;INFINITY
+222B;integral;INTEGRAL
+2321;integralbt;BOTTOM HALF INTEGRAL
+2320;integraltp;TOP HALF INTEGRAL
+2229;intersection;INTERSECTION
+25D8;invbullet;INVERSE BULLET
+25D9;invcircle;INVERSE WHITE CIRCLE
+263B;invsmileface;BLACK SMILING FACE
+012F;iogonek;LATIN SMALL LETTER I WITH OGONEK
+03B9;iota;GREEK SMALL LETTER IOTA
+03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA
+0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS
+0129;itilde;LATIN SMALL LETTER I WITH TILDE
+006A;j;LATIN SMALL LETTER J
+0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX
+006B;k;LATIN SMALL LETTER K
+03BA;kappa;GREEK SMALL LETTER KAPPA
+0137;kcommaaccent;LATIN SMALL LETTER K WITH CEDILLA
+0138;kgreenlandic;LATIN SMALL LETTER KRA
+006C;l;LATIN SMALL LETTER L
+013A;lacute;LATIN SMALL LETTER L WITH ACUTE
+03BB;lambda;GREEK SMALL LETTER LAMDA
+013E;lcaron;LATIN SMALL LETTER L WITH CARON
+013C;lcommaaccent;LATIN SMALL LETTER L WITH CEDILLA
+0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT
+003C;less;LESS-THAN SIGN
+2264;lessequal;LESS-THAN OR EQUAL TO
+258C;lfblock;LEFT HALF BLOCK
+20A4;lira;LIRA SIGN
+2227;logicaland;LOGICAL AND
+00AC;logicalnot;NOT SIGN
+2228;logicalor;LOGICAL OR
+017F;longs;LATIN SMALL LETTER LONG S
+25CA;lozenge;LOZENGE
+0142;lslash;LATIN SMALL LETTER L WITH STROKE
+2591;ltshade;LIGHT SHADE
+006D;m;LATIN SMALL LETTER M
+00AF;macron;MACRON
+2642;male;MALE SIGN
+2212;minus;MINUS SIGN
+2032;minute;PRIME
+03BC;mu;GREEK SMALL LETTER MU
+00D7;multiply;MULTIPLICATION SIGN
+266A;musicalnote;EIGHTH NOTE
+266B;musicalnotedbl;BEAMED EIGHTH NOTES
+006E;n;LATIN SMALL LETTER N
+0144;nacute;LATIN SMALL LETTER N WITH ACUTE
+0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0148;ncaron;LATIN SMALL LETTER N WITH CARON
+0146;ncommaaccent;LATIN SMALL LETTER N WITH CEDILLA
+0039;nine;DIGIT NINE
+2209;notelement;NOT AN ELEMENT OF
+2260;notequal;NOT EQUAL TO
+2284;notsubset;NOT A SUBSET OF
+00F1;ntilde;LATIN SMALL LETTER N WITH TILDE
+03BD;nu;GREEK SMALL LETTER NU
+0023;numbersign;NUMBER SIGN
+006F;o;LATIN SMALL LETTER O
+00F3;oacute;LATIN SMALL LETTER O WITH ACUTE
+014F;obreve;LATIN SMALL LETTER O WITH BREVE
+00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS
+0153;oe;LATIN SMALL LIGATURE OE
+02DB;ogonek;OGONEK
+00F2;ograve;LATIN SMALL LETTER O WITH GRAVE
+01A1;ohorn;LATIN SMALL LETTER O WITH HORN
+0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE
+014D;omacron;LATIN SMALL LETTER O WITH MACRON
+03C9;omega;GREEK SMALL LETTER OMEGA
+03D6;omega1;GREEK PI SYMBOL
+03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS
+03BF;omicron;GREEK SMALL LETTER OMICRON
+03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS
+0031;one;DIGIT ONE
+2024;onedotenleader;ONE DOT LEADER
+215B;oneeighth;VULGAR FRACTION ONE EIGHTH
+00BD;onehalf;VULGAR FRACTION ONE HALF
+00BC;onequarter;VULGAR FRACTION ONE QUARTER
+2153;onethird;VULGAR FRACTION ONE THIRD
+25E6;openbullet;WHITE BULLET
+00AA;ordfeminine;FEMININE ORDINAL INDICATOR
+00BA;ordmasculine;MASCULINE ORDINAL INDICATOR
+221F;orthogonal;RIGHT ANGLE
+00F8;oslash;LATIN SMALL LETTER O WITH STROKE
+01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE
+00F5;otilde;LATIN SMALL LETTER O WITH TILDE
+0070;p;LATIN SMALL LETTER P
+00B6;paragraph;PILCROW SIGN
+0028;parenleft;LEFT PARENTHESIS
+0029;parenright;RIGHT PARENTHESIS
+2202;partialdiff;PARTIAL DIFFERENTIAL
+0025;percent;PERCENT SIGN
+002E;period;FULL STOP
+00B7;periodcentered;MIDDLE DOT
+22A5;perpendicular;UP TACK
+2030;perthousand;PER MILLE SIGN
+20A7;peseta;PESETA SIGN
+03C6;phi;GREEK SMALL LETTER PHI
+03D5;phi1;GREEK PHI SYMBOL
+03C0;pi;GREEK SMALL LETTER PI
+002B;plus;PLUS SIGN
+00B1;plusminus;PLUS-MINUS SIGN
+211E;prescription;PRESCRIPTION TAKE
+220F;product;N-ARY PRODUCT
+2282;propersubset;SUBSET OF
+2283;propersuperset;SUPERSET OF
+221D;proportional;PROPORTIONAL TO
+03C8;psi;GREEK SMALL LETTER PSI
+0071;q;LATIN SMALL LETTER Q
+003F;question;QUESTION MARK
+00BF;questiondown;INVERTED QUESTION MARK
+0022;quotedbl;QUOTATION MARK
+201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK
+201C;quotedblleft;LEFT DOUBLE QUOTATION MARK
+201D;quotedblright;RIGHT DOUBLE QUOTATION MARK
+2018;quoteleft;LEFT SINGLE QUOTATION MARK
+201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK
+2019;quoteright;RIGHT SINGLE QUOTATION MARK
+201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK
+0027;quotesingle;APOSTROPHE
+0072;r;LATIN SMALL LETTER R
+0155;racute;LATIN SMALL LETTER R WITH ACUTE
+221A;radical;SQUARE ROOT
+0159;rcaron;LATIN SMALL LETTER R WITH CARON
+0157;rcommaaccent;LATIN SMALL LETTER R WITH CEDILLA
+2286;reflexsubset;SUBSET OF OR EQUAL TO
+2287;reflexsuperset;SUPERSET OF OR EQUAL TO
+00AE;registered;REGISTERED SIGN
+2310;revlogicalnot;REVERSED NOT SIGN
+03C1;rho;GREEK SMALL LETTER RHO
+02DA;ring;RING ABOVE
+2590;rtblock;RIGHT HALF BLOCK
+0073;s;LATIN SMALL LETTER S
+015B;sacute;LATIN SMALL LETTER S WITH ACUTE
+0161;scaron;LATIN SMALL LETTER S WITH CARON
+015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA
+015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX
+0219;scommaaccent;LATIN SMALL LETTER S WITH COMMA BELOW
+2033;second;DOUBLE PRIME
+00A7;section;SECTION SIGN
+003B;semicolon;SEMICOLON
+0037;seven;DIGIT SEVEN
+215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS
+2592;shade;MEDIUM SHADE
+03C3;sigma;GREEK SMALL LETTER SIGMA
+03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA
+223C;similar;TILDE OPERATOR
+0036;six;DIGIT SIX
+002F;slash;SOLIDUS
+263A;smileface;WHITE SMILING FACE
+0020;space;SPACE
+2660;spade;BLACK SPADE SUIT
+00A3;sterling;POUND SIGN
+220B;suchthat;CONTAINS AS MEMBER
+2211;summation;N-ARY SUMMATION
+263C;sun;WHITE SUN WITH RAYS
+0074;t;LATIN SMALL LETTER T
+03C4;tau;GREEK SMALL LETTER TAU
+0167;tbar;LATIN SMALL LETTER T WITH STROKE
+0165;tcaron;LATIN SMALL LETTER T WITH CARON
+0163;tcommaaccent;LATIN SMALL LETTER T WITH CEDILLA
+2234;therefore;THEREFORE
+03B8;theta;GREEK SMALL LETTER THETA
+03D1;theta1;GREEK THETA SYMBOL
+00FE;thorn;LATIN SMALL LETTER THORN
+0033;three;DIGIT THREE
+215C;threeeighths;VULGAR FRACTION THREE EIGHTHS
+00BE;threequarters;VULGAR FRACTION THREE QUARTERS
+02DC;tilde;SMALL TILDE
+0303;tildecomb;COMBINING TILDE
+0384;tonos;GREEK TONOS
+2122;trademark;TRADE MARK SIGN
+25BC;triagdn;BLACK DOWN-POINTING TRIANGLE
+25C4;triaglf;BLACK LEFT-POINTING POINTER
+25BA;triagrt;BLACK RIGHT-POINTING POINTER
+25B2;triagup;BLACK UP-POINTING TRIANGLE
+0032;two;DIGIT TWO
+2025;twodotenleader;TWO DOT LEADER
+2154;twothirds;VULGAR FRACTION TWO THIRDS
+0075;u;LATIN SMALL LETTER U
+00FA;uacute;LATIN SMALL LETTER U WITH ACUTE
+016D;ubreve;LATIN SMALL LETTER U WITH BREVE
+00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS
+00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE
+01B0;uhorn;LATIN SMALL LETTER U WITH HORN
+0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE
+016B;umacron;LATIN SMALL LETTER U WITH MACRON
+005F;underscore;LOW LINE
+2017;underscoredbl;DOUBLE LOW LINE
+222A;union;UNION
+2200;universal;FOR ALL
+0173;uogonek;LATIN SMALL LETTER U WITH OGONEK
+2580;upblock;UPPER HALF BLOCK
+03C5;upsilon;GREEK SMALL LETTER UPSILON
+03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS
+016F;uring;LATIN SMALL LETTER U WITH RING ABOVE
+0169;utilde;LATIN SMALL LETTER U WITH TILDE
+0076;v;LATIN SMALL LETTER V
+0077;w;LATIN SMALL LETTER W
+1E83;wacute;LATIN SMALL LETTER W WITH ACUTE
+0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX
+1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS
+2118;weierstrass;SCRIPT CAPITAL P
+1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE
+0078;x;LATIN SMALL LETTER X
+03BE;xi;GREEK SMALL LETTER XI
+0079;y;LATIN SMALL LETTER Y
+00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE
+0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX
+00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS
+00A5;yen;YEN SIGN
+1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE
+007A;z;LATIN SMALL LETTER Z
+017A;zacute;LATIN SMALL LETTER Z WITH ACUTE
+017E;zcaron;LATIN SMALL LETTER Z WITH CARON
+017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE
+0030;zero;DIGIT ZERO
+03B6;zeta;GREEK SMALL LETTER ZETA
--- /dev/null
+%
+% Encoding for code page 1250 (Microsoft Windows Central and Eastern European)
+%
+/reencodeCP1250 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding CP1250Encoding def } if
+} if
+currentdict end definefont
+} def
+/CP1250Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one
+/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater
+/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
+/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft
+/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar
+/braceright/tilde/.notdef/.notdef/.notdef/quotesinglbase/.notdef/quotedblbase
+/ellipsis/dagger/daggerdbl/.notdef/perthousand/Scaron/guilsinglleft/Sacute
+/Tcaron/Zcaron/Zacute/.notdef/quoteleft/quoteright/quotedblleft
+/quotedblright/bullet/endash/emdash/.notdef/trademark/scaron
+/guilsinglright/sacute/tcaron/zcaron/zacute/space/caron/breve/Lslash
+/currency/Aogonek/brokenbar/section/dieresis/copyright/Scedilla
+/guillemotleft/logicalnot/hyphen/registered/Zdotaccent
+/degree/plusminus/ogonek/lslash/acute/mu/paragraph/bullet
+/cedilla/aogonek/scedilla/guillemotright/Lcaron/hungarumlaut/lcaron
+/zdotaccent/Racute/Aacute/Acircumflex/Abreve/Adieresis/Lacute/Cacute
+/Ccedilla/Ccaron/Eacute/Eogonek/Edieresis/Ecaron/Iacute/Icircumflex
+/Dcaron/Eth/Nacute/Ncaron/Oacute/Ocircumflex/Ohungarumlaut/Odieresis
+/multiply/Rcaron/Uring/Uacute/Uhungarumlaut/Udieresis/Yacute/Tcedilla
+/germandbls/racute/aacute/acircumflex/abreve/adieresis/lacute/cacute
+/ccedilla/ccaron/eacute/eogonek/edieresis/ecaron/iacute/icircumflex
+/dcaron/dbar/nacute/ncaron/oacute/ocircumflex/ohungarumlaut/odieresis
+/divide/rcaron/uring/uacute/uhungarumlaut/udieresis/yacute/tcedilla/dotaccent
+] def
--- /dev/null
+%
+% encoding for code page cp1251 (8-bit Russian)
+% version 1.0: - Mainly letters are mapped. The following positions
+% (JFi) are left blank (undefined):
+% -- first 32 positions,
+% -- frame characters,
+% -- a few special characters.
+
+/reencodeCP1251 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+CharStrings /Idieresis known {
+/Encoding CP1251Encoding def } if
+} if
+currentdict end definefont
+} def
+/CP1251Encoding [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
+/parenleft /parenright /asterisk /plus /comma /minus /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/grave /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/afii10051 /afii10052 /quotesinglbase /afii10100 /quotedblbase /ellipsis /dagger /daggerdbl
+/Euro /perthousand /afii10058 /guilsinglleft /afii10059 /afii10061 /afii10060 /afii10145
+/afii10099 /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
+/.notdef /trademark /afii10106 /guilsinglright /afii10107 /afii10109 /afii10108 /afii10193
+/space /afii10062 /afii10110 /afii10057 /currency /afii10050 /brokenbar /section
+/afii10023 /copyright /afii10053 /guillemotleft /logicalnot /hyphen /registered /afii10056
+/degree /plusminus /afii10055 /afii10103 /afii10098 /mu /paragraph /periodcentered
+/afii10071 /afii61352 /afii10101 /guillemotright /afii10105 /afii10054 /afii10102 /afii10104
+/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
+/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
+/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
+/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
+/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
+/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
+/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
+/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
+] def
+
--- /dev/null
+%
+% encoding for code page 437 (original MSDOS)
+% version 1.0: - Mainly letters are mapped. The following positions
+% (JFi) are left blank (undefined):
+% -- first 32 positions,
+% -- frame characters,
+% -- greek characters,
+% -- some more special characters.
+%
+% version 1.1: - added some more special characters
+
+/reencodeCP437 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding CP437Encoding def } if
+} if
+currentdict end definefont
+} def
+/CP437Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/cent/sterling/yen/.notdef/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/.notdef/logicalnot/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/space/space/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/germandbls/.notdef/.notdef/.notdef/.notdef/mu/.notdef
+/.notdef/.notdef/.notdef/.notdef/infinity/.notdef/.notdef/.notdef
+/.notdef/plusminus/greaterequal/lessequal/.notdef/.notdef/divide/.notdef
+/degree/bullet/periodcentered/.notdef/nsuperior/twosuperior/.notdef/.notdef
+] def
--- /dev/null
+%
+% encoding for code page 850 (obsolete MSDOS Western Europe)
+% version 1.0: - Mainly letters are mapped. The following positions
+% (JFi) are left blank (undefined):
+% -- first 32 positions,
+% -- frame characters,
+% -- a few special characters.
+
+/reencodeCP850 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding CP850Encoding def } if
+} if
+currentdict end definefont
+} def
+/CP850Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/agrave/aring/ccedilla
+/ecircumflex/edieresis/egrave/idieresis/icircumflex/igrave/Adieresis/Aring
+/Eacute/ae/AE/ocircumflex/odieresis/ograve/ucircumflex/ugrave
+/ydieresis/Odieresis/Udieresis/oslash/sterling/Oslash/multiply/florin
+/aacute/iacute/oacute/uacute/ntilde/Ntilde/ordfeminine/ordmasculine
+/questiondown/registered/logicalnot/onehalf/onequarter/exclamdown/guillemotleft/guillemotright
+/space/space/.notdef/.notdef/.notdef/Aacute/Acircumflex/Agrave
+/.notdef/.notdef/.notdef/.notdef/.notdef/cent/yen/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/atilde/Atilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Ecircumflex/Edieresis/Egrave/dotlessi/Iacute/Icircumflex
+/Idieresis/.notdef/.notdef/.notdef/.notdef/brokenbar/Igrave/.notdef
+/Oacute/germandbls/Ocircumflex/Ograve/otilde/Otilde/mu/thorn
+/Thorn/Uacute/Ucircumflex/Ugrave/yacute/Yacute/macron/acute
+/hyphen/plusminus/equal/threequarters/paragraph/section/divide/.notdef
+/degree/.notdef/periodcentered/onesuperior/threesuperior/twosuperior/.notdef/.notdef
+] def
--- /dev/null
+%
+% encoding for code page 852 (MSDOS Central European)
+/reencodeCP852 {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding CP852Encoding def } if
+} if
+currentdict end definefont
+} def
+/CP852Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/paragraph/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine
+/colon/semicolon/less/equal/greater/question
+/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
+/bracketleft/backslash/bracketright/asciicircum/underscore
+/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+/Ccedilla/udieresis/eacute/acircumflex/adieresis/uring/cacute/ccedilla
+/lslash/edieresis/Ohungarumlaut/ohungarumlaut/icircumflex/Zacute/Adieresis
+/Cacute/Eacute/Lacute/lacute/ocircumflex/odieresis/Lcaron/lcaron/Sacute
+/sacute/Odieresis/Udieresis/Tcaron/tcaron/Lslash/multiply/ccaron
+/aacute/iacute/oacute/uacute/Aogonek/aogonek/Zcaron/zcaron
+/Eogonek/eogonek/.notdef/zacute/Ccaron/scedilla/guillemotleft/guillemotright
+/.notdef/.notdef/.notdef/.notdef/.notdef/Aacute/Acircumflex/Ecaron
+/Scedilla/.notdef/.notdef/.notdef/.notdef/Zdotaccent/zdotaccent/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/Abreve/abreve
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/currency
+/eth/Eth/Dcaron/Edieresis/dcaron/Ncaron/Iacute/Icircumflex
+/ecaron/.notdef/.notdef/.notdef/.notdef/Tcedilla/Uring/.notdef
+/Oacute/germandbls/Ocircumflex/Nacute/nacute/ncaron/Scaron/scaron
+/Racute/Uacute/racute/Uhungarumlaut/yacute/Yacute/tcedilla/acute
+/hyphen/hungarumlaut/ogonek/caron/breve/section/divide/cedilla
+/degree/dieresis/dotaccent/uhungarumlaut/Rcaron/rcaron/.notdef/.notdef
+] def
--- /dev/null
+%
+% encoding for code page koi8r (8-bit Russian)
+% version 1.0: - Mainly letters are mapped. The following positions
+% (JFi) are left blank (undefined):
+% -- first 32 positions,
+% -- frame characters,
+% -- a few special characters.
+
+/reencodeKOI8R {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding KOI8REncoding def } if
+} if
+currentdict end definefont
+} def
+/KOI8REncoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+/SF100000/SF110000/SF010000/SF030000/SF020000/SF040000/SF080000/SF090000
+/SF060000/SF070000/SF050000/SF600000/SF570000/SF610000/SF580000/SF590000
+/SF140000/SF150000/SF160000/SS260000/filledbox/bullet/radical/approxequal
+/lessequal/greaterequal/space/SS270000/degree/twosuperior/periodcentered/divide
+/SF430000/SF240000/SF510000/afii10071/SF520000/SF390000/SF220000/SF210000
+/SF250000/SF500000/SF490000/SF380000/SF280000/SF270000/SF260000/SF360000
+/SF370000/SF420000/SF190000/afii10023/SF200000/SF230000/SF470000/SF480000
+/SF410000/SF450000/SF460000/SF400000/SF540000/SF530000/SF440000/copyright
+/afii10096/afii10065/afii10066/afii10088/afii10069/afii10070/afii10086/afii10068
+/afii10087/afii10074/afii10075/afii10076/afii10077/afii10078/afii10079/afii10080
+/afii10081/afii10097/afii10082/afii10083/afii10084/afii10085/afii10072/afii10067
+/afii10094/afii10093/afii10073/afii10090/afii10095/afii10091/afii10089/afii10092
+/afii10048/afii10017/afii10018/afii10040/afii10021/afii10022/afii10038/afii10020
+/afii10039/afii10026/afii10027/afii10028/afii10029/afii10030/afii10031/afii10032
+/afii10033/afii10049/afii10034/afii10035/afii10036/afii10037/afii10024/afii10019
+/afii10046/afii10045/afii10025/afii10042/afii10047/afii10043/afii10041/afii10044
+] def
--- /dev/null
+%
+% encoding for code page koi8r (8-bit Ukrainian)
+/reencodeKOI8U {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding KOI8UEncoding def } if
+} if
+currentdict end definefont
+} def
+/KOI8UEncoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+/SF100000/SF110000/SF010000/SF030000/SF020000/SF040000/SF080000/SF090000
+/SF060000/SF070000/SF050000/SF600000/SF570000/SF610000/SF580000/SF590000
+/SF140000/SF150000/SF160000/SS260000/filledbox/bullet/radical/approxequal
+/lessequal/greaterequal/space/SS270000/degree/twosuperior/periodcentered/divide
+/SF430000/SF240000/SF510000/afii10071/afii10101/SF390000/afii10103/afii10104
+/SF250000/SF500000/SF490000/SF380000/SF280000/afii10098/SF260000/SF360000
+/SF370000/SF420000/SF190000/afii10023/afii10053/SF230000/afii10055/afii10056
+/SF410000/SF450000/SF460000/SF400000/SF540000/afii10050/SF440000/copyright
+/afii10096/afii10065/afii10066/afii10088/afii10069/afii10070/afii10086/afii10068
+/afii10087/afii10074/afii10075/afii10076/afii10077/afii10078/afii10079/afii10080
+/afii10081/afii10097/afii10082/afii10083/afii10084/afii10085/afii10072/afii10067
+/afii10094/afii10093/afii10073/afii10090/afii10095/afii10091/afii10089/afii10092
+/afii10048/afii10017/afii10018/afii10040/afii10021/afii10022/afii10038/afii10020
+/afii10039/afii10026/afii10027/afii10028/afii10029/afii10030/afii10031/afii10032
+/afii10033/afii10049/afii10034/afii10035/afii10036/afii10037/afii10024/afii10019
+/afii10046/afii10045/afii10025/afii10042/afii10047/afii10043/afii10041/afii10044
+] def
--- /dev/null
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore} def
+/CircE {stroke [] 0 setdash
+ hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+ clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 M 0 PFs V} for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+ stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+ {/InterpretLevel1 true def}
+ {/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+ bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+ 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+ 8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+ 0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+ 0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+ 0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+ 0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+ 12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+ -4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+ TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
--- /dev/null
+%
+% Base ISO8859-1 character encoding plus support macros for UTF-8 encoding
+% via the glyphshow operator
+%
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+currentdict /CharStrings known {
+ CharStrings /Idieresis known {
+ /Encoding ISOLatin1Encoding def } if
+} if
+currentdict end definefont
+} def
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
+/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior
+/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
+/guillemotright/onequarter/onehalf/threequarters/questiondown
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute
+/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis
+/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
+/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
+/yacute/thorn/ydieresis
+] def
+
+/Gshow { dup type /stringtype eq { show } { glyphshow } ifelse } def
+
+/Gsall { {Gshow} forall } def
+/Gwidth {
+ dup currentpoint pop exch
+ gsave 6 array currentmatrix nulldevice setmatrix Gsall currentpoint pop grestore sub
+ } def
+/GLshow {currentpoint stroke M 0 vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
+/GRshow {currentpoint stroke M dup Gwidth vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
+/GCshow {currentpoint stroke M dup Gwidth 2 div vshift R
+ Blacktext {gsave 0 setgray Gsall grestore} {Gsall} ifelse} def
--- /dev/null
+! X resources for gnuplot x11 terminal driver
+! More information available in the gnuplot documentation
+! From inside gnuplot, try 'help set term x11'
+
+! User interface settings
+ gnuplot*exportselection: on
+ gnuplot*fastrotate: on
+ gnuplot*feedback: on
+! gnuplot*ctrlq: off
+ gnuplot*persist: off
+! gnuplot*raise: on
+ gnuplot*dashed: off
+
+! Default font and font encoding
+! gnuplot*font: verdana,11,bold
+! gnuplot*encoding: iso8859-15
+
+! Default line colors
+! gnuplot*background: white
+ gnuplot*textColor: black
+ gnuplot*borderColor: black
+ gnuplot*axisColor: black
+ gnuplot*line1Color: red
+ gnuplot*line2Color: green
+ gnuplot*line3Color: blue
+ gnuplot*line4Color: magenta
+ gnuplot*line5Color: cyan
+ gnuplot*line6Color: sienna
+ gnuplot*line7Color: orange
+ gnuplot*line8Color: coral
+
+! Default line widths
+ gnuplot*axisWidth: 0
+ gnuplot*borderWidth: 2
+ gnuplot*line1Width: 1
+ gnuplot*line2Width: 1
+ gnuplot*line3Width: 1
+ gnuplot*line4Width: 1
+ gnuplot*line5Width: 1
+ gnuplot*line6Width: 1
+ gnuplot*line7Width: 1
+ gnuplot*line8Width: 1
+
+! Default point size
+ gnuplot*pointsize: 1
+
+! Default dash patterns for monochrome Displays
+! 0 means a solid line.
+! A two-digit number `jk` means a dashed line with a repeated pattern of
+! `j` pixels on followed by `k` pixels off. For example, '16' is a dotted
+! line with one pixel on followed by six pixels off.
+! More elaborate on/off patterns can be specified with a four-digit value.
+! The default values shown below are for monochrome displays
+! or monochrome rendering on color or grayscale displays. For color displays,
+! the default for each is 0 (solid line) except for `axisDashes`
+ gnuplot*borderDashes: 0
+ gnuplot*axisDashes: 16
+ gnuplot*line1Dashes: 0
+ gnuplot*line2Dashes: 42
+ gnuplot*line3Dashes: 13
+ gnuplot*line4Dashes: 44
+ gnuplot*line5Dashes: 15
+ gnuplot*line6Dashes: 4441
+ gnuplot*line7Dashes: 42
+ gnuplot*line8Dashes: 13
+
+! Colormap usage and preferred visual Display class
+! gnuplot*maxcolors: <integer>
+! gnuplot*mincolors: <integer>
+! gnuplot*visual: <visual name>
+ gnuplot*mono: off
+ gnuplot*gray: off
+ gnuplot*reverseVideo: off
+
+! Grayscale setting (only checked if program is invoked as gnuplot -gray)
+ gnuplot*textGray: black
+ gnuplot*borderGray: gray50
+ gnuplot*axisGray: gray50
+ gnuplot*line1Gray: gray100
+ gnuplot*line2Gray: gray60
+ gnuplot*line3Gray: gray80
+ gnuplot*line4Gray: gray40
+ gnuplot*line5Gray: gray90
+ gnuplot*line6Gray: gray50
+ gnuplot*line7Gray: gray70
+ gnuplot*line8Gray: gray30
+
--- /dev/null
+# Ethan A Merritt - my preference for gnuplot colors
+# 2 3 4 5 6 8 are borrowed from the colors_podo set
+#
+set linetype 1 lc rgb "dark-violet" lw 1
+set linetype 2 lc rgb "#009e73" lw 1
+set linetype 3 lc rgb "#56b4e9" lw 1
+set linetype 4 lc rgb "#e69f00" lw 1
+set linetype 5 lc rgb "#f0e442" lw 1
+set linetype 6 lc rgb "#0072b2" lw 1
+set linetype 7 lc rgb "#e51e10" lw 1
+set linetype 8 lc rgb "black" lw 1
+set linetype 9 lc rgb "gray50" lw 1
+set linetype cycle 9
+
--- /dev/null
+#
+# Provide a consistent set of four distinguishable
+# black line types.
+# NB: This does not work with "set term post mono"
+#
+set termoption dashed
+unset for [i=1:4] linetype i
+set linetype 4 lt 1 lw 2.5 lc rgb "black"
+set linetype 3 lt 3 lw 1 lc rgb "black"
+set linetype 2 lt 2 lw 1 lc rgb "black"
+set linetype 1 lt -1 lw 1 lc rgb "black"
+set linetype cycle 4
+#
+set palette gray
--- /dev/null
+# Palette of colors selected to be easily distinguishable by
+# color-blind individuals with either protanopia or deuteranopia
+# Bang Wong [2011] Nature Methods 8, 441.
+set linetype 1 lc rgb "black"
+set linetype 2 lc rgb "#e69f00"
+set linetype 3 lc rgb "#56b4e9"
+set linetype 4 lc rgb "#009e73"
+set linetype 5 lc rgb "#f0e442"
+set linetype 6 lc rgb "#0072b2"
+set linetype 7 lc rgb "#d55e00"
+set linetype 8 lc rgb "#cc79a7"
+set linetype cycle 8
--- /dev/null
+?gnuplot
+?copyright
+?license
+ 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.
+?introduction
+?
+ `Gnuplot` is a portable command-line driven graphing utility for Linux, OS/2,
+ MS Windows, OSX, VMS, and many other platforms. The source code is copyrighted
+ but freely distributed (i.e., you don't have to pay for it). It was originally
+ created to allow scientists and students to visualize mathematical functions
+ and data interactively, but has grown to support many non-interactive uses
+ such as web scripting. It is also used as a plotting engine by third-party
+ applications like Octave. Gnuplot has been supported and under active
+ development since 1986.
+
+ Gnuplot supports many types of plots in either 2D and 3D. It can draw using
+ lines, points, boxes, contours, vector fields, surfaces, and various
+ associated text. It also supports various specialized plot types.
+
+ Gnuplot supports many different types of output: interactive screen terminals
+ (with mouse and hotkey input), direct output to pen plotters or modern
+ printers, and output to many file formats (eps, emf, fig, jpeg, LaTeX, pdf, png,
+ postscript, ...). Gnuplot is easily extensible to include new output modes.
+ Recent additions include interactive terminals based on wxWidgets (usable
+ on multiple platforms), and Qt. Mouseable plots embedded in web pages
+ can be generated using the svg or HTML5 canvas terminal drivers.
+
+ The command language of `gnuplot` is case sensitive, i.e. commands and
+ function names written in lowercase are not the same as those written in
+ capitals. All command names may be abbreviated as long as the abbreviation is
+ not ambiguous. Any number of commands may appear on a line, separated by
+ semicolons (;). Strings may be set off by either single or double quotes,
+ although there are some subtle differences. See `syntax` and `quotes` for
+ more details. Examples:
+
+ load "filename"
+ cd 'dir'
+
+ Commands may extend over several input lines by ending each line but the last
+ with a backslash (\). The backslash must be the _last_ character on each
+ line. The effect is as if the backslash and newline were not there. That
+ is, no white space is implied, nor is a comment terminated. Therefore,
+ commenting out a continued line comments out the entire command
+ (see `comments`). But note that if an error occurs somewhere on a multi-line
+ command, the parser may not be able to locate precisely where the error is
+ and in that case will not necessarily point to the correct line.
+
+ In this document, curly braces ({}) denote optional arguments and a vertical
+ bar (|) separates mutually exclusive choices. `Gnuplot` keywords or `help`
+ topics are indicated by backquotes or `boldface` (where available). Angle
+ brackets (<>) are used to mark replaceable tokens. In many cases, a default
+ value of the token will be taken for optional arguments if the token is
+ omitted, but these cases are not always denoted with braces around the angle
+ brackets.
+
+ For built-in help on any topic, type `help` followed by the name of the topic
+ or `help ?` to get a menu of available topics.
+
+ The new `gnuplot` user should begin by reading about `plotting` (if in an
+ interactive session, type `help plotting`).
+
+ See the simple.dem demo, also available together with other demos on the web page
+ http://www.gnuplot.info/demo/
+ `Gnuplot` can be started from a command line or from an icon according to the
+ desktop environment. Running it from command line can take the syntax
+ gnuplot {OPTIONS} file1 file2 ...
+ where file1, file2, etc. are input file as in the `load` command.
+ On X11-based systems, you can use
+ gnuplot {X11OPTIONS} {OPTIONS} file1 file2 ...
+ see your X11 documentation and `x11` in this document.
+
+ Options interpreted by gnuplot may come anywhere on the line. Files are
+ executed in the order specified, as are commands supplied by the -e option,
+ for example
+ gnuplot file1.in -e "reset" file2.in
+
+ The special filename "-" is used to force reading from stdin. `Gnuplot` exits
+ after the last file is processed. If no load files are named, `Gnuplot` takes
+ interactive input from stdin. See help `batch/interactive` for more details.
+ The options specific to gnuplot can be listed by typing
+ gnuplot --help
+ See `command line options` for more details.
+
+ In sessions with an interactive plot window you can hit 'h' anywhere on the
+ plot for help about `hotkeys` and `mousing` features.
+ Section `seeking-assistance` will help you to find further information, help
+ and FAQ.
+?help-desk
+?seeking-assistance
+?faq
+?FAQ
+ The canonical gnuplot web page can be found at
+ http://www.gnuplot.info
+
+ Before seeking help, please check file FAQ.pdf or the above website for
+ FAQ (Frequently Asked Questions) list.
+
+ If you need help as a gnuplot user, please use the newsgroup
+ comp.graphics.apps.gnuplot
+ We prefer that you read the messages through the newsgroup rather than
+ subscribing to the mailing list which is also available and carries the same
+ set of messages. 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 uploaded to the trackers at
+ http://sourceforge.net/projects/gnuplot/support
+ Please check previous bug reports if the bug you want to report has not been
+ already fixed in a newer version of gnuplot.
+
+ A mailing list for those interested in development version of gnuplot is:
+ gnuplot-beta@lists.sourceforge.net
+
+ When posting a question, please include full details of the gnuplot version,
+ the terminal type, and the operating system you are using. A _small_ script
+ demonstrating the problem may be useful. Function plots are preferable to
+ datafile plots.
+
+?new-features
+ This section lists major additions since version 4.4.
+ For a more exhaustive list, see the NEWS file.
+
+ This version of gnuplot introduces command iteration and block-structured
+ if/else/while/do constructs. See `if`, `while`, and `do`.
+ Simple iteration is possible inside `plot` or `set` commands.
+ See `iteration`. General iteration spanning multiple
+ commands is possible using a block construct as shown below.
+ For a related new feature, see the `summation` expression type.
+ Here is an example using several of these new syntax features:
+ set multiplot layout 2,2
+ fourier(k, x) = sin(3./2*k)/k * 2./3*cos(k*x)
+ do for [power = 0:3] {
+ TERMS = 10**power
+ set title sprintf("%g term Fourier series",TERMS)
+ plot 0.5 + sum [k=1:TERMS] fourier(k,x) notitle
+ }
+ unset multiplot
+
+ It is now possible to select a column of data from a data file by
+ matching a label in the first row of the file. See `columnhead`.
+ For example
+ plot for [crop in "Oats Peas Beans"] 'data' using "Year":crop
+
+ You can now customize properties (color, linewidth, point type) of the
+ default sequence of linetypes used in plotting. See `set linetype`.
+ This is normally done in an initialization file, either the system-wide
+ file `gnuplotrc` or a private file `~/.gnuplot`. See `initialization`.
+
+ Most terminals now allow you to set an explicit background color for the plot.
+ The special linetype `bgnd` can be used to draw in this color. See `bgnd`.
+
+ See documentation for plot styles `boxplot`, `circles`, `ellipses`, and
+ `fillsteps`.
+
+ Polar plot mode has been reworked to support additional plot styles.
+ The polar axes can now be drawn and labeled independent of the x and y
+ axes. See `set polar` and `set rrange`.
+
+ New smoothing algorithms have been added for both 2- and 3-dimensional plots.
+ `smooth kdensity` and `smooth cumulative` can be used with `plot` to draw
+ smooth histograms and cumulative distribution functions. Several new smoothing
+ kernels have been added to `dgrid3d` for use with `splot`.
+ See `smooth` `dgrid3d`.
+
+ Gnuplot now tracks time to millisecond precision. Time formats have been
+ modified to match this. The new built-in function time() returns the current
+ time of day according to the system clock.
+ Example: print the current time to msec precision
+ print strftime("%H:%M:%.3S %d-%b-%Y",time(0.0))
+ 18:15:04.253 16-Apr-2011
+ The new `stats` command reads data from a file using the same syntax as
+ the `plot` or `splot` commands. Rather than drawing a graph, it prints
+ out a statistical summary of the data contained in the column[s] requested.
+ The resulting statistics min, max, mean, standard deviation, correlation,
+ etc. are also stored in named variables that can be used to compose or modify
+ subsequent plotting commands. See `stats`.
+
+ The `qt` driver implements an interactive terminal on top of the Qt
+ graphics layer. It can function either as a window in a full-featured
+ desktop enviroment or as a full-screen application on a Qt-based
+ embedded device. The `qt` terminal is new and may still have some
+ rough edges.
+
+ Two terminal types support web-based interactive display. The HTML5 `canvas`
+ terminal was introduced in version 4.4. The `svg` terminal has been extensively
+ revised to include support for mousing and better incorporation of svg plots
+ from gnuplot into larger svg/xml documents.
+
+ The `canvas` terminal driver produces javascript output that draws onto the
+ HTML canvas element of a web page. It can produce either a complete web page
+ containing a single plot, or a script that can be embedded as part of an
+ externally generated HTML document that perhaps contains multiple plots.
+ The embedded plots support browser-side mousing, including zoom/unzoom.
+
+ The `lua` terminal driver creates data intended to be further processed
+ by a script in the lua programming language. At this point only one such
+ lua script, gnuplot-tikz.lua, is available. It produces a TeX document
+ suitable for use with the latex TikZ package. Other lua scripts could be
+ written to process the gnuplot output for use with other TeX packages,
+ or with other non-TeX tools.
+
+ `set term tikz` is shorthand for `set term lua tikz`. As decribed above, it
+ uses the generic lua terminal and an external lua script to produce a latex
+ document.
+
+ The `context` terminal driver creates output to be further processed by
+ the ConTeXt TeX macro package. To process its output, you additionally require
+ the gnuplot module for ConTeXt available at
+ http://ctan.org/pkg/context-gnuplot
+
+ The `epscairo` terminal uses the cairo and pango libraries to create
+ encapsulated postscript (eps) ouput. It is an alternative to the `postscript`
+ terminal driver for those who would like to have their eps files look equal
+ to e.g. screen output by the `wxt` terminal.
+
+ The `cairolatex` terminal uses the cairo backend of the `pdfcairo` or
+ `epscairo` terminal to produce graphs for inclusion in LaTeX documents. It
+ creates pdf or eps graphics but transfers texts to LaTeX in the same way as
+ the `epslatex` terminal.
+
+ The `windows` terminal driver has been revised to suport transparency,
+ antialiasing, buffered output, multiple graph windows and copying to clipboard
+ and saving of graphs as emf files. It has many new options and a revised user
+ interface. Additionaly, the code of the text console has been largely rewritten
+ to support wrapping of long lines. Help is now provided via HTML.
+
+?backwards compatibility
+?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 enabled as follows:
+
+ ./configure --enable-backwards-compatibility
+
+ Notice: Deprecated syntax items may be removed entirely 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
+
+?batch/interactive
+?command line options
+ `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 either program options (first
+ character is -) or names of files containing `gnuplot` commands. The option
+ -e "command" may be used to force execution of a gnuplot command. Each file
+ or command string will be executed in the order specified. The special
+ filename "-" is indicates that commands are to be read from stdin.
+ `Gnuplot` exits after the last file is processed. If no load files and no
+ command strings are specified, `gnuplot` accepts interactive input from
+ stdin.
+
+ 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
+
+ To give `gnuplot` commands directly in the command line, using the "-persist"
+ option so that the plot remains on the screen afterwards:
+ gnuplot -persist -e "set title 'Sine curve'; plot sin(x)"
+
+ To set user-defined variables a and s prior to executing commands from a file:
+ gnuplot -e "a=2; s='file.png'" input.gpl
+
+?canvas size
+?canvas
+?set term 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.
+ Since version 4.4 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.
+
+?line-editing
+?editing
+?command-line-editing
+ Command-line editing and command history are supported using either an
+ external gnu readline library, an external BSD libedit library, or a
+ built-in equivalent. This choice is a configuration option at the time
+ gnuplot is built.
+
+ The editing commands of the built-in version are given below. Please note that
+ the action of the DEL key is system-dependent. The gnu readline and BSD libedit
+ libraries have their own documentation.
+
+ `Line-editing`:
+
+ ^B moves back a single character.
+ ^F moves forward a single character.
+ ^A moves to the beginning of the line.
+ ^E moves to the end of the line.
+ ^H deletes the previous character.
+ DEL deletes the current character.
+ ^D deletes current character, sends EOF if the line is empty.
+ ^K deletes from current position to the end of line.
+ ^L,^R redraws line in case it gets trashed.
+ ^U deletes the entire line.
+ ^W deletes previous word.
+
+ `History`:
+
+ ^P moves back through history.
+ ^N moves forward through history.
+
+?comments
+ Comments are supported as follows: a `#` may appear in most places in a line
+ and `gnuplot` will ignore the rest of the line. It will not have this effect
+ inside quotes, inside numbers (including complex numbers), inside command
+ substitutions, etc. In short, it works anywhere it makes sense to work.
+
+ See also `set datafile commentschars` for specifying comment characters in
+ data files. Note that if a comment line ends in '\' then the subsequent
+ line is also treated as a comment.
+?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 xyplane`); `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` and `set timefmt`. `Gnuplot` will also accept an integer
+ expression, which will be interpreted as seconds from 1 January 2000.
+?datastrings
+ Data files may contain string data consisting 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 (i.e. the column heading) 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) with lines title columnhead(2)
+
+ Another example:
+
+ plot for [i=2:6] 'datafile' using i title "Results for ".columnhead(i)
+
+ See `set style labels`, `using xticlabels`, `plot title`, `using`.
+?enhanced text
+?enhanced
+ Many terminal types support an enhanced text mode in which additional
+ formatting information is embedded in the text string. For example, "x^2"
+ will write x-squared as we are used to seeing it, with a superscript 2.
+ This mode is normally selected when you set the terminal, e.g.
+ "set term png enhanced", but may also be toggled afterward using
+ "set termoption enhanced", or by marking individual strings as in
+ "set label 'x_2' noenhanced".
+
+ Control Examples Explanation
+ ^ a^x superscript
+ _ a_x subscript
+ @ @x or a@^b_{cd} phantom box (occupies no width)
+ & &{space} inserts space of specified length
+ ~ ~a{.8-} overprints '-' on 'a', raised by .8
+ times the current fontsize
+
+
+ Braces can be used to place multiple-character text where a single character
+ is expected (e.g., 2^{10}). To change the font and/or size, use the full form:
+ {/[fontname][=fontsize | *fontscale] text}. Thus {/Symbol=20 G} is a 20 pt
+ GAMMA and {/*0.75 K} is a K at three-quarters of whatever fontsize is currently
+ in effect. (The '/' character MUST be the first character after the '{'.)
+
+ The phantom box is useful for a@^b_c to align superscripts and subscripts
+ but does not work well for overwriting an accent on a letter. For the latter,
+ it is much better to use an encoding (e.g. iso_8859_1 or utf8) that contains
+ a large variety of letters with accents or other diacritical marks. See
+ `set encoding`. Since the box is non-spacing, it is sensible to put the shorter
+ of the subscript or superscript in the box (that is, after the @).
+
+ Space equal in length to a string can be inserted using the '&' character.
+ Thus
+ 'abc&{def}ghi'
+ would produce
+ 'abc ghi'.
+
+ The '~' character causes the next character or bracketed text to be
+ overprinted by the following character or bracketed text. The second text
+ will be horizontally centered on the first. Thus '~a/' will result in an 'a'
+ with a slash through it. You can also shift the second text vertically by
+ preceding the second text with a number, which will define the fraction of the
+ current fontsize by which the text will be raised or lowered. In this case
+ the number and text must be enclosed in brackets because more than one
+ character is necessary. If the overprinted text begins with a number, put a
+ space between the vertical offset and the text ('~{abc}{.5 000}'); otherwise
+ no space is needed ('~{abc}{.5---}'). You can change the font for one or
+ both strings ('~a{.5 /*.2 o}'---an 'a' with a one-fifth-size 'o' on top---and
+ the space between the number and the slash is necessary), but you can't
+ change it after the beginning of the string. Neither can you use any other
+ special syntax within either string. You can, of course, use control
+ characters by escaping them (see below), such as '~a{\^}'
+
+ You can access special symbols numerically by specifying \character-code (in
+ octal), e.g., {/Symbol \245} is the symbol for infinity. This does not work
+ for multibyte encodings like UTF-8, however. In a UTF-8 environment, you
+ should be able to enter multibyte sequences implicitly by typing or otherwise
+ selecting the character you want.
+
+ You can escape control characters using \, e.g., \\, \{, and so on.
+
+ But be aware that strings in double-quotes are parsed differently than those
+ enclosed in single-quotes. The major difference is that backslashes may need
+ to be doubled when in double-quoted strings.
+
+ Examples (these are hard to describe in words---try them!):
+ set xlabel 'Time (10^6 {/Symbol m}s)'
+ set title '{/Symbol=18 \\362@_{/=9.6 0}^{/=12 x}} \\
+ {/Helvetica e^{-{/Symbol m}^2/2} d}{/Symbol m}'
+
+ The file "ps_guide.ps" in the /docs/psdoc subdirectory of the gnuplot source
+ distribution contains more examples of the enhanced syntax.
+?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 `startup`) and, of course, by later explicit changes.
+
+ 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 MS-DOS, Windows and OS/2,
+ GNUPLOT is used. On Windows, the NT-specific variable USERPROFILE is also
+ tried. VMS, SYS$LOGIN: is used. Type `help startup`.
+
+ On Unix, PAGER is used as an output filter for help messages.
+
+ On Unix, SHELL is used for the `shell` command. On MS-DOS and OS/2, COMSPEC
+ is used for the `shell` command.
+
+ FIT_SCRIPT may be used to specify a `gnuplot` command to be executed when a
+ fit is interrupted---see `fit`. FIT_LOG specifies the default filename of the
+ logfile maintained by fit.
+
+ GNUPLOT_LIB may be used to define additional search directories for data
+ and command files. The variable may contain a single directory name, or
+ a list of directories separated by a platform-specific path separator,
+ eg. ':' on Unix, or ';' on DOS/Windows/OS/2 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 search for external
+ prologue files. Depending on the build process, gnuplot contains either a
+ built-in copy of those files or a default hardcoded path. You can use this
+ variable have the postscript terminal use custom prologue files rather than
+ the default files. See `postscript prologue`.
+?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. Or you can use the pre-defined variable NaN
+ to achieve the same result. See `using` for an example.
+
+ The real and imaginary parts of complex expressions are always real, whatever
+ the form in which they are entered: in {3,2} the "3" and "2" are reals, not
+ integers.
+
+ 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.
+?expressions functions
+ The math 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.
+ Functions that accept or return angles (e.g. sin(x), cos(x), arg(z))
+ treat angle values as radians, but this may be changed to degrees using the
+ command `set angles`.
+
+
+
+
+
+
+?expressions functions abs
+?abs
+ The `abs(x)` function returns the absolute value of its argument. The
+ returned value is of the same type as the argument.
+
+ For complex arguments, abs(x) is defined as the length of x in the complex
+ plane [i.e., sqrt(real(x)**2 + imag(x)**2) ].
+?expressions functions acos
+?acos
+ The `acos(x)` function returns the arc cosine (inverse cosine) of its
+ argument. `acos` returns its argument in radians or degrees, as selected by
+ `set angles`.
+?expressions functions acosh
+?acosh
+ The `acosh(x)` function returns the inverse hyperbolic cosine of its argument
+ in radians.
+?expressions functions airy
+?airy
+ The `airy(x)` function returns the value of the Airy function Ai(x) of its
+ argument. The function Ai(x) is that solution of the equation y'' - x y = 0
+ which is everywhere finite. If the argument is complex, its imaginary part
+ is ignored.
+?expressions functions arg
+?arg
+ The `arg(x)` function returns the phase of a complex number in radians or
+ degrees, as selected by `set angles`.
+?expressions functions asin
+?asin
+ The `asin(x)` function returns the arc sin (inverse sin) of its argument.
+ `asin` returns its argument in radians or degrees, as selected by `set
+ angles`.
+?expressions functions asinh
+?asinh
+ The `asinh(x)` function returns the inverse hyperbolic sin of its argument in
+ radians.
+?expressions functions atan
+?atan
+ The `atan(x)` function returns the arc tangent (inverse tangent) of its
+ argument. `atan` returns its argument in radians or degrees, as selected by
+ `set angles`.
+?expressions functions atan2
+?atan2
+ The `atan2(y,x)` function returns the arc tangent (inverse tangent) of the
+ ratio of the real parts of its arguments. `atan2` returns its argument in
+ radians or degrees, as selected by `set angles`, in the correct quadrant.
+?expressions functions atanh
+?atanh
+ The `atanh(x)` function returns the inverse hyperbolic tangent of its
+ argument in radians.
+ See `elliptic integrals`.
+ See `elliptic integrals`.
+ See `elliptic integrals`.
+?expressions functions besj0
+?besj0
+ The `besj0(x)` function returns the j0th Bessel function of its argument.
+ `besj0` expects its argument to be in radians.
+?expressions functions besj1
+?besj1
+ The `besj1(x)` function returns the j1st Bessel function of its argument.
+ `besj1` expects its argument to be in radians.
+?expressions functions besy0
+?besy0
+ The `besy0(x)` function returns the y0th Bessel function of its argument.
+ `besy0` expects its argument to be in radians.
+?expressions functions besy1
+?besy1
+ The `besy1(x)` function returns the y1st Bessel function of its argument.
+ `besy1` expects its argument to be in radians.
+?expressions functions ceil
+?ceil
+ The `ceil(x)` function returns the smallest integer that is not less than its
+ argument. For complex numbers, `ceil` returns the smallest integer not less
+ than the real part of its argument.
+?expressions functions cos
+?cos
+ The `cos(x)` function returns the cosine of its argument. `cos` accepts its
+ argument in radians or degrees, as selected by `set angles`.
+?expressions functions cosh
+?cosh
+ The `cosh(x)` function returns the hyperbolic cosine of its argument. `cosh`
+ expects its argument to be in radians.
+?expressions functions erf
+?erf
+ The `erf(x)` function returns the error function of the real part of its
+ argument. If the argument is a complex value, the imaginary component is
+ ignored. See `erfc`, `inverf`, and `norm`.
+?expressions functions erfc
+?erfc
+ The `erfc(x)` function returns 1.0 - the error function of the real part of
+ its argument. If the argument is a complex value, the imaginary component is
+ ignored. See `erf`, `inverf`, and `norm`.
+?expressions functions exp
+?exp
+ The `exp(x)` function returns the exponential function of its argument (`e`
+ raised to the power of its argument). On some implementations (notably
+ suns), exp(-x) returns undefined for very large x. A user-defined function
+ like safe(x) = x<-100 ? 0 : exp(x) might prove useful in these cases.
+?expressions functions expint
+?expint
+ The `expint(n,x)` function returns the exponential integral of the real
+ part of its argument: integral from 1 to infinity of t^(-n) e^(-tx) dt.
+ n must be a nonnegative integer, x>=0, and either x>0 or n>1.
+?expressions functions floor
+?floor
+ The `floor(x)` function returns the largest integer not greater than its
+ argument. For complex numbers, `floor` returns the largest integer not
+ greater than the real part of its argument.
+?expressions functions gamma
+?gamma
+ The `gamma(x)` function returns the gamma function of the real part of its
+ argument. For integer n, gamma(n+1) = n!. If the argument is a complex
+ value, the imaginary component is ignored.
+?expressions functions ibeta
+?ibeta
+ The `ibeta(p,q,x)` function returns the incomplete beta function of the real
+ parts of its arguments. p, q > 0 and x in [0:1]. If the arguments are
+ complex, the imaginary components are ignored. The function is approximated by
+ the method of continued fractions (Abramowitz and Stegun, 1964).
+ The approximation is only accurate in the region x < (p-1)/(p+q-2).
+?expressions functions inverf
+?inverf
+ The `inverf(x)` function returns the inverse error function of the real part
+ of its argument. See `erf` and `invnorm`.
+?expressions functions igamma
+?igamma
+ The `igamma(a,x)` function returns the normalized incomplete gamma
+ function of the real parts of its arguments, where a > 0 and x >= 0.
+ The standard notation is P(a,x), e.g. Abramowitz and Stegun (6.5.1),
+ with limiting value of 1 as x approaches infinity. If the arguments
+ are complex, the imaginary components are ignored.
+?expressions functions imag
+?imag
+ The `imag(x)` function returns the imaginary part of its argument as a real
+ number.
+?expressions functions invnorm
+?invnorm
+ The `invnorm(x)` function returns the inverse cumulative normal (Gaussian)
+ distribution function of the real part of its argument. See `norm`.
+?expressions functions int
+?int
+ The `int(x)` function returns the integer part of its argument, truncated
+ toward zero.
+?expressions functions lambertw
+?lambertw
+ The lambertw function returns the value of the principal branch of
+ Lambert's W function, which is defined by the equation (W(z)*exp(W(z))=z.
+ z must be a real number with z >= -exp(-1).
+?expressions functions lgamma
+?lgamma
+ The `lgamma(x)` function returns the natural logarithm of the gamma function
+ of the real part of its argument. If the argument is a complex value, the
+ imaginary component is ignored.
+?expressions functions log
+?log
+ The `log(x)` function returns the natural logarithm (base `e`) of its
+ argument. See `log10`.
+?expressions functions log10
+?log10
+ The `log10(x)` function returns the logarithm (base 10) of its argument.
+?expressions functions norm
+?norm
+ The `norm(x)` function returns the cumulative normal (Gaussian) distribution
+ function of the real part of its argument. See `invnorm`, `erf` and `erfc`.
+?expressions functions rand
+?rand
+ `rand(0)` returns a pseudo random number in the interval [0:1].
+ See `random` for more details.
+?expressions functions real
+?real
+ The `real(x)` function returns the real part of its argument.
+?expressions functions sgn
+?sgn
+ The `sgn(x)` function returns 1 if its argument is positive, -1 if its
+ argument is negative, and 0 if its argument is 0. If the argument is a
+ complex value, the imaginary component is ignored.
+?expressions functions sin
+?sin
+ The `sin(x)` function returns the sine of its argument. `sin` expects its
+ argument to be in radians or degrees, as selected by `set angles`.
+?expressions functions sinh
+?sinh
+ The `sinh(x)` function returns the hyperbolic sine of its argument. `sinh`
+ expects its argument to be in radians.
+?expressions functions sqrt
+?sqrt
+ The `sqrt(x)` function returns the square root of its argument.
+?expressions functions tan
+?tan
+ The `tan(x)` function returns the tangent of its argument. `tan` expects
+ its argument to be in radians or degrees, as selected by `set angles`.
+?expressions functions tanh
+?tanh
+ The `tanh(x)` function returns the hyperbolic tangent of its argument. `tanh`
+ expects its argument to be in radians.
+?expressions functions voigt
+?voigt
+ The function `voigt(x,y)` returns an approximation to the Voigt/Faddeeva
+ function used in spectral analysis. The approximation is accurate to
+ one part in 10^4.
+
+?expressions functions gprintf
+ `gprintf("format",x)` applies gnuplot's own format specifiers to the single
+ variable x and returns the resulting string. If you want standard C-language
+ format specifiers, you must instead use `sprintf("format",x)`.
+ See `format specifiers`.
+?expressions functions sprintf
+?sprintf
+ `sprintf("format",var1,var2,...)` applies standard C-language format specifiers
+ to multiple arguments and returns the resulting string. If you want to
+ use gnuplot's own format specifiers, you must instead call `gprintf()`.
+ For information on sprintf format specifiers, please see standard C-language
+ documentation or the unix sprintf man page.
+?expressions functions strlen
+?strlen
+ `strlen("string")` returns the length of the string in bytes. If the current
+ encoding supports multibyte characters, this may be larger than the number of
+ characters in the string.
+?expressions functions strstrt
+?strstrt
+ `strstrt("string","key")` searches for the character string "key" in "string"
+ and returns the index to the first character of "key". If "key" is not found,
+ returns 0. Similar to C library function strstr except that it returns an
+ index rather than a string pointer. strstrt("hayneedlestack","needle") = 4.
+?expressions functions substr
+?substr
+ `substr("string",beg,end)` returns the substring consisting of characters
+ beg through end of the original string. This is exactly equivalent to the
+ expression "string"[beg:end] except that you do not have the option of
+ omitting beg or end.
+?expressions functions strftime
+?strftime
+ `strftime("timeformat",t)` applies the timeformat specifiers to the time t
+ given in seconds since the year 2000.
+ See `time_specifiers` and `strptime`.
+?expressions functions strptime
+?strptime
+ `strptime("timeformat",s)` reads the time from the string s using the
+ timeformat specifiers and converts it into seconds since the year 2000.
+ See `time_specifiers` and `strftime`.
+?expressions functions system
+ `system("command")` executes "command" using the standard shell and returns
+ the resulting character stream from stdout as string variable.
+ One optional trailing newline is ignored.
+
+ This can be used to import external functions into gnuplot scripts using
+ 'f(x) = real(system(sprintf("somecommand %f", x)))'.
+?expressions functions word
+?word
+ `word("string",n)` returns the nth word in string. For example,
+ `word("one two three",2)` returns the string "two".
+?expressions functions words
+?words
+ `words("string")` returns the number of words in string. For example,
+ `words(" a b c d")` returns 4.
+
+?expressions functions column
+?column
+ `column(x)` may be used only in expressions as part of `using` manipulations
+ to fits or datafile plots. It evaluates to the numerical value of the contents
+ of column x. See `plot datafile using`.
+?expressions functions columnhead
+?columnhead
+ `columnhead(x)` may only be used in expressions as part of `using` manipulations
+ to fits or datafile plots. It evaluates to a string containing the contents of
+ column x in the first line of data. See `plot datafile using`.
+?expressions functions defined
+?defined
+ `defined(X)` [DEPRECATED] returns 1 if a variable named X has been defined, otherwise
+ it returns 0. Please use `exists("X")` instead.
+?expressions functions exists
+?exists
+ The argument to exists() is a string constant or a string variable;
+ if the string contains the name of a defined variable, the function returns 1.
+ Otherwise the function returns 0.
+?expressions functions stringcolumn
+?stringcolumn
+?expressions functions strcol
+?strcol
+ `stringcolumn(x)` may be used only in expressions as part of `using` manipulations
+ to fits or datafile plots. It returns the content of column x as a string variable.
+ See `plot datafile using`.
+?expressions functions timecolumn
+?timecolumn
+ `timecolumn(x)` may be used only in expressions as part of `using`
+ manipulations to fits or datafile plots. See `plot datafile using`.
+
+ It reads the data starting at that column as a time/date value and
+ returns its value in gnuplot's internal time representation of
+ "seconds since the millennium".
+
+ To find the right `timefmt` string to use, `timecolumn` searches for a
+ `using` specification with the same column number as its argument.
+ If one is found, `timefmt` pattern of the target axis for this specifier
+ is used. Otherwise, `timecolumn` chooses the x axis `timefmt` per default.
+?expressions tm_hour
+?tm_hour
+ The `tm_hour` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the hour (an integer in the range 0--23) as a real.
+?expressions tm_mday
+?tm_mday
+ The `tm_mday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the day of the month (an integer in the range 1--31)
+ as a real.
+?expressions tm_min
+?tm_min
+ The `tm_min` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the minute (an integer in the range 0--59) as a real.
+?expressions tm_mon
+?tm_mon
+ The `tm_mon` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the month (an integer in the range 0--11) as a real.
+?expressions tm_sec
+?tm_sec
+ The `tm_sec` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the second (an integer in the range 0--59) as a real.
+?expressions tm_wday
+?tm_wday
+ The `tm_wday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the day of the week (an integer in the range 0--6) as
+ a real.
+?expressions tm_yday
+?tm_yday
+ The `tm_yday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the day of the year (an integer in the range 1--366)
+ as a real.
+?expressions tm_year
+?tm_year
+ The `tm_year` function interprets its argument as a time, in seconds from
+ 1 Jan 2000. It returns the year (an integer) as a real.
+?expressions time
+?time
+ The `time` function returns the current system time. This value can be
+ converted to a date string with the `strftime` function, or it can be used
+ in conjunction with `timecolumn` to generate relative time/date plots.
+ The type of the argument determines what is returned. If the argument is an
+ integer, time() returns the current time as an integer, in seconds from
+ 1 Jan 2000. If the argument is real (or complex), the result is real as well.
+ If the argument is a string, it is assumed to be a format string,
+ and it is passed to `strftime` to provide a formatted time string.
+?expressions functions valid
+?valid
+ `valid(x)` may be used only in expressions as part of `using` manipulations
+ to fits or datafile plots. See `plot datafile using`.
+
+
+?expressions functions elliptic integrals
+?elliptic integrals
+ The `EllipticK(k)` function returns the complete elliptic integral of the first
+ kind, i.e. the definite integral between 0 and pi/2 of the function
+ `(1-(k*sin(p))**2)**(-0.5)`. The domain of `k` is -1 to 1 (exclusive).
+
+ The `EllipticE(k)` function returns the complete elliptic integral of the
+ second kind, i.e. the definite integral between 0 and pi/2 of the function
+ `(1-(k*sin(p))**2)**0.5`. The domain of `k` is -1 to 1 (inclusive).
+
+ The `EllipticPi(n,k)` function returns the complete elliptic integral of the
+ third kind, i.e. the definite integral between 0 and pi/2 of the function
+ `(1-(k*sin(p))**2)**(-0.5)/(1-n*sin(p)**2)`. The parameter `n` must be less
+ than 1, while `k` must lie between -1 and 1 (exclusive). Note that by
+ definition EllipticPi(0,k) == EllipticK(k) for all possible values of `k`.
+?expressions random
+?random
+ The function `rand()` produces a sequence of pseudo-random numbers between
+ 0 and 1 using an algorithm from P. L'Ecuyer and S. Cote, "Implementing a
+ random number package with splitting facilities", ACM Transactions on
+ Mathematical Software, 17:98-111 (1991).
+
+ 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 integer 0 < x < 2^31-1 sets both internal seeds
+ to x.
+ rand({x,y}) for integer 0 < x,y < 2^31-1 sets seed1 to x and
+ seed2 to y.
+?expressions functions value
+?value
+ B = value("A") is effectively the same as B = A, where A is the name of a
+ user-defined variable. This is useful when the name of the variable is itself
+ held in a string variable. See `user-defined variables`. It also allows you to
+ read the name of a variable from a data file. If the argument is a numerical
+ expression, value() returns the value of that expression. If the argument is a
+ string that does not correspond to a currently defined variable,
+ value() returns NaN.
+
+?expressions operators
+?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.
+?expressions operators unary
+?operators unary
+?unary
+ The following is a list of all the unary operators and their usages:
+
+ Symbol Example Explanation
+ - -a unary minus
+ + +a unary plus (no-operation)
+ ~ ~a * one's complement
+ ! !a * logical negation
+ ! a! * factorial
+ $ $3 * call arg/column during `using` manipulation
+
+
+ (*) Starred explanations indicate that the operator requires an integer
+ argument.
+
+ Operator precedence is the same as in Fortran and C. As in those languages,
+ parentheses may be used to change the order of operation. Thus -2**2 = -4,
+ but (-2)**2 = 4.
+
+ The factorial operator returns a real number to allow a greater range.
+?expressions operators binary
+?operators binary
+ The following is a list of all the binary operators and their usages:
+
+ Symbol Example Explanation
+ ** a**b exponentiation
+ * a*b multiplication
+ / a/b division
+ % a%b * modulo
+ + a+b addition
+ - a-b subtraction
+ == a==b equality
+ != a!=b inequality
+ < a<b less than
+ <= a<=b less than or equal to
+ > a>b greater than
+ >= a>=b greater than or equal to
+ & a&b * bitwise AND
+ ^ a^b * bitwise exclusive OR
+ | a|b * bitwise inclusive OR
+ && a&&b * logical AND
+ || a||b * logical OR
+ = a = b assignment
+ , (a,b) serial evaluation
+ . 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.
+
+ Serial evaluation occurs only in parentheses and is guaranteed to proceed
+ in left to right order. The value of the rightmost subexpression is returned.
+?expressions operators ternary
+?operators ternary
+?ternary
+ There is a single ternary operator:
+
+ Symbol Example Explanation
+ ?: a?b:c ternary operation
+
+
+
+ The ternary operator behaves as it does in C. The first argument (a), which
+ must be an integer, is evaluated. If it is true (non-zero), the second
+ argument (b) is evaluated and returned; otherwise the third argument (c) is
+ evaluated and returned.
+
+ The ternary operator is very useful both in constructing piecewise functions
+ and in plotting points only when certain conditions are met.
+
+ Examples:
+
+ Plot a function that is to equal sin(x) for 0 <= x < 1, 1/x for 1 <= x < 2,
+ and undefined elsewhere:
+ f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0
+ plot f(x)
+ Note that `gnuplot` quietly ignores undefined values, so the final branch of
+ the function (1/0) will produce no plottable points. Note also that f(x)
+ will be plotted as a continuous function across the discontinuity if a line
+ style is used. To plot it discontinuously, create separate functions for the
+ two pieces. (Parametric functions are also useful for this purpose.)
+
+ For data in a file, plot the average of the data in columns 2 and 3 against
+ the datum in column 1, but only if the datum in column 4 is non-negative:
+
+ plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 )
+
+ For an explanation of the `using` syntax, please see `plot datafile using`.
+?expressions operators summation
+?operators summation
+?summation
+ A summation expression has the form
+ sum [<var> = <start> : <end>] <expression>
+ <var> is treated as an integer variable that takes on successive integral
+ values from <start> to <end>. For each of these, the current value of
+ <expression> is added to a running total whose final value becomes the value
+ of the summation expression.
+ Examples:
+ print sum [i=1:10] i
+ 55.
+ # Equivalent to plot 'data' using 1:($2+$3+$4+$5+$6+...)
+ plot 'data' using 1 : (sum [col=2:MAXCOL] column(col))
+ It is not necessary that <expression> contain the variable <var>.
+ Although <start> and <end> can be specified as variables or expressions,
+ their value cannot be changed dynamically as a side-effect of carrying
+ out the summation. If <end> is less than <start> then the value of the
+ summation is zero.
+?expressions gnuplot-defined
+?gnuplot-defined
+?gnuplot-defined variables
+?GPVAL
+?gpval
+ Gnuplot maintains a number of read-only variables that reflect the current
+ internal state of the program and the most recent plot. These variables begin
+ with the prefix "GPVAL_".
+ Examples include GPVAL_TERM, GPVAL_X_MIN, GPVAL_X_MAX, GPVAL_Y_MIN.
+ Type `show variables all` to display the complete list and current values.
+ Values related to axes parameters (ranges, log base) are values used during the
+ last plot, not those currently `set`.
+
+ Example: To calculate the fractional screen coordinates of the point [X,Y]
+ GRAPH_X = (X - GPVAL_X_MIN) / (GPVAL_X_MAX - GPVAL_X_MIN)
+ GRAPH_Y = (Y - GPVAL_Y_MIN) / (GPVAL_Y_MAX - GPVAL_Y_MIN)
+ SCREEN_X = GPVAL_TERM_XMIN + GRAPH_X * (GPVAL_TERM_XMAX - GPVAL_TERM_XMIN)
+ SCREEN_Y = GPVAL_TERM_YMIN + GRAPH_Y * (GPVAL_TERM_YMAX - GPVAL_TERM_YMIN)
+ FRAC_X = SCREEN_X / GPVAL_TERM_XSIZE
+ FRAC_Y = SCREEN_Y / GPVAL_TERM_YSIZE
+
+ The read-only variable GPVAL_ERRNO is set to a non-zero value if any gnuplot
+ command terminates early due to an error. The most recent error message is
+ stored in the string variable GPVAL_ERRMSG. Both GPVAL_ERRNO and GPVAL_ERRMSG
+ can be cleared using the command `reset errors`.
+
+ Interactive terminals with `mouse` functionality maintain read-only variables
+ with the prefix "MOUSE_". See `mouse variables` for details.
+
+ 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` for details.
+
+ See `user-defined variables`, `reset errors`, `mouse variables`, and `fit`.
+
+?expressions user-defined
+?user-defined variables
+?user-defined
+?variables
+ New user-defined variables and functions of one through twelve variables may
+ be declared and used anywhere, including on the `plot` command itself.
+
+ User-defined function syntax:
+ <func-name>( <dummy1> {,<dummy2>} ... {,<dummy12>} ) = <expression>
+
+ where <expression> is defined in terms of <dummy1> through <dummy12>.
+
+ 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` 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 "_".
+
+ Each function definition is made available as a special string-valued
+ variable with the prefix 'GPFUN_'.
+
+ Example:
+ set label GPFUN_sinc at graph .05,.95
+
+ See `show functions`, `functions`, `gnuplot-defined variables`, `macros`,
+ `value`.
+?fonts
+ Gnuplot does not provide any fonts of its own. It relies on external font
+ handling, the details of which unfortunately vary from one terminal type to
+ another. Brief documentation of font mechanisms that apply to more than one
+ terminal type is given here. For information on font use by other individual
+ terminals, see the documentation for that terminal.
+?fonts cairo
+ Sorry, this section is under construction.
+ These terminals find and access fonts using the external fontconfig tool set.
+ Please see the
+ fontconfig user manual.
+ It is usually sufficient in gnuplot to request a font by a generic name and
+ size, letting fontconfig substitute a similar font if necessary. The following
+ will probably all work:
+ set term pdfcairo font "sans,12"
+ set term pdfcairo font "Times,12"
+ set term pdfcairo font "Times-New-Roman,12"
+
+?gd
+?fonts gd
+ Font handling for the png, gif, and jpeg terminals is done by the external
+ library libgd. Five basic fonts are provided directly by libgd. These are
+ `tiny` (5x8 pixels), `small` (6x12 pixels), `medium`, (7x13 Bold), `large`
+ (8x16) or `giant` (9x15 pixels). These fonts cannot be scaled or rotated.
+ Use one of these keywords instead of the `font` keyword. E.g.
+ set term png tiny
+
+ On most systems libgd also provides access to Adobe Type 1 fonts (*.pfa) and
+ TrueType fonts (*.ttf). You must give the name of the font file, not the name
+ of the font inside it, in the form "<face> {,<pointsize>}".
+ <face> is either the full pathname to the font file, or the first part of a
+ filename in one of the directories listed in the GDFONTPATH environmental
+ variable. That is, 'set term png font "Face"' will look for a font file named
+ either <somedirectory>/Face.ttf or <somedirectory>/Face.pfa.
+ For example, if GDFONTPATH contains `/usr/local/fonts/ttf:/usr/local/fonts/pfa`
+ then the following pairs of commands are equivalent
+ set term png font "arial"
+ set term png font "/usr/local/fonts/ttf/arial.ttf"
+ set term png font "Helvetica"
+ set term png font "/usr/local/fonts/pfa/Helvetica.pfa"
+ To request a default font size at the same time:
+ set term png font "arial,11"
+
+ Both TrueType and Adobe Type 1 fonts are fully scalable and rotatable.
+ If no specific font is requested in the "set term" command, gnuplot checks
+ the environmental variable GNUPLOT_DEFAULT_GDFONT to see if there is a
+ preferred default font.
+?fonts postscript
+ PostScript font handling is done by the printer or viewing program.
+ Gnuplot can create valid PostScript or encapsulated PostScript (*.eps) even if
+ no fonts at all are installed on your computer. Gnuplot simply refers to the
+ font by name in the output file, and assumes that the printer or viewing
+ program will know how to find or approximate a font by that name.
+
+ All PostScript printers or viewers should know about the standard set of Adobe
+ fonts `Times-Roman`, `Helvetica`, `Courier`, and `Symbol`. It is likely that
+ many additional fonts are also available, but the specific set depends on your
+ system or printer configuration. Gnuplot does not know or care about this;
+ the output *.ps or *.eps files that it creates will simply refer to whatever
+ font names you request.
+
+ Thus
+ set term postscript eps font "Times-Roman,12"
+ will produce output that is suitable for all printers and viewers.
+
+ On the other hand
+ set term postscript eps font "Garamond-Premier-Pro-Italic"
+ will produce an output file that contains valid PostScript, but since it
+ refers to a specialized font, only some printers or viewers will be able to
+ display the specific font that was requested. Most will substitute a
+ different font.
+
+ However, it is possible to embed a specific font in the output file so that
+ all printers will be able to use it. This requires that the a suitable font
+ description file is available on your system. Note that some font files require
+ specific licensing if they are to be embedded in this way.
+ See `postscript fontfile` for more detailed description and examples.
+?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" or "canvas" is the entire area addressable by `gnuplot`.
+ On a desktop it is a full window; on a plotter, it is a single sheet of paper;
+ in svga mode it is the full monitor screen.
+
+ 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 2D graph may have up to four labelled `axes`. The names of the four axes
+ are "x" for the axis along the bottom border of the plot, "y" for the axis
+ along the left border, "x2" for the top border, and "y2" for the right border.
+ See `axes`.
+
+ A 3D 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.
+?linetypes
+?colors
+ 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).
+ Most terminals also recognize the special linetype "bgnd" to mean a solid line
+ in the background color.
+
+ You can redefine the default linetype properties either interactively or via an
+ initialization file. This allows you to customize the colors and other
+ properties of the lines used by all gnuplot plotting commands.
+ See `set linetype`.
+
+ By default, successive functions or datafiles plotted by a single command will
+ be assigned successive linetypes. You can override this default sequence 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 colornames`, `set palette`, `cbrange`.
+
+ For terminals that support dot/dash patterns, each default linetype has both
+ a dot-dash pattern and a default color. Gnuplot does not currently provide a
+ mechanism for changing the dot-dash pattern, so if you want both a particular
+ dash pattern and a particular color you must first choose a linetype that has
+ the required dash pattern, then override the default color 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'
+
+?colorspec
+?rgbcolor
+?lc
+?linecolor
+?tc
+?textcolor
+ Many commands allow you to specify a linetype with an explicit color.
+ Terminal-independent color choice is only possible for terminals that support
+ RGB color or pm3d palettes.
+
+ Syntax:
+
+ ... {linecolor | lc} {<colorspec> | <n>}
+ ... {textcolor | tc} {<colorspec> | {linetype | lt} <n>}
+
+ where <colorspec> has one of the following forms:
+
+ rgbcolor "colorname"
+ rgbcolor "#RRGGBB"
+ rgbcolor variable # color is read from input file
+ 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
+
+ The "<n>" is the linetype number the color of which is used, see `test`.
+
+ "colorname" refers to one of the color names built in to gnuplot. For a list
+ of the available names, see `show colornames`.
+
+ "#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).
+
+ 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`. See also `set colorbox`.
+ 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 (not all 2D plot styles allow an extra column).
+?background
+?bgnd
+ Most terminals now allow you to set an explicit background color for the plot.
+ The special linetype `bgnd` will draw in this color, and `bgnd` is also
+ recognized as a color.
+ Examples:
+ # This will erase a section of the canvas by writing over it in the
+ # background color
+ set term wxt background rgb "gray75"
+ set object 1 rectangle from x0,y0 to x1,y1 fillstyle solid fillcolor bgnd
+ # This will draw an "invisible" line along the x axis
+ plot 0 lt bgnd
+?linecolor variable
+?lc variable
+?textcolor variable
+?tc variable
+ `lc variable` tells the program to use the value read from one column of the
+ input data as a linetype index, and use the color belonging to that linetype.
+ This requires a corresponding additional column in the `using` specifier.
+ Text colors can be set similarly using `tc variable`.
+
+ Examples:
+ # Use the third column of data to assign colors to individual points
+ plot 'data' using 1:2:3 with points lc variable
+
+ # A single data file may contain multiple sets of data, separated by two
+ # blank lines. Each data set is assigned as index value (see `index`)
+ # that can be retrieved via the `using` specifier `column(-2)`.
+ # See `pseudocolumns`. This example uses to value in column -2 to
+ # draw each data set in a different line color.
+ plot 'data' using 1:2:(column(-2)) with lines lc variable
+
+?rgbcolor variable
+?lc rgbcolor variable
+?tc rgbcolor variable
+ You can assign a separate color for each data point, line segment, or label in
+ your plot. `lc rgbcolor variable` tells the program to read RGB color
+ information for each line in the data file. This requires a corresponding
+ additional column in the `using` specifier. The extra column is interpreted as
+ a 24-bit packed RGB triple. If the value is provided directly in the data file
+ it is easiest to give it as a hexidecimal value (see `rgbcolor`).
+ Alternatively, the `using` specifier can contain an expression that evaluates
+ to a 24-bit RGB color as in the example below.
+ Text colors are similarly set using `tc rgbcolor variable`.
+
+ Example:
+ # Place colored points in 3D at the x,y,z coordinates corresponding to
+ # their red, green, and blue components
+ 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
+
+? linestyles vs linetypes
+ 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 "linestyles" 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.
+
+ Whereas `linetypes` are permanent (they last until you explicitly redefine
+ them), `linestyles` are temporary. They only last until the next reset
+ of the graphics state.
+
+ 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
+
+?mouse input
+ Many terminals allow interaction with the current plot using the mouse. Some
+ also support the definition of hotkeys to activate pre-defined functions by
+ hitting a single key while the mouse focus is in the active plot window.
+ It is even possible to combine mouse input with `batch` command scripts, by
+ invoking the command `pause mouse` and then using the mouse variables returned
+ by mouse clicking as parameters for subsequent scripted actions.
+ See `bind` and `mouse variables`. See also the command `set mouse`.
+?commands bind
+?hotkey
+?hotkeys
+?bind
+ Syntax:
+ bind {allwindows} [<key-sequence>] ["<gnuplot commands>"]
+ bind <key-sequence> ""
+ reset 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. A user-specified binding supersedes any builtin
+ bindings, except that <space> and 'q' cannot normally be rebound. For an
+ exception, see `bind space`.
+
+ Only mouse button 1 can be bound, and only for 2D plots.
+
+ You get the list of all hotkeys by typing `show bind` or `bind` or by typing
+ the hotkey 'h' in the graph window.
+
+ Key bindings are restored to their default state by `reset bind`.
+
+ Note that multikey-bindings with modifiers must be given in quotes.
+
+ 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.
+
+ 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
+ show bind # show all bindings
+
+ - remove bindings:
+ bind "ctrl-alt-a" "" # removes binding for ctrl-alt-a
+ (note that builtins cannot be removed)
+ reset bind # installs default (builtin) bindings
+ bind! # deprecated form of "reset bind"
+
+ - 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"
+
+ The following are window events rather than actual keys
+
+ "Button1" "Close"
+
+ See also help for `mouse`.
+?commands bind space
+?bind space
+ If gnuplot was built with configuration option --enable-raise-console, then
+ typing <space> in the plot window raises gnuplot's command window. This hotkey
+ can be changed to ctrl-space by starting gnuplot as 'gnuplot -ctrlq', or by
+ setting the XResource 'gnuplot*ctrlq'. See `x11 command-line-options`.
+?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`.
+
+
+?plotting
+ There are three `gnuplot` commands which actually create a plot: `plot`,
+ `splot` and `replot`. `plot` generates 2D plots, `splot` generates 3D
+ plots (actually 2D 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 3D can be found in the `splot` section.
+
+ `plot` operates in either rectangular or polar coordinates -- see `set polar`
+ for details of the latter. `splot` operates only in rectangular coordinates,
+ but the `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 2D graphs.
+
+ `splot` can plot surfaces and contours in addition to points and/or lines.
+ See `set isosamples` for information about defining the grid for a 3D function.
+ See `splot datafile` for information about the requisite file structure for 3D
+ data values, `set contour` and `set cntrparam` for information about contours.
+
+ In `splot`, control over the scales and labels of the axes are the same as
+ with `plot`, except that commands and options controlling the x2 and y2 axes
+ have no effect whereas of course those controlling the z axis do take effect.
+?startup
+?start
+?start-up
+?initialization
+?.gnuplot
+ When gnuplot is run, it first looks for a system-wide initialization file named
+ `gnuplotrc`. The location of this file is determined when the program is built
+ and is reported by `show loadpath`. The program then looks in the user's HOME
+ directory for a file called `.gnuplot` on Unix-like systems or `GNUPLOT.INI` on
+ other systems. (Windows and OS/2 will look for it in the directory named in
+ the environment variable `GNUPLOT`; Windows will use `USERPROFILE` if GNUPLOT
+ is not defined).
+ Note: The program can be configured to look first in the current directory,
+ but this is not recommended because it is bad security practice.
+?strings
+?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` and `sprintf`.
+
+ 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.
+?substitution
+ 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).
+?substitution backquotes
+?backquotes
+?shell commands
+ 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`.
+
+ 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`"
+?substitution macros
+?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.
+
+ Macro expansion is handled as the very first thing the interpreter does when
+ looking at a new line of commands and is only done once. Therefore, code like
+ the following will execute correctly:
+
+ A = "c=1"
+ @A
+
+ but this line will not, since the macro is defined on the same line
+ and will not be expanded in time
+
+ A = "c=1"; @A # will not expand to c=1
+
+ For execution of complete commands the `evaluate` command may also be handy.
+?mixing_macros_backquotes
+?substitution mixing_macros_backquotes
+ 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
+?syntax
+?specify
+?punctuation
+ 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.
+
+ 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.
+
+ Curly braces are used in the syntax for enhanced text mode and to delimit
+ blocks in if/then/else statements. They are also used to denote complex
+ numbers: {3,2} = 3 + 2i.
+
+ 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.
+?quotes
+?syntax quotes
+ 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`.
+
+ Back-quotes are used to enclose system commands for substitution into the
+ command line. See `substitution`.
+?time/date
+ `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 `time` function can be used to get the current system time. This value
+ can be converted to a date string with the `strftime` function, or it can be
+ used in conjunction with `timecolumn` to generate relative time/date plots.
+ The type of the argument determines what is returned. If the argument is an
+ integer, `time` returns the current time as an integer, in seconds from
+ 1 Jan 2000. If the argument is real (or complex), the result is real as well.
+ The precision of the fractional (sub-second) part depends on your operating
+ system. If the argument is a string, it is assumed to be a format string,
+ and it is passed to `strftime` to provide a formatted time/date string.
+
+ 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 `time_specifiers`.
+?plotting styles
+
+ There are many plotting styles available in gnuplot.
+ They are listed alphabetically below.
+ The commands `set style data` and `set style function` change the
+ default plotting style for subsequent `plot` and `splot` commands.
+
+ You also have the option to specify the plot style explicitly as part of
+ the `plot` or `splot` command. If you want to mix plot styles within a
+ single plot, you must specify the plot style for each component.
+
+ Example:
+
+ plot 'data' with boxes, sin(x) with lines
+
+ Each plot style has its own expected set of data entries in a data file.
+ For example by default the `lines` style expects either a single column of
+ y values (with implicit x ordering) or a pair of columns with x in the first
+ and y in the second. For more information on how to fine-tune how columns in a
+ file are interpreted as plot data, see `using`.
+
+?commands set style boxerrorbars
+?set style boxerrorbars
+?plotting styles boxerrorbars
+?style boxerrorbars
+?boxerrorbars
+ The `boxerrorbars` style is only relevant to 2D data plotting. It is a
+ combination of the `boxes` and `yerrorbars` styles. It uses 3, 4, or 5
+ columns of data:
+
+ 3 columns: x y ydelta
+ 4 columns: x y ydelta xdelta # boxwidth != -2
+ 4 columns: x y ylow yhigh # boxwidth == -2
+ 5 columns: x y ylow yhigh xdelta
+
+ The boxwidth will come from the fourth column if the y errors are given as
+ "ydelta" and the boxwidth was not previously set to -2.0 (`set boxwidth -2.0`)
+ or from the fifth column if the y errors are in the form of "ylow yhigh". The
+ special case `boxwidth = -2.0` is for four-column data with y errors in the
+ form "ylow yhigh". In this case the boxwidth will be calculated so that each
+ box touches the adjacent boxes. The width will also be calculated in cases
+ where three-column data are used.
+
+ An additional (4th, 5th or 6th) input column may be used to provide variable
+ (per-datapoint) color information (see `linecolor` and `rgbcolor variable`).
+ The error bar will be drawn in the same color as the border of the box.
+
+ The box height is determined from the y error in the same way as it is for
+ the `yerrorbars` style---either from y-ydelta to y+ydelta or from ylow to
+ yhigh, depending on how many data columns are provided.
+ See also
+ errorbar demo.
+?commands set style boxes
+?set style boxes
+?plotting styles boxes
+?style boxes
+?boxes
+ The `boxes` style is only relevant to 2D plotting. It draws a box centered
+ about the given x coordinate that extends from the x axis (not from the graph
+ border) to the given y coordinate. It uses 2 or 3 columns of basic data.
+ Additional input columns may be used to provide information such as
+ variable line or fill color (see `rgbcolor variable`).
+
+ 2 columns: x y
+ 3 columns: x y x_width
+
+ The width of the box is obtained in one of three ways. If the input data has a
+ third column, this will be used to set the width of the box. If not, if a
+ width has been set using the `set boxwidth` command, this will be used.
+ If neither of these is available, the width of each box will be calculated
+ automatically so that it touches the adjacent boxes.
+
+ The interior of the boxes is drawn according to the current fillstyle.
+ See `set style fill` for details. Alternatively a new fillstyle
+ may be specified in the plot command.
+
+ For fillstyle `empty` the box is not filled.
+
+ For fillstyle `solid` the box is filled with a solid rectangle of the
+ current drawing color. There is an optional parameter <density> that
+ controls the fill density; it runs from 0 (background color) to 1
+ (current drawing color).
+
+ For fillstyle `pattern` the box is filled in the current drawing color with
+ a pattern, if supported by the terminal driver.
+
+ Examples:
+
+ To plot a data file with solid filled boxes with a small vertical space
+ separating them (bargraph):
+
+ set boxwidth 0.9 relative
+ set style fill solid 1.0
+ plot 'file.dat' with boxes
+
+ To plot a sine and a cosine curve in pattern-filled boxes style:
+
+ set style fill pattern
+ plot sin(x) with boxes, cos(x) with boxes
+
+ The sin plot will use pattern 0; the cos plot will use pattern 1.
+ Any additional plots would cycle through the patterns supported by the
+ terminal driver.
+
+ To specify explicit fillstyles for each dataset:
+
+ plot 'file1' with boxes fs solid 0.25, \
+ 'file2' with boxes fs solid 0.50, \
+ 'file3' with boxes fs solid 0.75, \
+ 'file4' with boxes fill pattern 1, \
+ 'file5' with boxes fill empty
+
+?plotting styles boxplot
+?style boxplot
+?boxplot
+ Boxplots are a common way to represent a statistical distribution of values.
+ Quartile boundaries are determined such that 1/4 of the points have a value
+ equal or less than the first quartile boundary, 1/2 of the points have a value
+ equal or less than the second quartile (median) value, etc. A box is drawn
+ around the region between the first and third quartiles, with a horizontal line
+ at the median value. Whiskers extend from the box to user-specified limits.
+ Points that lie outside these limits are drawn individually.
+
+ Examples
+
+ # Place a boxplot at x coordinate 1.0 representing the y values in column 5
+ plot 'data' using (1.0):5
+
+ # Same plot but suppress outliers and force the width of the boxplot to 0.3
+ set style boxplot nooutliers
+ plot 'data' using (1.0):5:(0.3)
+
+ By default only one boxplot is produced that represents all y values from the
+ second column of the using specification. However, an additional (fourth)
+ colunm can be added to the specification. If present, the values of that
+ column will be interpreted as the discrete levels of a factor variable.
+ As many boxplots will be drawn as there are levels in the factor variable.
+ The separation between these boxplots is 1.0 by default, but it can be changed
+ by `set style boxplot separation`. By default, the value of the factor variable
+ is shown as a tic label below (or above) each boxplot.
+
+ Example
+
+ # Suppose that column 2 of 'data' contains either "control" or "treatment"
+ # The following example produces two boxplots, one for each level of the
+ # factor
+ plot 'data' using (1.0):5:(0):2
+
+ The default width of the box can be set via `set boxwidth <width>` or may be
+ specified as an optional 3rd column in the `using` clause of the plot command.
+ The first and third columns (x coordinate and width) are normally provided as
+ constants rather than as data columns.
+
+ By default the whiskers extend from the ends of the box to the most distant
+ point whose y value lies within 1.5 times the interquartile range. By default
+ outliers are drawn as circles (point type 7). The width of the bars at the
+ end of the whiskers may be controlled using `set bars`.
+
+ These default properties may be changed using the `set style boxplot` command.
+ See `set style boxplot`, `bars`, `boxwidth`, `fillstyle`, `candlesticks`.
+
+?commands set style boxxyerrorbars
+?set style boxxyerrorbars
+?plotting styles boxxyerrorbars
+?style boxxyerrorbars
+?boxxyerrorbars
+ The `boxxyerrorbars` style is only relevant to 2D data plotting. It is similar
+ to the `xyerrorbars` style except that it draws rectangular areas rather than
+ simple crosses. It uses either 4 or 6 basic columns of input data.
+ Additional input columns may be used to provide information such as
+ variable line or fill color (see `rgbcolor variable`).
+
+ 4 columns: x y xdelta ydelta
+ 6 columns: x y xlow xhigh ylow yhigh
+
+ The box width and height are determined from the x and y errors in the same
+ way as they are for the `xyerrorbars` style---either from xlow to xhigh and
+ from ylow to yhigh, or from x-xdelta to x+xdelta and from y-ydelta to
+ y+ydelta, depending on how many data columns are provided.
+
+ An additional (5th or 7th) input column may be used to provide variable
+ (per-datapoint) color information (see `linecolor` and `rgbcolor variable`).
+
+ The interior of the boxes is drawn according to the current fillstyle.
+ See `set style fill` and `boxes` for details. Alternatively a new fillstyle
+ may be specified in the plot command.
+?commands set style candlesticks
+?set style candlesticks
+?plotting styles candlesticks
+?style candlesticks
+?candlesticks
+ The `candlesticks` style can be used for 2D data plotting of financial
+ data or for generating box-and-whisker plots of statistical data.
+ The symbol is a rectangular box, centered horizontally at the x
+ coordinate and limited vertically by the opening and closing prices. A
+ vertical line segment at the x coordinate extends up from the top of the
+ rectangle to the high price and another down to the low. The vertical line
+ will be unchanged if the low and high prices are interchanged.
+
+ Five columns of basic data are required:
+
+ financial data: date open low high close
+ whisker plot: x box_min whisker_min whisker_high box_high
+
+ The width of the rectangle can be controlled by the `set boxwidth` command.
+ For backwards compatibility with earlier gnuplot versions, when the
+ boxwidth parameter has not been set then the width of the candlestick
+ rectangle is controlled by `set bars <width>`.
+
+ Alternatively, an explicit width for each box-and-whiskers grouping may be
+ specified in an optional 6th column of data. The width must be given in the
+ same units as the x coordinate.
+
+ An additional (6th, or 7th if the 6th column is used for width data)
+ input column may be used to provide variable (per-datapoint) color
+ information (see `linecolor` and `rgbcolor variable`).
+
+ By default the vertical line segments have no crossbars at the top and
+ bottom. If you want crossbars, which are typically used for box-and-whisker
+ plots, then add the keyword `whiskerbars` to the plot command. By default
+ these whiskerbars extend the full horizontal width of the candlestick, but
+ you can modify this by specifying a fraction of the full width.
+
+ The usual convention for financial data is that the rectangle is empty
+ if (open < close) and solid fill if (close < open). This is the behavior you
+ will get if the current fillstyle is set to "empty". See `fillstyle`.
+ If you set the fillstyle to solid or pattern, then this will be used for
+ all boxes independent of open and close values.
+ See also `set bars` and `financebars`. See also the
+ candlestick
+ and
+ finance
+ demos.
+
+ Note: To place additional symbols, such as the median value, on a
+ box-and-whisker plot requires additional plot commands as in this example:
+
+ # Data columns:X Min 1stQuartile Median 3rdQuartile Max
+ set bars 4.0
+ set style fill empty
+ plot 'stat.dat' using 1:3:2:6:5 with candlesticks title 'Quartiles', \
+ '' using 1:4:4:4:4 with candlesticks lt -1 notitle
+
+ # Plot with crossbars on the whiskers, crossbars are 50% of full width
+ plot 'stat.dat' using 1:3:2:6:5 with candlesticks whiskerbars 0.5
+
+ See `set boxwidth`, `set bars`, `set style fill`, and `boxplot`.
+?commands set style circles
+?set style circles
+?plotting styles circles
+?style circles
+?circles
+ The `circles` style plots a circle with an explicit radius at each data point.
+ If three columns of data are present, they are interpreted as x, y, radius.
+ The radius is always interpreted in the units of the plot's horizontal axis
+ (x or x2). The scale on y and the aspect ratio of the plot are both ignored.
+ If only two columns are present, the radius is taken from `set style circle`.
+ In this case the radius may be given in graph or screen coordinates.
+ By default a full circle will be drawn. It is possible to plot arc segments
+ instead of full circles by specifying a start and end angle in the 4th and 5th
+ columns. An optional 4th or 6th column can specify per-circle color.
+ The start and end angles of the circle segments must be specified in degrees.
+
+
+ Examples:
+
+ # draws circles whose area is proportional to the value in column 3
+ set style fill transparent solid 0.2 noborder
+ plot 'data' using 1:2:(sqrt($3)) with circles, \
+ 'data' using 1:2 with linespoints
+
+ # draws Pac-men instead of circles
+ plot 'data' using 1:2:(10):(40):(320) with circles
+
+ # draw a pie chart with inline data
+ set xrange [-15:15]
+ set style fill transparent solid 0.9 noborder
+ plot '-' using 1:2:3:4:5:6 with circles lc var
+ 0 0 5 0 30 1
+ 0 0 5 30 70 2
+ 0 0 5 70 120 3
+ 0 0 5 120 230 4
+ 0 0 5 230 360 5
+ e
+
+ The result is similar to using a `points` plot with variable size points and
+ pointstyle 7, except that the circles will scale with the x axis range.
+ See also `set object circle` and `fillstyle`.
+?plotting styles ellipses
+?style ellipses
+?ellipses
+ The `ellipses` style plots an ellipse at each data point. This style is
+ only relevant for 2D plotting. Each ellipse is described in terms of its
+ center, major and minor diameters, and the angle between its major diameter
+ and the x axis.
+
+ 2 columns: x y
+ 3 columns: x y major_diam
+ 4 columns: x y major_diam minor_diam
+ 5 columns: x y major_diam minor_diam angle
+
+ If only two input columns are present, they are taken as the coordinates of
+ the centers, and the ellipses will be drawn with the default extent
+ (see `set style ellipse`). The orientation of the ellipse, which is
+ defined as the angle between the major diameter and the plot's x axis,
+ is taken from the default ellipse style (see `set style ellipse`).
+ If three input columns are provided, the third column is used for both
+ diameters. The orientation angle defaults to zero.
+ If four columns are present, they are interpreted as x, y, major diameter,
+ minor diameter. Note that these are diameters, not radii.
+ An optional 5th column may be used to specify the orientation angle
+ in degrees.
+ The ellipses will also be drawn with their default extent if either of the
+ supplied diameters in the 3-4-5 column form is negative.
+
+ In all of the above cases, optional variable color data may be given in an
+ additional last (3th, 4th, 5th or 6th) column. See `colorspec` for further
+ information.
+
+ By default, the major diameter is interpreted in the units of the plot's
+ horizontal axis (x or x2) while the minor diameter in that of the vertical
+ (y or y2). This implies that if the x and y axis scales are not equal,
+ then the major/minor diameter ratio will no longer be correct after rotation.
+ This behavior can be changed with the `units` keyword, however.
+
+ There are three alternatives:
+ if `units xy` is included in the plot specification, the axes will be scaled
+ as described above. `units xx` ensures that both diameters are interpreted
+ in units of the x axis, while `units yy` means that both diameters are
+ interpreted in units of the y axis. In the latter two cases the ellipses
+ will have the correct aspect ratio, even if the plot is resized.
+
+ If `units` is omitted, the default setting will be used, which is equivalent
+ to `units xy`. This can be redefined by `set style ellipse`.
+
+ Example (draws ellipses, cycling through the available line types):
+
+ plot 'data' using 1:2:3:4:(0):0 with ellipses
+
+ See also `set object ellipse`, `set style ellipse` and `fillstyle`.
+?commands set style dots
+?set style dots
+?plotting styles dots
+?style dots
+?dots
+ The `dots` style plots a tiny dot at each point; this is useful for scatter
+ plots with many points. Either 1 or 2 columns of input data are required in
+ 2D. Three columns are required in 3D.
+
+ For some terminals (post, pdf) the size of the dot can be controlled by
+ changing the linewidth.
+
+ 1 column y # x is row number
+ 2 columns: x y
+ 3 columns: x y z # 3D only (splot)
+
+?commands set style filledcurves
+?set style filledcurves
+?plotting styles filledcurves
+?style filledcurves
+?filledcurves
+ The `filledcurves` style is only relevant to 2D plotting. Three variants
+ are possible. The first two variants require either a function or two columns
+ of input data, and may be further modified by the options listed below.
+
+ Syntax:
+
+ plot ... with filledcurves [option]
+
+ where the option can be one of the following
+
+ [closed | {above | below}
+ {x1 | x2 | y1 | y2 | r}[=<a>] | xy=<x>,<y>]
+
+ The first variant, `closed`, treats the curve itself as a closed polygon.
+ This is the default if there are two columns of input data.
+
+ The second variant is to fill the area between the curve and a given axis,
+ a horizontal or vertical line, or a point.
+
+ filledcurves closed ... just filled closed curve,
+ filledcurves x1 ... x1 axis,
+ filledcurves x2 ... x2 axis, etc for y1 and y2 axes,
+ filledcurves y1=0 ... line y=0 (at y1 axis) ie parallel to x1 axis,
+ filledcurves y2=42 ... line y=42 (at y2 axis) ie parallel to x2, etc,
+ filledcurves xy=10,20 ... point 10,20 of x1,y1 axes (arc-like shape).
+ filledcurves above r=1.5 the area of a polar plot outside radius 1.5
+
+ The third variant requires three columns of input data: the x coordinate and
+ two y coordinates corresponding to two curves sampled at the same set of
+ x coordinates; the area between the two curves is filled.
+ This is the default if there are three or more columns of input data.
+
+ 3 columns: x y1 y2
+
+ Example of filling the area between two input curves.
+ fill between curves demo.
+
+ plot 'data' using 1:2:3 with filledcurves
+
+ The `above` and `below` options apply both to commands of the form
+ ... filledcurves above {x1|x2|y1|y2|r}=<val>
+ and to commands of the form
+ ... using 1:2:3 with filledcurves below
+ In either case the option limits the filled area to one side of the bounding
+ line or curve.
+
+ Note: Not all terminal types support this plotting mode.
+
+ Zooming a filled curve drawn from a datafile may produce empty or incorrect
+ areas because gnuplot is clipping points and lines, and not areas.
+
+ If the values of <a>, <x>, <y> are out of the drawing boundary, then they
+ are moved to the graph boundary. Then the actually filled area in the case
+ of option xy=<x>,<y> will depend on xrange and yrange.
+?commands set style financebars
+?set style financebars
+?plotting styles financebars
+?style financebars
+?financebars
+ The `financebars` style is only relevant for 2D data plotting of financial
+ data. It requires 1 x coordinate (usually a date) and 4 y values (prices).
+
+ 5 columns: date open low high close
+
+ An additional (6th) input column may be used to provide variable
+ (per-record) color information (see `linecolor` and `rgbcolor variable`).
+
+ The symbol is a vertical line segment, located horizontally at the x
+ coordinate and limited vertically by the high and low prices. A horizontal
+ tic on the left marks the opening price and one on the right marks the
+ closing price. The length of these tics may be changed by `set bars`. The
+ symbol will be unchanged if the high and low prices are interchanged.
+ See `set bars` and `candlesticks`, and also the
+ finance demo.
+?commands set style fsteps
+?set style fsteps
+?plotting styles fsteps
+?style fsteps
+?fsteps
+ The `fsteps` style is only relevant to 2D plotting. It connects consecutive
+ points with two line segments: the first from (x1,y1) to (x1,y2) and the
+ second from (x1,y2) to (x2,y2). The input column requires are the same as for
+ plot styles `lines` and `points`. The difference between `fsteps` and `steps`
+ is that `fsteps` traces first the change in y and then the change in x.
+ `steps` traces first the change in x and then the change in y.
+
+ See also
+ steps demo.
+?commands set style fillsteps
+?set style fillsteps
+?style fillsteps
+?fillsteps
+ The `fillsteps` style is exactly like `steps` except that the area between
+ the curve and y=0 is filled in the current fill style. See `steps`.
+?commands set style histeps
+?set style histeps
+?plotting styles histeps
+?style histeps
+?histeps
+ The `histeps` style is only relevant to 2D plotting. It is intended for
+ plotting histograms. Y-values are assumed to be centered at the x-values;
+ the point at x1 is represented as a horizontal line from ((x0+x1)/2,y1) to
+ ((x1+x2)/2,y1). The lines representing the end points are extended so that
+ the step is centered on at x. Adjacent points are connected by a vertical
+ line at their average x, that is, from ((x1+x2)/2,y1) to ((x1+x2)/2,y2).
+ The input column requires are the same as for plot styles `lines` and `points`.
+
+ If `autoscale` is in effect, it selects the xrange from the data rather than
+ the steps, so the end points will appear only half as wide as the others.
+ See also
+ steps demo.
+
+ `histeps` is only a plotting style; `gnuplot` does not have the ability to
+ create bins and determine their population from some data set.
+?commands set style histogram
+?set style histogram
+?style histograms
+?plotting styles histograms
+?histograms
+ The `histograms` style is only relevant to 2D plotting. It produces a bar
+ chart from a sequence of parallel data columns. Each element of the `plot`
+ command must specify a single input data source (e.g. one column of the input
+ file), possibly with associated tic values or key titles.
+ Four styles of histogram layout are currently supported.
+
+ set style histogram clustered {gap <gapsize>}
+ set style histogram errorbars {gap <gapsize>} {<linewidth>}
+ set style histogram rowstacked
+ set style histogram columnstacked
+
+ The default style corresponds to `set style histogram clustered gap 2`.
+ In this style, each set of parallel data values is collected into a group of
+ boxes clustered at the x-axis coordinate corresponding to their sequential
+ position (row #) in the selected datafile columns. Thus if <n> datacolumns are
+ selected, the first cluster is centered about x=1, and contains <n> boxes whose
+ heights are taken from the first entry in the corresponding <n> data columns.
+ This is followed by a gap and then a second cluster of boxes centered about x=2
+ corresponding to the second entry in the respective data columns, and so on.
+ The default gap width of 2 indicates that the empty space between clusters is
+ equivalent to the width of 2 boxes. All boxes derived from any one column
+ are given the same fill color and/or pattern (see `set style fill`).
+
+ Each cluster of boxes is derived from a single row of the input data file.
+ It is common in such input files that the first element of each row is a
+ label. Labels from this column may be placed along the x-axis underneath
+ the appropriate cluster of boxes with the `xticlabels` option to `using`.
+
+ The `errorbars` style is very similar to the `clustered` style, except that it
+ requires additional columns of input for each entry. The first column holds
+ the height (y value) of that box, exactly as for the `clustered` style.
+ 2 columns: y yerr bar extends from y-yerr to y+err
+ 3 columns: y ymin yman bar extends from ymin to ymax
+ The appearance of the error bars is controlled by the current value of
+ `set bars` and by the optional <linewidth> specification.
+
+ Two styles of stacked histogram are supported, chosen by the command
+ `set style histogram {rowstacked|columnstacked}`. In these styles the data
+ values from the selected columns are collected into stacks of boxes.
+ Positive values stack upwards from y=0; negative values stack downwards.
+ Mixed positive and negative values will produce both an upward stack and a
+ downward stack. The default stacking mode is `rowstacked`.
+
+ The `rowstacked` style places a box resting on the x-axis for each
+ data value in the first selected column; the first data value results in
+ a box a x=1, the second at x=2, and so on. Boxes corresponding to the
+ second and subsequent data columns are layered on top of these, resulting
+ in a stack of boxes at x=1 representing the first data value from each
+ column, a stack of boxes at x=2 representing the second data value from
+ each column, and so on. All boxes derived from any one column are given the
+ same fill color and/or pattern (see `set style fill`).
+
+ The `columnstacked` style is similar, except that each stack of boxes is
+ built up from a single data column. Each data value from the first specified
+ column yields a box in the stack at x=1, each data value from the second
+ specified column yields a box in the stack at x=2, and so on. In this style
+ the color of each box is taken from the row number, rather than the column
+ number, of the corresponding data field.
+
+ Box widths may be modified using the `set boxwidth` command.
+ Box fill styles may be set using the `set style fill` command.
+
+ Histograms always use the x1 axis, but may use either y1 or y2.
+ If a plot contains both histograms and other plot styles, the non-histogram
+ plot elements may use either the x1 or the x2 axis.
+
+ Examples:
+ Suppose that the input file contains data values in columns 2, 4, 6, ...
+ and error estimates in columns 3, 5, 7, ... This example plots the values
+ in columns 2 and 4 as a histogram of clustered boxes (the default style).
+ Because we use iteration in the plot command, any number of data columns can
+ be handled in a single command. See `iteration`.
+
+ set boxwidth 0.9 relative
+ set style data histograms
+ set style histogram cluster
+ set style fill solid 1.0 border lt -1
+ plot for [COL=2:4:2] 'file.dat' using COL
+
+ This will produce a plot with clusters of two boxes (vertical bars) centered
+ at each integral value on the x axis. If the first column of the input file
+ contains labels, they may be placed along the x-axis using the variant command
+
+ plot for [COL=2:4:2] 'file.dat' using COL:xticlabels(1)
+
+ If the file contains both magnitude and range information for each value,
+ then error bars can be added to the plot. The following commands will add
+ error bars extending from (y-<error>) to (y+<error>), capped by horizontal bar
+ ends drawn the same width as the box itself. The error bars and bar ends are
+ drawn with linewidth 2, using the border linetype from the current fill style.
+
+ set bars fullwidth
+ set style fill solid 1 border lt -1
+ set style histogram errorbars gap 2 lw 2
+ plot for [COL=2:4:2] 'file.dat' using COL:COL+1
+
+ To plot the same data as a rowstacked histogram. Just to be different, this
+ example lists the separate columns explicitly rather than using iteration.
+
+ set style histogram rowstacked
+ plot 'file.dat' using 2, '' using 4:xtic(1)
+
+ This will produce a plot in which each vertical bar corresponds to one row of
+ data. Each vertical bar contains a stack of two segments, corresponding in
+ height to the values found in columns 2 and 4 of the datafile.
+
+
+ Finally, the commands
+
+ set style histogram columnstacked
+ plot 'file.dat' using 2, '' using 4
+
+ will produce two vertical stacks, one for each column of data. The stack at
+ x=1 will contain a box for each entry in column 2 of the datafile. The stack
+ at x=2 will contain a box for each parallel entry in column 4 of the datafile.
+ Because this interchanges gnuplot's usual interpretation of input rows and
+ columns, the specification of key titles and x-axis tic labels must also be
+ modified accordingly. See the comments given below.
+
+ set style histogram columnstacked
+ plot '' u 5:key(1) # uses first column to generate key titles
+ plot '' u 5 title columnhead # uses first row to generate xtic labels
+
+ Note that the two examples just given present exactly the same data values,
+ but in different formats.
+?newhistogram
+?histograms newhistogram
+?plotting style histograms newhistogram
+ Syntax:
+
+ newhistogram {"<title>"} {lt <linetype>} {fs <fillstyle>} {at <x-coord>}
+
+ More than one set of histograms can appear in a single plot. In this case you
+ can force a gap between them, and a separate label for each set, by using the
+ `newhistogram` command.
+ For example
+
+ set style histogram cluster
+ plot newhistogram "Set A", 'a' using 1, '' using 2, '' using 3, \
+ newhistogram "Set B", 'b' using 1, '' using 2, '' using 3
+
+ The labels "Set A" and "Set B" will appear beneath the respective sets of
+ histograms, under the overall x axis label.
+
+ The newhistogram command can also be used to force histogram coloring to
+ begin with a specific color (linetype). By default colors will continue to
+ increment successively even across histogram boundaries. Here is an example
+ using the same coloring for multiple histograms
+ plot newhistogram "Set A" lt 4, 'a' using 1, '' using 2, '' using 3, \
+ newhistogram "Set B" lt 4, 'b' using 1, '' using 2, '' using 3
+
+ Similarly you can force the next histogram to begin with a specified fillstyle.
+ If the fillstyle is set to `pattern`, then the pattern used for filling will
+ be incremented automatically.
+
+ The `at <x-coord>` option sets the x coordinate position of the following
+ histogram to <x-coord>. For example
+
+ set style histogram cluster
+ set style data histogram
+ set style fill solid 1.0 border -1
+ set xtic 1 offset character 0,0.3
+ plot newhistogram "Set A", \
+ 'file.dat' u 1 t 1, '' u 2 t 2, \
+ newhistogram "Set B" at 8, \
+ 'file.dat' u 2 t 2, '' u 2 t 2
+
+ will position the second histogram to start at x=8.
+?automated
+?histograms automated
+?styles histograms automated
+?plotting styles histograms automated
+ If you want to create a histogram from many columns of data in a single file,
+ it is very convenient to use the plot iteration feature. See `iteration`.
+ For example, to create stacked histograms of the data in columns 3 through 8
+
+ set style histogram columnstacked
+ plot for [i=3:8] "datafile" using i title columnhead
+?commands set style image
+?set style image
+?plotting styles image
+?style image
+?image
+?rgbimage
+?rgbalpha
+ The `image`, `rgbimage`, and `rgbalpha` plotting styles all project a
+ uniformly sampled grid of data values onto a plane in either 2D or 3D.
+ The input data may be an actual bitmapped image, perhaps converted from a
+ standard format such as PNG, or a simple array of numerical values.
+
+ This figure illustrates generation of a heat map from an array of scalar values.
+ The current palette is used to map each value onto the color assigned to the
+ corresponding pixel.
+ plot '-' matrix with image
+ 5 4 3 1 0
+ 2 2 0 0 1
+ 0 0 0 1 0
+ 0 1 2 4 3
+ e
+ e
+
+ Each pixel (data point) of the input 2D image will become a rectangle or
+ parallelipiped in the plot. The coordinates of each data point will determine
+ the center of the parallelipiped. That is, an M x N set of data will form an
+ image with M x N pixels. This is different from the pm3d plotting style, where
+ an M x N set of data will form a surface of (M-1) x (N-1) elements. The scan
+ directions for a binary image data grid can be further controlled by additional
+ keywords. See `binary keywords flipx`, `keywords center`, and `keywords rotate`.
+
+ Image data can be scaled to fill a particular rectangle within a 2D plot
+ coordinate system by specifying the x and y extent of each pixel.
+ See `binary keywords dx` and `dy`. To generate the figure at the right,
+ the same input image was placed multiple times, each with a specified dx, dy,
+ and origin. The input PNG image of a building is 50x128 pixels. The tall
+ building was drawn by mapping this using `dx=0.5 dy=1.5`. The short building
+ used a mapping `dx=0.5 dy=0.35`.
+
+ The `image` style handles input pixels containing a grayscale or color palette
+ value. Thus 2D plots (`plot` command) require 3 columns of data (x,y,value),
+ while 3D plots (`splot` command) require 4 columns of data (x,y,z,value).
+
+ The `rgbimage` style handles input pixels that are described by three separate
+ values for the red, green, and blue components. Thus 5D data (x,y,r,g,b) is
+ needed for `plot` and 6D data (x,y,z,r,g,b) for `splot`. The individual red,
+ green, and blue components are assumed to lie in the range [0:255].
+
+ The `rgbalpha` style handles input pixels that contain alpha channel
+ (transparency) information in addition to the red, green, and blue components.
+ Thus 6D data (x,y,r,g,b,a) is needed for `plot` and 7D data (x,y,z,r,g,b,a)
+ for `splot`. The r, g, b, and alpha components are assumed to lie in the range
+ [0:255].
+?image transparency
+?transparency
+?alpha channel
+ The `rgbalpha` plotting style assumes that each pixel of input data contains
+ an alpha value in the range [0:255]. A pixel with alpha = 0 is purely
+ transparent and does not alter the underlying contents of the plot. A pixel
+ with alpha = 255 is purely opaque. All terminal types can handle these two
+ extreme cases. A pixel with 0 < alpha < 255 is partially transparent.
+ Only a few terminal types can handle this correctly; other terminals will
+ approximate this by treating alpha as being either 0 or 255.
+?commands set style image failsafe
+?set style image failsafe
+?plotting styles image failsafe
+?style image failsafe
+?image failsafe
+?failsafe
+ Some terminal drivers provide code to optimize rendering of image data
+ within a rectangular 2D area. However this code is known to be imperfect.
+ This optimized code may be disabled by using the keyword `failsafe`. E.g.
+
+ plot 'data' with image failsafe
+?commands set style impulses
+?set style impulses
+?plotting styles impulses
+?style impulses
+?impulses
+ The `impulses` style displays a vertical line from y=0 to the y value of each
+ point (2D) or from z=0 to the z value of each point (3D). Note that the y or z
+ values may be negative. Data from additional columns can be used to control
+ the color of each impulse. To use this style effectively in 3D plots, it is
+ useful to choose thick lines (linewidth > 1). This approximates a 3D bar chart.
+
+ 1 column: y
+ 2 columns: x y # line from [x,0] to [x,y] (2D)
+ 3 columns: x y z # line from [x,y,0] to [x,y,z] (3D)
+
+?commands set style labels
+?set style labels
+?plotting styles labels
+?style labels
+?labels
+ The `labels` style reads coordinates and text from a data file and places
+ the text string at the corresponding 2D or 3D position. 3 or 4 input columns
+ of basic data are required. Additional input columns may be used to provide
+ information such as variable font size or text color (see `rgbcolor variable`).
+
+ 3 columns: x y string # 2D version
+ 4 columns: x y z string # 3D version
+
+ The font, color, rotation angle and other properties of the printed text
+ may be specified as additional command options (see `set label`). The example
+ below generates a 2D plot with text labels constructed from the city whose
+ name is taken from column 1 of the input file, and whose geographic coordinates
+ are in columns 4 and 5. The font size is calculated from the value in column 3,
+ in this case the population.
+
+ CityName(String,Size) = sprintf("{/=%d %s}", Scale(Size), String)
+ plot 'cities.dat' using 5:4:(CityName(stringcolumn(1),$3)) with labels
+
+ If we did not want to adjust the font to a different size for each city,
+ the command would be much simpler:
+
+ plot 'cities.dat' using 5:4:1 with labels font "Times,8"
+
+ The `labels` style can also be used in 3D plots. In this case four input
+ column specifiers are required, corresponding to X Y Z and text.
+
+ splot 'datafile' using 1:2:3:4 with labels
+
+ See also `datastrings`, `set style data`.
+?commands set style lines
+?set style lines
+?plotting styles lines
+?style lines
+?lines
+ The `lines` style connects adjacent points with straight line segments.
+ It may be used in either 2D or 3D plots. The basic form requires 1, 2, or 3
+ columns of input data.
+ Additional input columns may be used to provide information such as
+ variable line color (see `rgbcolor variable`).
+
+ 2D form
+ 1 column: y # implicit x from row number
+ 2 columns: x y
+ 3D form
+ 1 column: z # implicit x from row, y from index
+ 3 columns: x y z
+
+ See also `linetype`, `linewidth`, and `linestyle`.
+?commands set style linespoints
+?commands set style lp
+?set style linespoints
+?plotting styles linespoints
+?set style lp
+?style linespoints
+?style lp
+?linespoints
+?lp
+?pointinterval
+ The `linespoints` style connects adjacent points with straight line segments
+ and then goes back to draw a small symbol at each point. The command
+ `set pointsize` may be used to change the default size of the points.
+ 1 or 2 columns of basic input data are required in 2D plots; 1 or 3 columns are
+ required if 3D plots. See `style lines`. Additional input columns may be used
+ to provide information such as variable point size or line color.
+
+ The `pointinterval` (short form `pi`) property of the linetype can be used to
+ control whether or not every point in the plot is given a symbol. For example,
+ 'with lp pi 3' will draw line segments through every data point, but will only
+ place a symbol on every 3rd point. A negative value for `pointinterval` will
+ erase the portion of line segment that passes underneath the symbol. The size
+ of the erased portion is controlled by `set pointintervalbox`.
+
+ `linespoints` may be abbreviated `lp`.
+?commands set style points
+?set style points
+?plotting styles points
+?style points
+?points
+ The `points` style displays a small symbol at each point. The command `set
+ pointsize` may be used to change the default size of the points.
+ 1 or 2 columns of basic input data are required in 2D plots; 1 or 3 columns are
+ required in 3D plots. See `style lines`. Additional input columns may be used
+ to provide information such as variable point size or variable point color.
+
+ Polar plots are not really a separate plot style but are listed here for
+ completeness. The option `set polar` tells gnuplot to interpret input
+ 2D coordinates as <angle>,<radius> rather than <x>,<y>.
+ Many, but not all, 2D plotting styles work in polar mode.
+ The figure shows a combination of plot styles `lines` and `filledcurves`.
+ See `set polar`, `set rrange`, `set size square`.
+
+?commands set style steps
+?set style steps
+?plotting styles steps
+?style steps
+?steps
+ The `steps` style is only relevant to 2D plotting. It connects consecutive
+ points with two line segments: the first from (x1,y1) to (x2,y1) and the
+ second from (x2,y1) to (x2,y2). The input column requires are the same as for
+ plot styles `lines` and `points`. The difference between `fsteps` and `steps`
+ is that `fsteps` traces first the change in y and then the change in x.
+ `steps` traces first the change in x and then the change in y. To fill the
+ area between the curve and the baseline at y=0, use `fillsteps`.
+ See also
+ steps demo.
+
+?commands set style rgbalpha
+?set style rgbalpha
+?plotting styles rgbalpha
+?style rgbalpha
+ See `image`.
+?commands set style rgbimage
+?set style rgbimage
+?plotting styles rgbimage
+?style rgbimage
+ See `image`.
+?commands set style vectors
+?set style vectors
+?plotting styles vectors
+?style vectors
+?vectors
+ The 2D `vectors` style draws a vector from (x,y) to (x+xdelta,y+ydelta).
+ The 3D `vectors` style is similar, but requires six columns of basic data.
+ A small arrowhead is drawn at the end of each vector.
+
+ 4 columns: x y xdelta ydelta
+ 6 columns: x y z xdelta ydelta zdelta
+
+ In both cases, an additional input column (5th in 2D, 7th in 3D) may be used
+ to provide variable (per-datapoint) color information.
+ (see `linecolor` and `rgbcolor variable`).
+
+ splot with vectors is supported only for `set mapping cartesian`.
+
+ The keywords "with vectors" may be followed by an in-line arrow style
+ specifications, a reference to a predefined arrow style, or a request to read
+ the index of the desired arrow style for each vector from a separate column.
+ Note: If you choose "arrowstyle variable" it will fill in all arrow properties
+ at the time the corresponding vector is drawn; you cannot mix this keyword with
+ other line or arrow style qualifiers in the plot command.
+
+ plot ... with vectors filled heads
+ plot ... with vectors arrowstyle 3
+ plot ... using 1:2:3:4:5 with vectors arrowstyle variable
+
+ See `arrowstyle` for more details.
+
+ Example:
+ plot 'file.dat' using 1:2:3:4 with vectors head filled lt 2
+ splot 'file.dat' using 1:2:3:(1):(1):(1) with vectors filled head lw 2
+
+ `set clip one` and `set clip two` affect vectors drawn in 2D.
+ Please see `set clip` and `arrowstyle`.
+?commands set style xerrorbars
+?set style xerrorbars
+?plotting styles xerrorbars
+?style xerrorbars
+?xerrorbars
+ The `xerrorbars` style is only relevant to 2D data plots. `xerrorbars` is
+ like `points`, except that a horizontal error bar is also drawn. At each point
+ (x,y), a line is drawn from (xlow,y) to (xhigh,y) or from (x-xdelta,y) to
+ (x+xdelta,y), depending on how many data columns are provided. A tic mark
+ is placed at the ends of the error bar (unless `set bars` is used---see
+ `set bars` for details). The basic style requires either 3 or 4 columns:
+
+ 3 columns: x y xdelta
+ 4 columns: x y xlow xhigh
+
+ An additional input column (4th or 5th) may be used to provide information
+ such as variable point color.
+
+?commands set style xyerrorbars
+?set style xyerrorbars
+?plotting styles xyerrorbars
+?style xyerrorbars
+?xyerrorbars
+ The `xyerrorbars` style is only relevant to 2D data plots. `xyerrorbars` is
+ like `points`, except that horizontal and vertical error bars are also drawn.
+ At each point (x,y), lines are drawn from (x,y-ydelta) to (x,y+ydelta) and
+ from (x-xdelta,y) to (x+xdelta,y) or from (x,ylow) to (x,yhigh) and from
+ (xlow,y) to (xhigh,y), depending upon the number of data columns provided. A
+ tic mark is placed at the ends of the error bar (unless `set bars` is
+ used---see `set bars` for details). Either 4 or 6 input columns are required.
+
+ 4 columns: x y xdelta ydelta
+ 6 columns: x y xlow xhigh ylow yhigh
+
+ If data are provided in an unsupported mixed form, the `using` filter on the
+ `plot` command should be used to set up the appropriate form. For example,
+ if the data are of the form (x,y,xdelta,ylow,yhigh), then you can use
+
+ plot 'data' using 1:2:($1-$3):($1+$3):4:5 with xyerrorbars
+
+ An additional input column (5th or 7th) may be used to provide variable
+ (per-datapoint) color information.
+
+?commands set style yerrorbars
+?commands set style errorbars
+?plotting styles yerrorbars
+?plotting styles errorbars
+?set style yerrorbars
+?set style errorbars
+?style yerrorbars
+?style errorbars
+?yerrorbars
+ The `yerrorbars` (or `errorbars`) style is only relevant to 2D data plots.
+ `yerrorbars` is like `points`, except that a vertical error bar is also drawn.
+ At each point (x,y), a line is drawn from (x,y-ydelta) to (x,y+ydelta) or
+ from (x,ylow) to (x,yhigh), depending on how many data columns are provided.
+ A tic mark is placed at the ends of the error bar (unless `set bars` is
+ used---see `set bars` for details). Either 3 or 4 input columns are required.
+
+ 3 columns: x y ydelta
+ 4 columns: x y ylow yhigh
+
+ An additional input column (4th or 5th) may be used to provide information
+ such as variable point color.
+
+ See also
+ errorbar demo.
+?commands set style xerrorlines
+?set style xerrorlines
+?plotting styles xerrorlines
+?style xerrorlines
+?xerrorlines
+ The `xerrorlines` style is only relevant to 2D data plots.
+ `xerrorlines` is like `linespoints`, except that a horizontal error
+ line is also drawn. At each point (x,y), a line is drawn from (xlow,y)
+ to (xhigh,y) or from (x-xdelta,y) to (x+xdelta,y), depending on how
+ many data columns are provided. A tic mark is placed at the ends of
+ the error bar (unless `set bars` is used---see `set bars` for details).
+ The basic style requires either 3 or 4 columns:
+
+ 3 columns: x y xdelta
+ 4 columns: x y xlow xhigh
+
+ An additional input column (4th or 5th) may be used to provide information
+ such as variable point color.
+
+?commands set style xyerrorlines
+?set style xyerrorlines
+?plotting styles xyerrorlines
+?style xyerrorlines
+?xyerrorlines
+ The `xyerrorlines` style is only relevant to 2D data plots.
+ `xyerrorlines` is like `linespoints`, except that horizontal and
+ vertical error bars are also drawn. At each point (x,y), lines are
+ drawn from (x,y-ydelta) to (x,y+ydelta) and from (x-xdelta,y) to
+ (x+xdelta,y) or from (x,ylow) to (x,yhigh) and from (xlow,y) to
+ (xhigh,y), depending upon the number of data columns provided. A tic
+ mark is placed at the ends of the error bar (unless `set bars` is
+ used---see `set bars` for details). Either 4 or 6 input columns are required.
+
+ 4 columns: x y xdelta ydelta
+ 6 columns: x y xlow xhigh ylow yhigh
+
+ If data are provided in an unsupported mixed form, the `using` filter on the
+ `plot` command should be used to set up the appropriate form. For example,
+ if the data are of the form (x,y,xdelta,ylow,yhigh), then you can use
+
+ plot 'data' using 1:2:($1-$3):($1+$3):4:5 with xyerrorlines
+
+ An additional input column (5th or 7th) may be used to provide variable
+ (per-datapoint) color information.
+
+?commands set style yerrorlines
+?commands set style errorlines
+?plotting styles yerrorlines
+?plotting styles errorlines
+?set style yerrorlines
+?set style errorlines
+?style yerrorlines
+?style errorlines
+?yerrorlines
+ The `yerrorlines` (or `errorlines`) style is only relevant to 2D data
+ plots. `yerrorlines` is like `linespoints`, except that a vertical
+ error line is also drawn. At each point (x,y), a line is drawn from
+ (x,y-ydelta) to (x,y+ydelta) or from (x,ylow) to (x,yhigh), depending
+ on how many data columns are provided. A tic mark is placed at the
+ ends of the error bar (see `set bars` for details).
+ Either 3 or 4 input columns are required.
+
+ 3 columns: x y ydelta
+ 4 columns: x y ylow yhigh
+
+ An additional input column (4th or 5th) may be used to provide information
+ such as variable point color.
+
+ See also
+ errorbar demo.
+?3D (surface) plots
+?plotting styles 3d (surface) plots
+ Surface plots are generated using the `splot` command rather than the `plot`
+ command. The style `with lines` draws a surface made from a grid of lines.
+ Solid surfaces can be drawn using the style `with pm3d`.
+ Usually the surface is displayed at some arbitrary viewing angle,
+ such that it clearly represents a 3D surface. In this case the X, Y, and Z
+ axes are all visible in the plot. The illusion of 3D is enhanced by choosing
+ hidden line removal or depth-sorted surface elements.
+ See `hidden3d` and `pm3d depthorder`.
+ The `splot` command can also calculate and draw contour lines corresponding
+ to constant Z values. These contour lines may be drawn onto the surface
+ itself, or projected onto the XY plane. See `set contour`.
+
+
+
+
+?2D projection (set view map)
+?projection
+ An important special case of the `splot` command is to map the Z coordinate
+ onto a 2D surface by projecting the plot along the Z axis. See `set view map`.
+ This plot mode can be used to generate contour plots and heat maps.
+
+
+?commands
+ This section lists the commands acceptable to `gnuplot` in alphabetical
+ order. Printed versions of this document contain all commands; the text
+ available interactively 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.
+?commands cd
+?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 that Windows users use single-quotes, because 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"
+ work as expected.
+?commands call
+?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 `call`ed 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 `call`ed
+ may themselves contain `call` or `load` commands.
+
+ 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 `call`ed datafile plot.
+?commands clear
+?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`, `set size`, and `set origin` for details of these
+ commands.
+?commands do
+?do
+ Syntax:
+ do for <iteration-spec> {
+ <commands>
+ <commands>
+ }
+ Execute a sequence of commands multiple times. The commands must be enclosed
+ in curly brackets, and the opening "{" must be on the same line as the `do`
+ keyword. This command cannot be used with old-style (un-bracketed) if/else
+ statements. See `if`. For examples of iteration specifiers, see `iteration`.
+ Example:
+ set multiplot layout 2,2
+ do for [name in "A B C D"] {
+ filename = name . ".dat"
+ set title sprintf("Condition %s",name)
+ plot filename title name
+ }
+ unset multiplot
+?commands evaluate
+?evaluate
+ The `evaluate` command executes the commands given as an argument string.
+ Newline characters are not allowed within the string.
+
+ Syntax:
+ eval <string expression>
+
+ This is especially useful for a repetition of similar commands.
+
+ Example:
+ set_label(x, y, text) \
+ = sprintf("set label '%s' at %f, %f point pt 5", text, x, y)
+ eval set_label(1., 1., 'one/one')
+ eval set_label(2., 1., 'two/one')
+ eval set_label(1., 2., 'one/two')
+
+ Please see `substitution macros` for another way to execute commands
+ from a string.
+?commands exit
+?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` for more details.
+?commands fit
+?fit
+?least-squares
+?Marquardt
+ The `fit` command can fit a user-supplied expression to a set of data points
+ (x,z) or (x,y,z), using an implementation of the nonlinear least-squares
+ (NLLS) Marquardt-Levenberg algorithm. Any user-defined variable occurring in
+ the expression may serve as a fit parameter, but the return type of the
+ expression must be real.
+
+ Syntax:
+ fit {<ranges>} <expression>
+ '<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`.
+
+ <expression> is any valid `gnuplot` expression, although it is usual to use a
+ previously user-defined function of the form f(x) or f(x,y).
+
+ <datafile> is treated as in the `plot` command. All the `plot datafile`
+ modifiers (`using`, `every`,...) except `smooth` and the deprecated `thru`
+ are applicable to `fit`. See `plot datafile`.
+
+ The default data formats for fitting functions with a single
+ independent variable, z=f(x), are z or x:z. That is, if there is
+ only a single column then it is the dependent variable and the line
+ numbers is the independent variable. If there are two columns, the
+ first is the independent variable and the second is the dependent
+ variable.
+
+ Those formats can be changed with the datafile `using` qualifier, for
+ example to take the z value from a different column or to calculate
+ it from several columns. A third `using` qualifier (a column number
+ or an expression), if present, is interpreted as the standard
+ deviation of the corresponding z 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 z standard 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`), e.g., `using 1:2:3:(1)`.
+
+ The fit function may have up to five independent variables. There
+ must be two more `using` qualifiers than there are independent
+ variables, unless there is only one variable. The allowed formats,
+ and the default dummy variable names, are as follows:
+
+ z
+ x:z
+ x:z:s
+ x:y:z:s
+ x:y:t:z:s
+ x:y:t:u:z:s
+ x:y:t:u:v:z:s
+
+ The dummy variable names may be changed with ranges as noted above.
+ The first range corresponds to the first `using` spec, etc. A range
+ may also be given for z (the dependent variable), but that name
+ cannot be changed.
+
+ 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`.
+
+ 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
+ fit a0 + a1*x/(1 + a2*x/(1 + a3*x)) 'measured.dat' via a0,a1,a2,a3
+ fit a*x + b*y 'surface.dat' using 1:2:3:(1) via a,b
+ fit [*:*][yaks=*:*] a*x+b*yaks 'surface.dat' u 1:2:3:(1) via a,b
+ fit a*x + b*y + c*t 'foo.dat' using 1:2:3:4:(1) via a,b,c
+ h(x,y,t,u,v) = a*x + b*y + c*t + d*u + e*v
+ fit h(x,y,t,u,v) 'foo.dat' using 1:2:3:4:5:6:(1) via a,b,c,d,e
+
+ 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.
+ After the current iteration completes, you have the option to
+ (1) stop the fit and accept the current parameter values,
+ (2) continue the fit, (3) execute a `gnuplot` command as specified by the
+ environment variable FIT_SCRIPT. The default for FIT_SCRIPT is `replot`,
+ so if you had previously plotted both the data and the fitting function in
+ one graph, you can display the current state of the fit.
+
+ Once `fit` has finished, the `update` command may be used to store final
+ values in a file for subsequent use as a parameter file. See `update`
+ for details.
+?commands fit parameters
+?fit parameters
+?commands fit adjustable_parameters
+?fit adjustable_parameters
+?fit_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.
+
+?commands fit beginners_guide
+?fit beginners_guide
+?fit guide
+?fitting
+ `fit` is used to find a set of parameters that 'best' fits your data to your
+ user-defined function. The fit is judged on the basis of the sum of the
+ squared differences or 'residuals' (SSR) between the input data points and
+ the function values, evaluated at the same places. This quantity is often
+ called 'chisquare' (i.e., the Greek letter chi, to the power of 2). The
+ algorithm attempts to minimize SSR, or more precisely, WSSR, as the residuals
+ are 'weighted' by the input data errors (or 1.0) before being squared;
+ see `fit error_estimates` for details.
+
+ That's why it is called 'least-squares fitting'. Let's look at an example
+ to see what is meant by 'non-linear', but first we had better go over some
+ terms. Here it is convenient to use z as the dependent variable for
+ user-defined functions of either one independent variable, z=f(x), or two
+ independent variables, z=f(x,y). A parameter is a user-defined variable
+ that `fit` will adjust, i.e., an unknown quantity in the function
+ declaration. Linearity/non-linearity refers to the relationship of the
+ dependent variable, z, to the parameters which `fit` is adjusting, not of
+ z to the independent variables, x and/or y. (To be technical, the
+ second {and higher} derivatives of the fitting function with respect to
+ the parameters are zero for a linear least-squares problem).
+
+ For linear least-squares (LLS), the user-defined function will be a sum of
+ simple functions, not involving any parameters, each multiplied by one
+ parameter. NLLS handles more complicated functions in which parameters can
+ be used in a large number of ways. An example that illustrates the
+ difference between linear and nonlinear least-squares is the Fourier series.
+ One member may be written as
+ z=a*sin(c*x) + b*cos(c*x).
+ If a and b are the unknown parameters and c is constant, then estimating
+ values of the parameters is a linear least-squares problem. However, if
+ c is an unknown parameter, the problem is nonlinear.
+
+ In the linear case, parameter values can be determined by comparatively
+ simple linear algebra, in one direct step. However LLS is a special case
+ which is also solved along with more general NLLS problems by the iterative
+ procedure that `gnuplot` uses. `fit` attempts to find the minimum by doing
+ a search. Each step (iteration) calculates WSSR with a new set of parameter
+ values. The Marquardt-Levenberg algorithm selects the parameter values for
+ the next iteration. The process continues until a preset criterion is met,
+ either (1) the fit has "converged" (the relative change in WSSR is less than
+ FIT_LIMIT), or (2) it reaches a preset iteration count limit, FIT_MAXITER
+ (see `fit control variables`). The fit may also be interrupted
+ and subsequently halted from the keyboard (see `fit`). 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`.
+
+ 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`.
+?commands fit error_estimates
+?fit error_estimates
+?fit errors
+ 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'.
+?commands fit error statistical_overview
+?fit error statistical_overview
+?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 indicating correlation of
+ parameters in the region of the solution; The main diagonal elements,
+ autocorrelation, are always 1; if all parameters were independent, the
+ off-diagonal 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.
+?commands fit error practical_guidelines
+?fit error practical_guidelines
+?practical_guidelines
+?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.
+?commands fit control
+?fit 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'.
+?commands fit control variables
+?fit 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`.
+?commands fit control environment
+?fit control environment
+ 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.
+?commands fit multi-branch
+?fit multi-branch
+?multi-branch
+?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.
+?commands fit starting_values
+?fit starting_values
+?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.
+?commands fit tips
+?fit tips
+?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!"
+?commands help
+?help
+ The `help` command displays built-in 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.
+?commands history
+?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.
+?commands if
+?if
+ New syntax:
+ if (<condition>) { <command>; <command>
+ <commands>
+ <commands>
+ } else {
+ <commands>
+ }
+ Old syntax:
+ if (<condition>) <command-line> [; else if (<condition>) ...; else ...]
+
+ This version of gnuplot supports block-structured if/else statements. If the
+ keyword `if` or `else` is immediately followed by an opening "{", then
+ conditional execution applies to all statements, possibly on multiple input
+ lines, until a matching "}" terminates the block. If commands may be nested.
+
+ The old single-line if/else syntax is still supported, but can not be
+ mixed with the new block-structured syntax. See `if-old`.
+?if if-old
+?if-old
+ Through gnuplot version 4.4, the scope of the if/else commands was limited to
+ a single input line. This has been replaced by allowing a multi-line clause to
+ be enclosed in curly brackets. The old syntax is still honored by itself but
+ cannot be used inside a bracketed clause.
+
+ If no opening "{" follows the `if` keyword, the command(s) in <command-line>
+ will be executed if <condition> is true (non-zero) or skipped if <condition> is
+ false (zero). Either case will consume commands on the input line until the
+ end of the line or an 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` for an example of using if and reread together to perform a loop.
+?iteration
+?iterate
+ The `plot`, `splot`, `set` and `unset` commands may optionally contain an
+ iteration clause. This has the effect of executing the basic command
+ multiple times, each time re-evaluating any expressions that make use of the
+ iteration control variable. Iteration of arbitrary command sequences can be
+ requested using the `do` command.
+ Two forms of iteration clause are currently supported:
+
+ for [intvar = start:end{:increment}]
+ for [stringvar in "A B C D"]
+
+ Examples:
+
+ plot for [filename in "A.dat B.dat C.dat"] filename using 1:2 with lines
+ plot for [basename in "A B C"] basename.".dat" using 1:2 with lines
+ set for [i = 1:10] style line i lc rgb "blue"
+ unset for [tag = 100:200] label tag
+
+ Nested iteration is supported:
+
+ set for [i=1:9] for [j=1:9] label i*10+j sprintf("%d",i*10+j) at i,j
+
+ See additional documentation for `plot iteration`, `do`.
+
+?commands load
+?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 `load`ed. Any text file containing valid commands can be created
+ and then executed by the `load` command. Files being `load`ed may themselves
+ contain `load` or `call` commands. See `comments` for information about
+ comments in commands. To `load` with arguments, see `call`.
+
+ 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` 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.
+?commands lower
+?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`.
+?commands pause
+?pause
+?pause mouse
+ 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`.
+
+ 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:
+
+ print "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
+
+?commands plot
+?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 2D
+ functions and data; `splot` draws 2D projections of 3D surfaces and data.
+ `plot` and `splot` offer many features in common; see `splot` for differences.
+ Note specifically that although the `binary <binary list>` variation does
+ work for both `plot` and `splot`, there are small differences between them.
+
+ Syntax:
+ plot {<ranges>}
+ {<iteration>}
+ {<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. Functions may be builtin, user-defined, or
+ provided in the plot command itself. Multiple datafiles and/or functions may
+ be plotted in a single command, separated by commas. See `data`, `functions`.
+
+ Examples:
+ plot sin(x)
+ plot sin(x), cos(x)
+ plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x)
+ plot "datafile.1" with lines, "datafile.2" with points
+ plot [t=1:10] [-pi:pi*2] tan(t), \
+ "data.1" using (tan($2)):($3/$4) smooth csplines \
+ axes x1y2 notitle with lines 5
+ plot for [datafile in "spinach.dat broccoli.dat"] datafile
+
+ See also `show plot`.
+?commands plot axes
+?plot axes
+?axes
+ 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).
+?binary
+?data binary
+?datafile binary
+?plot data binary
+ BINARY DATA FILES:
+
+ Some earlier versions of `gnuplot` automatically detected binary data files.
+ It is now necessary to provide the keyword `binary` after the filename.
+ Adequate 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, binary matrix
+ format and binary general format.
+
+ The `binary matrix` 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, enumeration of the coordinate row
+ constitutes column 1, enumeration of the coordinate column constitutes
+ column 2, and the array of values constitutes column 3.
+
+ The `binary general` 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.
+
+ `Binary matrix` is the default binary format when no keywords specific to
+ `binary general` 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 `binary matrix` or `binary general` for more details.
+
+ The `index` keyword is not supported, since the file format allows only one
+ surface per file. The `every` and `using` filters are supported. `using`
+ operates as if the data were read in the above triplet form.
+ Binary File Splot Demo.
+?commands plot binary general
+?commands splot binary general
+?plot binary general
+?splot binary general
+?datafile binary general
+?data binary general
+?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`
+ 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.
+?binary 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 of the array. For example, `array=(10,20)` 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 negative number indicates that data should be read until the end of file.
+ If there is only one dimension, the parentheses may be omitted.
+ A colon can be used to separate the dimensions for multiple records.
+ For example, `array=25:35` indicates there are two one-dimensional records in
+ the file.
+ Note: Gnuplot version 4.2 used the syntax array=128x128 rather than
+ array=(128,128). The older syntax is now deprecated, but may
+ still work if your copy of gnuplot was built to support
+ backwards compatibility.
+?binary 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.
+?binary skip
+ This keyword allows you to skip sections of a binary file. For instance, if the
+ file contains a 1024 byte header before the start of the data region you would
+ probably want to use
+ plot '<file_name>' binary skip=1024 ...
+ If there are multiple records in the file, you may specify a leading offset for
+ each. For example, to skip 512 bytes before the 1st record and 256 bytes before
+ the second and third records
+ plot '<file_name> binary record=356:356:356 skip=512:256:256 ...
+?binary 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, similar to the `using` specification, the format can include
+ discarded columns via the `*` character and have implicit repetition via a
+ numerical repeat-field. For example, `format="%*2int%3float"` causes gnuplot
+ to discard two ints before reading three floats. 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.
+?binary 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.
+?binary filetype
+?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`
+ for details.)
+?binary filetype avs
+?filetype avs
+?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.
+?binary filetype edf
+?filetype edf
+?edf
+?filetype ehf
+?ehf
+ `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.edfplus.info/specs
+?binary filetype png
+?binary filetype gif
+?binary filetype jpeg
+?filetype png
+?filetype gif
+?filetype jpeg
+ If gnuplot was configured to use the libgd library for png/gif/jpeg output,
+ then it can also be used to read these same image types as binary files.
+ You can use an explicit command
+ plot 'file.png' binary filetype=png
+ Or the file type will be recognized automatically from the extension if you
+ have previously requested
+ set datafile binary filetype=auto
+?binary keywords
+ The following keywords apply only when generating coordinates from binary
+ data files. That is, the control mapping the individual elements of a binary
+ array, matrix, or image to specific x/y/z positions.
+?binary keywords 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.
+?binary keywords transpose
+ Shorthand notation for `scan=yx` or `scan=yxz`.
+?binary keywords dx
+?binary keywords dy
+?dx
+?dy
+ 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.
+?binary keywords flipx
+ 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.
+?binary keywords 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.
+?binary keywords center
+?keywords 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`.
+?binary keywords rotate
+?keywords 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`.
+?binary keywords 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.)
+?commands plot datafile
+?plot datafile
+?data-file
+?datafile
+?data
+?file
+ 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>}
+ {{nonuniform} matrix}
+ {index <index list> | index "<name>"}
+ {every <every list>}
+ {thru <thru expression>}
+ {using <using list>}
+ {smooth <option>}
+ {volatile} {noautoscale}
+
+ 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.)
+
+ The `noautoscale` keyword means that the points making up this plot will be
+ ignored when automatically determining axis range limits.
+
+ 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 `plot`s with error bars or
+ error bars with lines (see `set style errorbars` or `set style errorlines`),
+ 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 specifiers 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`.
+
+ 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 up to the next tic mark.
+
+ Label coordinates and text can also be read from a data file (see `labels`).
+
+?commands plot datafile every
+?plot datafile every
+?plot every
+?data-file every
+?datafile every
+?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`).
+
+ 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. ':' at the end of the `every` option is not permitted.
+ 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
+ .
+?commands plot datafile example
+?plot datafile example
+?plot example
+?datafile example
+?data-file example
+?example
+ This example plots the data in the file "population.dat" and a theoretical
+ curve:
+
+ pop(x) = 103*exp((1965-x)/10)
+ set xrange [1960:1990]
+ plot '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
+
+ Binary 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=(512,1024):(1024,512) 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
+
+ # Same input file, but this time we skip the 1st and 3rd records
+ splot '<file_name>' binary record=30:26 skip=360:348 endian=swap u 1:2:3
+
+
+ See also `binary matrix`.
+?commands plot datafile index
+?plot datafile index
+?plot index
+?data-file index
+?datafile index
+?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>}} | "<name>" }
+
+ 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 <p> is specified but <n> is left blank then every <p>-th dataset is read
+ until the end of the file. If `index` is not specified, the entire file is
+ 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 than 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 `pseudocolumns`, `lc variable`.
+
+ Example:
+ plot 'file' using 1:(column(-2)==4 ? $2 : NaN) # very awkward
+ plot 'file' using 1:2:(column(-2)) linecolor variable # very useful!
+
+ `index '<name>'` selects the data set with name '<name>'. Names are assigned
+ to data sets in comment lines. The comment character and leading white space
+ are removed from the comment line. If the resulting line starts with <name>,
+ the following data set is now named <name> and can be selected.
+
+ Example:
+ plot 'file' index 'Population'
+
+ Please note that every comment that starts with <name> will name the following
+ data set. To avoid problems it may be useful to choose a naming scheme like
+ '== Population ==' or '[Population]'.
+
+?commands plot datafile smooth
+?plot datafile smooth
+?plot smooth
+?data-file smooth
+?datafile smooth
+?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 | cumulative | cnormal | kdensity | unwrap
+ | csplines | acsplines | mcsplines | bezier | sbezier}
+
+ `unique`, `frequency`, `cumulative` and `cnormal` plot the data after
+ making them monotonic. `unwrap` manipulates the data to avoid jumps of more
+ than pi between the y value of successive points. 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`) 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.
+?commands plot datafile smooth acsplines
+?plot datafile smooth acsplines
+?data-file smooth acsplines
+?datafile smooth acsplines
+?plot smooth acsplines
+?plot acsplines
+?smooth acsplines
+?acsplines
+ The `acsplines` option approximates the data with a "natural smoothing spline".
+ After the data are made monotonic in x (see `smooth unique`), 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
+?commands plot datafile smooth bezier
+?plot datafile smooth bezier
+?plot smooth bezier
+?data-file smooth bezier
+?datafile smooth bezier
+?plot bezier
+?smooth bezier
+?bezier
+ The `bezier` option approximates the data with a Bezier curve of degree n
+ (the number of data points) that connects the endpoints.
+?commands plot datafile smooth csplines
+?plot datafile smooth csplines
+?plot smooth csplines
+?data-file smooth csplines
+?datafile smooth csplines
+?plot csplines
+?smooth csplines
+?csplines
+ The `csplines` option connects consecutive points by natural cubic splines
+ after rendering the data monotonic (see `smooth unique`).
+?commands plot datafile smooth mcsplines
+?plot datafile smooth mcsplines
+?plot smooth mcsplines
+?data-file smooth mcsplines
+?datafile smooth mcsplines
+?plot mcsplines
+?smooth mcsplines
+?mcsplines
+ The `mcsplines` option connects consecutive points by cubic splines constrained
+ such that the smoothed function preserves the monotonicity and convexity of the
+ original data points.
+ FN Fritsch & RE Carlson (1980) "Monotone Piecewise Cubic Interpolation",
+ SIAM Journal on Numerical Analysis 17: 238–246.
+?commands plot datafile smooth sbezier
+?plot datafile smooth sbezier
+?plot smooth sbezier
+?data-file smooth sbezier
+?datafile smooth sbezier
+?plot sbezier
+?smooth sbezier
+?sbezier
+ The `sbezier` option first renders the data monotonic (`unique`) and then
+ applies the `bezier` algorithm.
+?commands plot datafile smooth unique
+?plot datafile smooth unique
+?plot smooth unique
+?data-file smooth unique
+?datafile smooth unique
+?plot unique
+?smooth unique
+?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.
+?commands plot datafile smooth unwrap
+?plot datafile smooth unwrap
+?plot smooth unwrap
+?data-file smooth unwrap
+?datafile smooth unwrap
+?plot unwrap
+?smooth unwrap
+?unwrap
+ The `unwrap` option modifies the input data so that any two successive
+ points will not differ by more than pi; a point whose y value is
+ outside this range will be incremented or decremented by multiples of
+ 2pi until it falls within pi of the previous point. This operation is
+ useful for making wrapped phase measurements continuous over time.
+?commands plot datafile smooth frequency
+?plot datafile smooth frequency
+?plot smooth frequency
+?data-file smooth frequency
+?datafile smooth frequency
+?plot frequency
+?smooth frequency
+?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.
+ See also
+ smooth.dem
+?commands plot datafile smooth cumulative
+?plot datafile smooth cumulative
+?plot smooth cumulative
+?data-file smooth cumulative
+?datafile smooth cumulative
+?plot cumulative
+?smooth cumulative
+?cumulative
+ The `cumulative` option makes the data monotonic in x; points with the same
+ x-value are replaced by a single point containing the cumulative sum of
+ y-values of all data points with lower x-values (i.e. to the left of the
+ current data point). This can be used to obtain a cumulative distribution
+ function from data.
+ See also
+ smooth.dem
+?commands plot datafile smooth cnormal
+?plot datafile smooth cnormal
+?plot smooth cnormal
+?data-file smooth cnormal
+?datafile smooth cnormal
+?plot cnormal
+?smooth cnormal
+?cnormal
+ The `cnormal` option makes the data monotonic in x and normalises the
+ y-values onto the range [0:1]. Points with the same x-value are
+ replaced by a single point containing the cumulative sum of y-values
+ of all data points with lower x-values (i.e. to the left of the
+ current data point) divided by the total sum of all y-values. This can
+ be used to obtain a normalised cumulative distribution function from
+ data (useful when comparing sets of samples with differing numbers of
+ members).
+ See also
+ smooth.dem
+
+?commands plot datafile smooth kdensity
+?plot datafile smooth kdensity
+?plot smooth kdensity
+?data-file smooth kdensity
+?datafile smooth kdensity
+?plot kdensity
+?smooth kdensity
+?kdensity
+ The `kdensity` option is a way to plot a kernel density estimate (which is a
+ smooth histogram) for a random collection of points, using Gaussian kernels.
+ A Gaussian is placed at the location of each point in the first column and
+ the sum of all these Gaussians is plotted as a function. The value in the
+ second column is taken as weight of the Gaussian. (To obtain a normalized
+ histogram, this should be 1/number-of-points). The value of the third column,
+ if supplied, is taken as the bandwidth for the kernels. If only two columns
+ have been specified, or if the value of the third column is zero or less,
+ gnuplot calculates the bandwidth which would be optimal if the input data was
+ normally distributed. (This will usually be a very conservative, i.e. broad
+ bandwidth.)
+?commands plot datafile special-filenames
+?plot datafile special-filenames
+?plot special-filenames
+?datafile special-filenames
+?special-filenames
+ There are a few filenames that have a special meaning: '', '-', '+' and '++'.
+
+ The empty filename '' tells gnuplot to re-use the previous input file in the
+ same plot command. So to plot two columns from the same input file:
+
+ plot 'filename' using 1:2, '' using 1:3
+
+ The special filenames '+' and '++' are a mechanism to allow the full range of
+ `using` specifiers and plot styles with in-line functions. Normally a function
+ plot can only have a single y (or z) value associated with each sampled point.
+ The pseudo-file '+' treats the sampled points as column 1, and allows
+ additional column values to be specified via a `using` specification, just as
+ for a true input file. The number of samples returned is controlled by
+ `set samples`.
+ Example:
+
+ plot '+' using ($1):(sin($1)):(sin($1)**2) with filledcurves
+
+ Similarly the pseudo-file '++' returns 2 columns of data forming a regular
+ grid of [x,y] coordinates with the number of points along x controlled by
+ `set samples` and the number of points along y controlled by `set isosamples`.
+ In parametric mode the samples are along u and v rather than along x and y.
+ You must set xrange and yrange (or urange and vrange) before plotting '++'.
+ Examples:
+
+ splot '++' using 1:2:(sin($1)*sin($2)) with pm3d
+ plot '++' using 1:2:(sin($1)*sin($2)) with image
+
+ The special filename `'-'` 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`, `refresh`.
+
+ 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 systems with a popen function, 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.
+
+ On systems with an fdopen() function, data can be read from an arbitrary file
+ descriptor attached to either a file or pipe. To read from file descriptor
+ `n` use `'<&n'`. This allows you to easily pipe in several data files in a
+ single call from a POSIX shell:
+
+ $ gnuplot -p -e "plot '<&3', '<&4'" 3<data-3 4<data-4
+ $ ./gnuplot 5< <(myprogram -with -options)
+ gnuplot> plot '<&5'
+?commands plot datafile thru
+?plot datafile thru
+?plot thru
+?data-file thru
+?datafile thru
+?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.
+?commands plot datafile using
+?plot datafile using
+?plot using
+?data-file using
+?datafile using
+?using
+ The most common datafile modifier is `using`. It tells the program which
+ columns of data in the input file are to be plotted.
+
+ Syntax:
+ plot 'file' using <entry> {:<entry> {:<entry> ...}} {'format'}
+
+ If a format is specified, it is used to read in each datafile record using the
+ C library 'scanf' function. Otherwise the record is interpreted as consisting
+ of columns (fields) of data separated by whitespace (spaces and/or tabs),
+ but see `datafile separator`.
+
+ Each <entry> may be a simple column number that selects the value from one
+ field of the input file, a string that matches a column label in the first
+ line of a data set, an expression enclosed in parentheses, or a special
+ function not enclosed in parentheses such as xticlabels(2).
+
+ 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.
+ If each column of data in the input file contains a label in the first row
+ rather than a data value, this label can be used to identify the column on
+ input and/or in the plot legend. The column() function can be used to select
+ an input column by label rather than by column number. For example,
+ if the data file contains
+ Height Weight Age
+ val1 val1 val1
+ ... ... ...
+ then the following plot commands are all equivalent
+ plot 'datafile' using 3:1, '' using 3:2
+ plot 'datafile' using (column("Age")):(column(1)), \
+ '' using (column("Age")):(column(2))
+ plot 'datafile' using "Age":"Height", '' using "Age":"Weight"
+
+ The full string must match. Comparison is case-sensitive.
+ To use the column labels in the plot legend, use
+ `set key autotitle columnhead`.
+
+ 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. Please see `pseudocolumns`.
+
+ 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 only 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` and `fit` 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.
+?examples
+?commands plot datafile using examples
+?plot datafile using examples
+?datafile using examples
+?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.
+?pseudocolumns
+?commands plot datafile using pseudocolumns
+?plot datafile using pseudocolumns
+?datafile using pseudocolumns
+?using pseudocolumns
+ Expressions in the `using` clause of a plot statement can refer to additional
+ bookkeeping values in addition to the actual data values contained in the input
+ file. These are contained in "pseudocolumns".
+ column(0) The sequential order of each point within a data set.
+ The counter starts at 0 and is reset by two sequential blank
+ records. The shorthand form $0 is available.
+ column(-1) This counter starts at 0 and is reset by a single blank line.
+ This corresponds to the data line in array or grid data.
+ column(-2) The index number of the current data set within a file that
+ contains multiple data sets. See `index`.
+?xticlabels
+?using xticlabels
+?plot using xticlabels
+ Axis tick labels can be generated via a string function, usually taking a data
+ column as an argument. The simplest form uses the data column itself as a
+ string. That is, xticlabels(N) is shorthand for xticlabels(stringcolumn(N)).
+ This example uses the contents of column 3 as x-axis tick labels.
+
+ plot 'datafile' using <xcol>:<ycol>:xticlabels(3) with <plotstyle>
+
+ Axis tick labels may be generated 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 string value given to xticlabels() is added to the list of xtic labels
+ at the same X coordinate as the point it belongs to. `xticlabels()`
+ may be shortened to `xtic()` and so on.
+
+ 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.
+
+ Example:
+
+ plot "data" using 1:2:xtic( $3 > 10. ? "A" : "B" )
+
+ This example shows the use of a string-valued function to generate x-axis
+ tick labels. Each point in the data file generates a tick mark on x labeled
+ either "A" or "B" depending on the value in column 3.
+?using x2ticlabels
+?plot using x2ticlabels
+ See `plot using xticlabels`.
+?using yticlabels
+?plot using yticlabels
+ See `plot using xticlabels`.
+?using y2ticlabels
+?plot using y2ticlabels
+ See `plot using xticlabels`.
+?using zticlabels
+?plot using zticlabels
+ See `plot using xticlabels`.
+?datafile volatile
+?data volatile
+?plot datafile volatile
+?plot volatile
+?volatile
+ The `volatile` keyword in a plot command indicates that the data previously
+ read from the input stream or file may not be available for re-reading.
+ This tells the program to use `refresh` rather than `replot` commands whenever
+ possible. See `refresh`.
+?commands plot errorbars
+?commands splot errorbars
+?plot errorbars
+?splot errorbars
+?errorbars
+ Error bars are supported for 2D 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`).
+
+ The error bars have crossbars at each end unless `set bars` is used
+ (see `set bars` for details).
+
+ If autoscaling is on, the ranges will be adjusted to include the error bars.
+
+ See also
+ errorbar demos.
+
+ See `plot using`, `plot with`, and `set style` for more information.
+?commands plot errorlines
+?commands splot errorlines
+?plot errorlines
+?splot errorlines
+?errorlines
+ Lines with error bars are supported for 2D 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` for details).
+
+ If autoscaling is on, the ranges will be adjusted to include the error bars.
+
+ See `plot using`, `plot with`, and `set style` for more information.
+?commands plot functions
+?plot functions
+?functions
+ Built-in or user-defined functions can be displayed by the `plot` and `splot`
+ commands in addition to, or instead of, data read from a file. The requested
+ function is evaluated by sampling at regular intervals spanning the independent
+ axis range[s]. See `set samples` and `set isosamples`.
+ Example:
+ approx(ang) = ang - ang**3 / (3*2)
+ plot sin(x) title "sin(x)", approx(x) title "approximation"
+
+ To set a default plot style for functions, see `set style function`.
+ For information on built-in functions, see `expressions functions`.
+ For information on defining your own functions, see `user-defined`.
+?commands plot parametric
+?commands splot parametric
+?plot parametric
+?splot 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.
+?commands plot ranges
+?commands splot ranges
+?plot ranges
+?splot ranges
+?ranges
+ The optional axis ranges at the start of a plot command specify the region of
+ the graph that will be displayed. These override any ranges established by a
+ previous `set range` statement.
+
+ 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`.
+
+ 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`.
+
+ 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'
+
+?commands plot iteration
+?commands splot iteration
+?plot iteration
+?splot iteration
+ If many similar files or functions are to be plotted together, it may be
+ convenient to do so by iterating over a shared plot command.
+
+ Syntax:
+ plot for [<variable> = <start> : <end> {:<increment>}]
+ plot for [<variable> in "string of words"]
+
+ The scope of an iteration ends at the next comma or the end of the
+ command, whichever comes first. Iteration can not be nested.
+
+ This will plot one curve, sin(3x), because iteration ends at the comma
+ plot for [i=1:3] j=i, sin(j*x)
+ This will plot three curves because there is no comma after the definition of j
+ plot for [i=1:3] j=i sin(j*x)
+
+ Example:
+ plot for [dataset in "apples bananas"] dataset."dat" title dataset
+
+ In this example iteration is used both to generate a file name and a
+ corresponding title.
+
+ Example:
+ file(n) = sprintf("dataset_%d.dat",n)
+ splot for [i=1:10] file(i) title sprintf("dataset %d",i)
+
+ This example defines a string-valued function that generates file names,
+ and plots ten such files together. The iteration variable ('i' in this
+ example) is treated as an integer, and may be used more than once.
+
+ Example:
+ set key left
+ plot for [n=1:4] x**n sprintf("%d",n)
+
+ This example plots a family of functions.
+
+ Example:
+ list = "apple banana cabbage daikon eggplant"
+ item(n) = word(list,n)
+ plot for [i=1:words(list)] item[i].".dat" title item(i)
+ list = "new stuff"
+ replot
+
+ This example steps through a list and plots once per item.
+ Because the items are retrieved dynamically, you can change the list
+ and then replot.
+
+ Example:
+ list = "apple banana cabbage daikon eggplant"
+ plot for [i in list] i.".dat" title i
+ list = "new stuff"
+ replot
+
+ This is example does exactly the same thing as the previous example, but uses
+ the string iterator form of the command rather than an integer iterator.
+
+?commands plot title
+?commands splot title
+?plot title
+?splot title
+?columnheader
+ By default each plot is listed in the key by the corresponding function or file
+ name. You can give an explicit plot title instead using the `title` option.
+
+ Syntax:
+ title <text> | notitle [<ignored text>]
+ title columnheader | title columnheader(N)
+
+ where <text> is a quoted string or an expression that evaluates to a string.
+ The quotes will not be shown in the key.
+
+ There is also an option that will interpret the first entry in a column of
+ input data (i.e. the column header) as a text field, and use it as the key
+ title. See `datastrings`. This can be made the default by specifying
+ `set key autotitle columnhead`.
+
+ 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` 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
+
+ Plot multiple columns of data, each of which contains its own title in the file
+ plot for [i=1:4] 'data' using i title columnhead
+
+?commands plot with
+?commands splot with
+?commands plot style
+?commands splot style
+?plot with
+?plot style
+?splot with
+?splot style
+?style
+?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} {nosurface}
+ {palette}}
+ }
+
+
+ where <style> is one of
+
+ lines dots steps errorbars xerrorbar xyerrorlines
+ points impulses fsteps errorlines xerrorlines yerrorbars
+ linespoints labels histeps financebars xyerrorbars yerrorlines
+ vectors
+ or
+ boxes candlesticks image circles
+ boxerrorbars filledcurves rgbimage ellipses
+ boxxyerrorbars histograms rgbalpha pm3d
+ boxplot
+
+ The first group of styles have associated line, point, and text properties.
+ The second group of styles also have fill properties. See `fillstyle`. Some
+ styles have further sub-styles. See `plotting styles` for details of each.
+
+ A default style may be chosen by `set style function` and `set style data`.
+
+ 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. To see the complete set of line and point
+ types available for the current terminal, type `test`.
+
+ 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` 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 input column in the `using` specifier.
+ See `colors`, `set palette`, `linetype`.
+
+ 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.
+
+ Similarly, the keyword `nosurface` will turn off the 3D surface for an
+ individual plot even if the global property `set surface` 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
+
+?commands print
+?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`. The output file can be set with `set print`.
+?commands pwd
+?pwd
+ The `pwd` command prints the name of the working directory to the screen.
+
+ Note that if you wish to store the current directory into a string variable
+ or use it in string expressions, then you can use variable GPVAL_PWD, see
+ `show variables all`.
+?commands quit
+?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.
+?commands raise
+?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 perhaps the plot window is
+ running in a different X11 session (telnet or ssh session, for example), or
+ perhaps raising is blocked by your window manager policy setting.
+?commands refresh
+?refresh
+ The `refresh` command is similar to `replot`, with two major differences.
+ `refresh` reformats and redraws the current plot using the data already read
+ in. This means that you can use `refresh` for plots with in-line data
+ (pseudo-device '-') and for plots from datafiles whose contents are volatile.
+ You cannot use the `refresh` command to add new data to an existing plot.
+
+ Mousing operations, in particular zoom and unzoom, will use `refresh` rather
+ than `replot` if appropriate. Example:
+
+ plot 'datafile' volatile with lines, '-' with labels
+ 100 200 "Special point"
+ e
+ # Various mousing operations go here
+ set title "Zoomed in view"
+ set term post
+ set output 'zoom.ps'
+ refresh
+
+?commands replot
+?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, because it will require that you type in the data all
+ over again. In most cases you can use the `refresh` command instead, which
+ will redraw the plot using the data previously read in.
+
+ 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` for ways to edit the last `plot` (`splot`)
+ command.
+
+ See also `show plot` to show the whole current plotting command, and the
+ possibility to copy it into the `history`.
+?commands reread
+?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`.)
+ 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.
+
+?commands reset
+?reset
+?reset errors
+?reset bind
+ 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 are _not_ affected by `reset`.
+ `set term` `set output` `set loadpath` `set fontpath` `set linetype`
+ `set encoding` `set decimalsign` `set locale` `set psdir`
+
+ `reset errors` clears only the error state variables GPVAL_ERRNO and
+ GPVAL_ERRMSG.
+
+ `reset bind` restores all hotkey bindings to their default state.
+?commands save
+?save set
+?save
+ The `save` command saves user-defined functions, variables, the `set
+ term` status, all `set` options, or all of these, plus the last `plot`
+ (`splot`) command to the specified file.
+
+ Syntax:
+ save {<option>} '<filename>'
+
+ where <option> is `functions`, `variables`, `terminal` or `set`. If
+ no option is used, `gnuplot` saves functions, variables, `set`
+ options and the last `plot` (`splot`) command.
+
+ `save`d files are written in text format and may be read by the
+ `load` command. For `save` with the `set` option or without any
+ option, the `terminal` choice and the `output` filename are written
+ out as a comment, to get an output file that works in other
+ installations of gnuplot, without changes and without risk of
+ unwillingly overwriting files.
+
+ `save terminal` will write out just the `terminal` status, without
+ the comment marker in front of it. This is mainly useful for
+ switching the `terminal` setting for a short while, and getting back
+ to the previously set terminal, afterwards, by loading the saved
+ `terminal` status. Note that for a single gnuplot session you may
+ rather use the other method of saving and restoring current terminal
+ by the commands `set term push` and `set term pop`, see `set term`.
+
+ The filename must be enclosed in quotes.
+
+ The special filename "-" may be used to `save` commands to standard output.
+ On systems which support a popen function (Unix), the output of save can be
+ piped through an external program by starting the file name with a '|'.
+ This provides a consistent interface to `gnuplot`'s internal settings to
+ programs which communicate with `gnuplot` through a pipe. Please see
+ help for `batch/interactive` for more details.
+
+ Examples:
+ save 'work.gnu'
+ save functions 'func.dat'
+ save var 'var.dat'
+ save set 'options.dat'
+ save term 'myterm.gnu'
+ save '-'
+ save '|grep title >t.gp'
+?commands set
+?commands show
+?set
+?show
+?show all
+ The `set` command can be used to set _lots_ of options. No screen is
+ drawn, however, until a `plot`, `splot`, or `replot` command is given.
+
+ The `show` command shows their settings; `show all` shows all the settings.
+
+ Options changed using `set` can be returned to the default state by giving the
+ corresponding `unset` command. See also the `reset` command, which returns
+ all settable parameters to default values.
+
+ If a variable contains time/date data, `show` will display it according to
+ the format currently defined by `set timefmt`, even if that was not in effect
+ when the variable was initially defined.
+ The `set` and `unset` commands may optionally contain an iteration clause.
+ See `iteration`.
+
+?commands set angles
+?commands show angles
+?set angles
+?show angles
+?angles
+?commands set angles degrees
+?set angles degrees
+?angles degrees
+?degrees
+ By default, `gnuplot` assumes the independent variable in polar graphs is in
+ units of radians. If `set angles degrees` is specified before `set polar`,
+ then the default range is [0:360] and the independent variable has units of
+ degrees. This is particularly useful for plots of data files. The angle
+ setting also applies to 3D mapping as set via the `set mapping` command.
+
+ Syntax:
+ set angles {degrees | radians}
+ show angles
+
+ The angle specified in `set grid polar` is also read and displayed in the
+ units specified by `set angles`.
+
+ `set angles` also affects the arguments of the machine-defined functions
+ sin(x), cos(x) and tan(x), and the outputs of asin(x), acos(x), atan(x),
+ atan2(x), and arg(x). It has no effect on the arguments of hyperbolic
+ functions or Bessel functions. However, the output arguments of inverse
+ hyperbolic functions of complex arguments are affected; if these functions
+ are used, `set angles radians` must be in effect to maintain consistency
+ between input and output arguments.
+
+ x={1.0,0.1}
+ set angles radians
+ y=sinh(x)
+ print y #prints {1.16933, 0.154051}
+ print asinh(y) #prints {1.0, 0.1}
+ but
+ set angles degrees
+ y=sinh(x)
+ print y #prints {1.16933, 0.154051}
+ print asinh(y) #prints {57.29578, 5.729578}
+ See also
+ poldat.dem: polar plot using `set angles` demo.
+?commands set arrow
+?commands unset arrow
+?commands show arrow
+?set arrow
+?unset arrow
+?show arrow
+?arrow
+?noarrow
+ Arbitrary arrows can be placed on a plot using the `set arrow` command.
+
+ Syntax:
+ set arrow {<tag>} {from <position>} {to|rto <position>}
+ { {arrowstyle | as <arrow_style>}
+ | { {nohead | head | backhead | heads}
+ {size <length>,<angle>{,<backangle>}}
+ {filled | empty | nofilled}
+ {front | back}
+ { {linestyle | ls <line_style>}
+ | {linetype | lt <line_type>}
+ {linewidth | lw <line_width} } } }
+
+ unset arrow {<tag>}
+ show arrow {<tag>}
+
+ <tag> is an integer that identifies the arrow. If no tag is given, the
+ lowest unused tag value is assigned automatically. The tag can be used to
+ delete or change a specific arrow. To change any attribute of an existing
+ arrow, use the `set arrow` command with the appropriate tag and specify the
+ parts of the arrow to be changed.
+
+ The <position>s are specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, `screen`, or `character` to select the coordinate
+ system. Unspecified coordinates default to 0. The end points can be
+ specified in one of five coordinate systems---`first` or `second` axes,
+ `graph`, `screen`, or `character`. See `coordinates` for details. A
+ coordinate system specifier does not carry over from the "from" position to
+ the "to" position. Arrows outside the screen boundaries are permitted but
+ may cause device errors. If the end point is specified by "rto" instead of
+ "to" it is drawn relatively to the start point. For linear axes, `graph`
+ and `screen` coordinates, the distance between the start and the end point
+ corresponds to the given relative coordinate. For logarithmic axes, the
+ relative given coordinate corresponds to the factor of the coordinate
+ between start and end point. Thus, a negative relative value or zero are
+ not allowed for logarithmic axes.
+
+ Specifying `nohead` produces an arrow drawn without a head---a line segment.
+ This gives you yet another way to draw a line segment on the plot. By
+ default, an arrow has a head at its end. Specifying `backhead` draws an arrow
+ head at the start point of the arrow while `heads` draws arrow heads on both
+ ends of the line. Not all terminal types support double-ended arrows.
+
+ Head size can be controlled by `size <length>,<angle>` or
+ `size <length>,<angle>,<backangle>`, where `<length>` defines length of each
+ branch of the arrow head and `<angle>` the angle (in degrees) they make with
+ the arrow. `<Length>` is in x-axis units; this can be changed by `first`,
+ `second`, `graph`, `screen`, or `character` before the <length>; see
+ `coordinates` for details. `<Backangle>` only takes effect when `filled`
+ or `empty` is also used. Then, `<backangle>` is the angle (in degrees) the
+ back branches make with the arrow (in the same direction as `<angle>`).
+ The `fig` terminal has a restricted backangle function. It supports three
+ different angles. There are two thresholds: Below 70 degrees, the arrow head
+ gets an indented back angle. Above 110 degrees, the arrow head has an acute
+ back angle. Between these thresholds, the back line is straight.
+
+ Specifying `filled` produces filled arrow heads (if heads are used).
+ Filling is supported on filled-polygon capable terminals, see help of `pm3d`
+ for their list, otherwise the arrow heads are closed but not filled.
+ The same result (closed but not filled arrow head) is reached by specifying
+ `empty`. Further, filling and outline is obviously not supported on
+ terminals drawing arrows by their own specific routines, like `metafont`,
+ `metapost`, `latex` or `tgif`.
+
+ The line style may be selected from a user-defined list of line styles
+ (see `set style line`) or may be defined here by providing values for
+ <line_type> (an index from the default list of styles) and/or <line_width>
+ (which is a multiplier for the default width).
+
+ Note, however, that if a user-defined line style has been selected, its
+ properties (type and width) cannot be altered merely by issuing another
+ `set arrow` command with the appropriate index and `lt` or `lw`.
+
+ If `front` is given, the arrow is written on top of the graphed data. If
+ `back` is given (the default), the arrow is written underneath the graphed
+ data. Using `front` will prevent an arrow from being obscured by dense data.
+
+ Examples:
+
+ To set an arrow pointing from the origin to (1,2) with user-defined style 5,
+ use:
+ set arrow to 1,2 ls 5
+
+ To set an arrow from bottom left of plotting area to (-5,5,3), and tag the
+ arrow number 3, use:
+ set arrow 3 from graph 0,0 to -5,5,3
+
+ To change the preceding arrow to end at 1,1,1, without an arrow head and
+ double its width, use:
+ set arrow 3 to 1,1,1 nohead lw 2
+
+ To draw a vertical line from the bottom to the top of the graph at x=3, use:
+ set arrow from 3, graph 0 to 3, graph 1 nohead
+
+ To draw a vertical arrow with T-shape ends, use:
+ set arrow 3 from 0,-5 to 0,5 heads size screen 0.1,90
+
+ To draw an arrow relatively to the start point, where the relative distances
+ are given in graph coordinates, use:
+ set arrow from 0,-5 rto graph 0.1,0.1
+
+ To draw an arrow with relative end point in logarithmic x axis, use:
+ set logscale x
+ set arrow from 100,-5 rto 10,10
+ This draws an arrow from 100,-5 to 1000,5. For the logarithmic x axis, the
+ relative coordinate 10 means "factor 10" while for the linear y axis, the
+ relative coordinate 10 means "difference 10".
+
+ To delete arrow number 2, use:
+ unset arrow 2
+
+ To delete all arrows, use:
+ unset arrow
+
+ To show all arrows (in tag order), use:
+ show arrow
+
+ arrows demos.
+
+?commands set autoscale
+?commands unset autoscale
+?commands show autoscale
+?set autoscale
+?unset autoscale
+?show autoscale
+?autoscale
+?noautoscale
+ Autoscaling may be set individually on the x, y or z axis or globally on all
+ axes. The default is to autoscale all axes. If you want to autoscale based on
+ a subset of the plots in the figure, you can mark the other ones with the flag
+ `noautoscale`. See `datafile`.
+
+ Syntax:
+ set autoscale {<axes>{|min|max|fixmin|fixmax|fix} | fix | keepfix}
+ unset autoscale {<axes>}
+ show autoscale
+
+ where <axes> is either `x`, `y`, `z`, `cb`, `x2`, `y2` or `xy`. A keyword with
+ `min` or `max` appended (this cannot be done with `xy`) tells `gnuplot` to
+ autoscale just the minimum or maximum of that axis. If no keyword is given,
+ all axes are autoscaled.
+
+ A keyword with `fixmin`, `fixmax` or `fix` appended tells gnuplot to disable
+ extension of the axis range to the next tic mark position, for autoscaled
+ axes using equidistant tics; `set autoscale fix` sets this for all axes.
+ Command `set autoscale keepfix` autoscales all axes while keeping the fix
+ settings.
+
+ When autoscaling, the axis range is automatically computed and the dependent
+ axis (y for a `plot` and z for `splot`) is scaled to include the range of the
+ function or data being plotted.
+
+ If autoscaling of the dependent axis (y or z) is not set, the current y or z
+ range is used.
+
+ Autoscaling the independent variables (x for `plot` and x,y for `splot`) is a
+ request to set the domain to match any data file being plotted. If there are
+ no data files, autoscaling an independent variable has no effect. In other
+ words, in the absence of a data file, functions alone do not affect the x
+ range (or the y range if plotting z = f(x,y)).
+
+ Please see `set xrange` for additional information about ranges.
+
+ The behavior of autoscaling remains consistent in parametric mode, (see
+ `set parametric`). However, there are more dependent variables and hence more
+ control over x, y, and z axis scales. In parametric mode, the independent or
+ dummy variable is t for `plot`s and u,v for `splot`s. `autoscale` in
+ parametric mode, then, controls all ranges (t, u, v, x, y, and z) and allows
+ x, y, and z to be fully autoscaled.
+
+ Autoscaling works the same way for polar mode as it does for parametric mode
+ for `plot`, with the extension that in polar mode `set dummy` can be used to
+ change the independent variable from t (see `set dummy`).
+
+ When tics are displayed on second axes but no plot has been specified for
+ those axes, x2range and y2range are inherited from xrange and yrange. This
+ is done _before_ xrange and yrange are autoextended to a whole number of
+ tics, which can cause unexpected results. You can use the `fixmin`
+ or `fixmax` options to avoid this.
+
+ Examples:
+
+ This sets autoscaling of the y axis (other axes are not affected):
+ set autoscale y
+
+ This sets autoscaling only for the minimum of the y axis (the maximum of the
+ y axis and the other axes are not affected):
+ set autoscale ymin
+
+ This disables extension of the x2 axis tics to the next tic mark,
+ thus keeping the exact range as found in the plotted data and functions:
+ set autoscale x2fixmin
+ set autoscale x2fixmax
+
+ This sets autoscaling of the x and y axes:
+ set autoscale xy
+
+ This sets autoscaling of the x, y, z, x2 and y2 axes:
+ set autoscale
+
+ This disables autoscaling of the x, y, z, x2 and y2 axes:
+ unset autoscale
+
+ This disables autoscaling of the z axis only:
+ unset autoscale z
+?commands set autoscale parametric
+?set autoscale parametric
+?set autoscale t
+ When in parametric mode (`set parametric`), the xrange is as fully scalable
+ as the y range. In other words, in parametric mode the x axis can be
+ automatically scaled to fit the range of the parametric function that is
+ being plotted. Of course, the y axis can also be automatically scaled just
+ as in the non-parametric case. If autoscaling on the x axis is not set, the
+ current x range is used.
+
+ Data files are plotted the same in parametric and non-parametric mode.
+ However, there is a difference in mixed function and data plots: in
+ non-parametric mode with autoscaled x, the x range of the datafile controls
+ the x range of the functions; in parametric mode it has no influence.
+
+ For completeness a last command `set autoscale t` is accepted. However, the
+ effect of this "scaling" is very minor. When `gnuplot` determines that the
+ t range would be empty, it makes a small adjustment if autoscaling is true.
+ Otherwise, `gnuplot` gives an error. Such behavior may, in fact, not be very
+ useful and the command `set autoscale t` is certainly questionable.
+
+ `splot` extends the above ideas as you would expect. If autoscaling is set,
+ then x, y, and z ranges are computed and each axis scaled to fit the
+ resulting data.
+?commands set autoscale polar
+?set autoscale polar
+ When in polar mode (`set polar`), the xrange and the yrange may be left
+ in autoscale mode. If `set rrange` is used to limit the extent of the polar
+ axis, then xrange and yrange will adjust to match this automatically.
+ However, explicit xrange and yrange commands can later be used to make
+ further adjustments. See `set rrange`. The trange may also be autoscaled.
+ Note that if the trange is contained within one quadrant, autoscaling will
+ produce a polar plot of only that single quadrant.
+
+ Explicitly setting one or two ranges but not others may lead to unexpected
+ results.
+ See also
+ polar demos.
+?commands set bars
+?commands show bars
+?set bars
+?show bars
+?bars
+ The `set bars` command controls the tics at the ends of error bars,
+ and also at the end of the whiskers belonging to a boxplot.
+
+ Syntax:
+ set bars {small | large | fullwidth | <size>} {front | back}
+ unset bars
+ show bars
+
+ `small` is a synonym for 0.0, and `large` for 1.0.
+ The default is 1.0 if no size is given.
+
+ The keyword `fullwidth` is relevant only to boxplots and to histograms with
+ errorbars. It sets the width of the errorbar ends to be the same as the width
+ of the associated box. It does not change the width of the box itself.
+
+ The `front` and `back` keywords are relevant only to errorbars attached
+ to filled rectangles (boxes, candlesticks, histograms).
+?commands show bind
+?show bind
+ Show the current state of all hotkey bindings. See `bind`.
+?commands set bmargin
+?set bmargin
+?bmargin
+ The command `set bmargin` sets the size of the bottom margin.
+ Please see `set margin` for details.
+?commands set border
+?commands unset border
+?commands show border
+?set border
+?unset border
+?show border
+?border
+?noborder
+ The `set border` and `unset border` commands control the display of the graph
+ borders for the `plot` and `splot` commands. Note that the borders do not
+ necessarily coincide with the axes; with `plot` they often do, but with
+ `splot` they usually do not.
+
+ Syntax:
+ set border {<integer>} {front | back} {linewidth | lw <line_width>}
+ {{linestyle | ls <line_style>} | {linetype | lt <line_type>}}
+ unset border
+ show border
+
+ With a `splot` displayed in an arbitrary orientation, like `set view 56,103`,
+ the four corners of the x-y plane can be referred to as "front", "back",
+ "left" and "right". A similar set of four corners exist for the top surface,
+ of course. Thus the border connecting, say, the back and right corners of the
+ x-y plane is the "bottom right back" border, and the border connecting the top
+ and bottom front corners is the "front vertical". (This nomenclature is
+ defined solely to allow the reader to figure out the table that follows.)
+
+ The borders are encoded in a 12-bit integer: the bottom four bits control the
+ border for `plot` and the sides of the base for `splot`; the next four bits
+ control the verticals in `splot`; the top four bits control the edges on top
+ of the `splot`. In detail, `<integer>` should be the sum of the appropriate
+ entries from the following table:
+
+ Bit plot splot
+ 1 bottom bottom left front
+ 2 left bottom left back
+ 4 top bottom right front
+ 8 right bottom right back
+ 16 no effect left vertical
+ 32 no effect back vertical
+ 64 no effect right vertical
+ 128 no effect front vertical
+ 256 no effect top left back
+ 512 no effect top right back
+ 1024 no effect top left front
+ 2048 no effect top right front
+
+
+ Various bits or combinations of bits may be added together in the command.
+
+ The default is 31, which is all four sides for `plot`, and base and z axis
+ for `splot`.
+
+ In 2D plots the border is normally drawn on top of all plots elements
+ (`front`). If you want the border to be drawn behind the plot elements,
+ use `set border back`.
+
+ Using the optional <line_style>, <line_type> and <line_width> specifiers, the
+ way the border lines are drawn can be influenced (limited by what the current
+ terminal driver supports).
+
+ For `plot`, tics may be drawn on edges other than bottom and left by enabling
+ the second axes -- see `set xtics` for details.
+
+ If a `splot` draws only on the base, as is the case with "`unset surface; set
+ contour base`", then the verticals and the top are not drawn even if they are
+ specified.
+
+ The `set grid` options 'back', 'front' and 'layerdefault' also
+ control the order in which the border lines are drawn with respect to
+ the output of the plotted data.
+
+ Examples:
+
+ Draw default borders:
+ set border
+
+ Draw only the left and bottom (`plot`) or both front and back bottom left
+ (`splot`) borders:
+ set border 3
+
+ Draw a complete box around a `splot`:
+ set border 4095
+
+ Draw a topless box around a `splot`, omitting the front vertical:
+ set border 127+256+512 # or set border 1023-128
+
+ Draw only the top and right borders for a `plot` and label them as axes:
+ unset xtics; unset ytics; set x2tics; set y2tics; set border 12
+
+?commands set boxwidth
+?commands show boxwidth
+?set boxwidth
+?show boxwidth
+?boxwidth
+ The `set boxwidth` command is used to set the default width of boxes in the
+ `boxes`, `boxerrorbars`, `boxplot`, `candlesticks` and `histograms` styles.
+
+ Syntax:
+ set boxwidth {<width>} {absolute|relative}
+ show boxwidth
+
+ By default, adjacent boxes are extended in width until they touch each other.
+ A different default width may be specified using the `set boxwidth` command.
+ `Relative` widths are interpreted as being a fraction of this default width.
+
+ An explicit value for the boxwidth is interpreted as being a number of units
+ along the current x axis (`absolute`) unless the modifier `relative` is given.
+ If the x axis is a log-scale (see `set log`) then the value of boxwidth is
+ truly "absolute" only at x=1; this physical width is maintained everywhere
+ along the axis (i.e. the boxes do not become narrower the value of x
+ increases). If the range spanned by a log scale x axis is far from x=1,
+ some experimentation may be required to find a useful value of boxwidth.
+
+ The default is superseded by explicit width information taken from an extra
+ data column in styles `boxes` or `boxerrorbars`. In a four-column data set,
+ the fourth column will be interpreted as the box width unless the width is set
+ to -2.0, in which case the width will be calculated automatically.
+ See `style boxes` and `style boxerrorbars` for more details.
+
+ To set the box width to automatic use the command
+ set boxwidth
+
+ or, for four-column data,
+ set boxwidth -2
+
+ The same effect can be achieved with the `using` keyword in `plot`:
+ plot 'file' using 1:2:3:4:(-2)
+
+ To set the box width to half of the automatic size use
+ set boxwidth 0.5 relative
+
+ To set the box width to an absolute value of 2 use
+ set boxwidth 2 absolute
+?commands set clabel
+?commands unset clabel
+?commands show clabel
+?set clabel
+?unset clabel
+?show clabel
+?clabel
+ `gnuplot` will vary the linetype used for each contour level when clabel is
+ set. When this option on (the default), a legend labels each linestyle with
+ the z level it represents. It is not possible at present to separate the
+ contour labels from the surface key.
+
+ Syntax:
+ set clabel {'<format>'}
+ unset clabel
+ show clabel
+
+ The default for the format string is %8.3g, which gives three decimal places.
+ This may produce poor label alignment if the key is altered from its default
+ configuration.
+
+ The first contour linetype, or only contour linetype when clabel is off, is
+ the surface linetype +1; contour points are the same style as surface points.
+
+ See also `set contour`.
+?commands set clip
+?commands unset clip
+?commands show clip
+?set clip
+?unset clip
+?show clip
+?clip
+?noclip
+ `gnuplot` can clip data points and lines that are near the boundaries of a
+ graph.
+
+ Syntax:
+ set clip <clip-type>
+ unset clip <clip-type>
+ show clip
+
+ Three clip types for points and lines are supported by `gnuplot`: `points`,
+ `one`, and `two`. One, two, or all three clip types may be active for a
+ single graph.
+ Note that clipping of color filled quadrangles drawn by `pm3d` maps and
+ surfaces is not controlled by this command, but by `set pm3d clip1in` and
+ `set pm3d clip4in`.
+
+ The `points` clip type forces `gnuplot` to clip (actually, not plot at all)
+ data points that fall within but too close to the boundaries. This is done
+ so that large symbols used for points will not extend outside the boundary
+ lines. Without clipping points near the boundaries, the plot may look bad.
+ Adjusting the x and y ranges may give similar results.
+
+ Setting the `one` clip type causes `gnuplot` to draw a line segment which has
+ only one of its two endpoints within the graph. Only the in-range portion of
+ the line is drawn. The alternative is to not draw any portion of the line
+ segment.
+
+ Some lines may have both endpoints out of range, but pass through the graph.
+ Setting the `two` clip-type allows the visible portion of these lines to be
+ drawn.
+
+ In no case is a line drawn outside the graph.
+
+ The defaults are `noclip points`, `clip one`, and `noclip two`.
+
+ To check the state of all forms of clipping, use
+ show clip
+
+ For backward compatibility with older versions, the following forms are also
+ permitted:
+ set clip
+ unset clip
+
+ `set clip` is synonymous with `set clip points`; `unset clip` turns off all
+ three types of clipping.
+?commands set cntrparam
+?commands show cntrparam
+?set cntrparam
+?show cntrparam
+?cntrparam
+ `set cntrparam` controls the generation of contours and their smoothness for
+ a contour plot. `show contour` displays current settings of `cntrparam` as
+ well as `contour`.
+
+ Syntax:
+ set cntrparam { { linear
+ | cubicspline
+ | bspline
+ | points <n>
+ | order <n>
+ | levels { auto {<n>} | <n>
+ | discrete <z1> {,<z2>{,<z3>...}}
+ | incremental <start>, <incr> {,<end>}
+ }
+ }
+ }
+ show contour
+
+ This command has two functions. First, it sets the values of z for which
+ contour points are to be determined (by linear interpolation between data
+ points or function isosamples.) Second, it controls the way contours are
+ drawn between the points determined to be of equal z. <n> should be an
+ integral constant expression and <z1>, <z2> ... any constant expressions.
+ The parameters are:
+
+ `linear`, `cubicspline`, `bspline`---Controls type of approximation or
+ interpolation. If `linear`, then straight line segments connect points of
+ equal z magnitude. If `cubicspline`, then piecewise-linear contours are
+ interpolated between the same equal z points to form somewhat smoother
+ contours, but which may undulate. If `bspline`, a guaranteed-smoother curve
+ is drawn, which only approximates the position of the points of equal-z.
+
+ `points`---Eventually all drawings are done with piecewise-linear strokes.
+ This number controls the number of line segments used to approximate the
+ `bspline` or `cubicspline` curve. Number of cubicspline or bspline
+ segments (strokes) = `points` * number of linear segments.
+
+ `order`---Order of the bspline approximation to be used. The bigger this
+ order is, the smoother the resulting contour. (Of course, higher order
+ bspline curves will move further away from the original piecewise linear
+ data.) This option is relevant for `bspline` mode only. Allowed values are
+ integers in the range from 2 (linear) to 10.
+
+ `levels`--- Selection of contour levels, controlled by `auto` (default),
+ `discrete`, `incremental`, and <n>, number of contour levels.
+
+ For `auto`, <n> specifies a nominal number of levels; the actual number will
+ be adjusted to give simple labels. If the surface is bounded by zmin and zmax,
+ contours will be generated at integer multiples of dz between zmin and zmax,
+ where dz is 1, 2, or 5 times some power of ten (like the step between two
+ tic marks).
+
+ For `levels discrete`, contours will be generated at z = <z1>, <z2> ... as
+ specified; the number of discrete levels sets the number of contour levels.
+ In `discrete` mode, any `set cntrparam levels <n>` are ignored.
+
+ For `incremental`, contours are generated at values of z beginning at <start>
+ and increasing by <increment>, until the number of contours is reached. <end>
+ is used to determine the number of contour levels, which will be changed by
+ any subsequent `set cntrparam levels <n>`. If the z axis is logarithmic,
+ <increment> will be interpreted as a factor, just like in `set ztics`.
+
+ If the command `set cntrparam` is given without any arguments specified, the
+ defaults are used: linear, 5 points, order 4, 5 auto levels.
+
+ Examples:
+ set cntrparam bspline
+ set cntrparam points 7
+ set cntrparam order 10
+
+ To select levels automatically, 5 if the level increment criteria are met:
+ set cntrparam levels auto 5
+
+ To specify discrete levels at .1, .37, and .9:
+ set cntrparam levels discrete .1,1/exp(1),.9
+
+ To specify levels from 0 to 4 with increment 1:
+ set cntrparam levels incremental 0,1,4
+
+ To set the number of levels to 10 (changing an incremental end or possibly
+ the number of auto levels):
+ set cntrparam levels 10
+
+ To set the start and increment while retaining the number of levels:
+ set cntrparam levels incremental 100,50
+
+ See also `set contour` for control of where the contours are drawn, and
+ `set clabel` for control of the format of the contour labels and linetypes.
+
+ See also
+ contours demo (contours.dem)
+ and
+ contours with user defined levels demo (discrete.dem).
+?commands set colorbox
+?commands show colorbox
+?commands unset colorbox
+?set colorbox
+?show colorbox
+?unset colorbox
+?colorbox
+
+ The color scheme, i.e. the gradient of the smooth color with min_z and
+ max_z values of `pm3d`'s `palette`, is drawn in a color box unless `unset
+ colorbox`.
+
+ set colorbox
+ set colorbox {
+ { vertical | horizontal }
+ { default | user }
+ { origin x, y }
+ { size x, y }
+ { front | back }
+ { noborder | bdefault | border [line style] }
+ }
+ show colorbox
+ unset colorbox
+
+ Color box position can be `default` or `user`. If the latter is specified the
+ values as given with the `origin` and `size` subcommands are used. The box
+ can be drawn after (`front`) or before (`back`) the graph or the surface.
+
+ The orientation of the color gradient can be switched by options `vertical`
+ and `horizontal`.
+
+ `origin x, y` and `size x, y` are used only in combination with the `user`
+ option. The x and y values are interpreted as screen coordinates by default,
+ and this is the only legal option for 3D plots. 2D plots, including splot with
+ `set view map`, allow any coordinate system to be specified. Try for example:
+ set colorbox horiz user origin .1,.02 size .8,.04
+ which will draw a horizontal gradient somewhere at the bottom of the graph.
+
+ `border` turns the border on (this is the default). `noborder` turns the border
+ off. If an positive integer argument is given after `border`, it is used as a
+ line style tag which is used for drawing the border, e.g.:
+ set style line 2604 linetype -1 linewidth .4
+ set colorbox border 2604
+ will use line style `2604`, a thin line with the default border color (-1)
+ for drawing the border. `bdefault` (which is the default) will use the default
+ border line style for drawing the border of the color box.
+
+ The axis of the color box is called `cb` and it is controlled by means of the
+ usual axes commands, i.e. `set/unset/show` with `cbrange`, `[m]cbtics`,
+ `format cb`, `grid [m]cb`, `cblabel`, and perhaps even `cbdata`, `[no]cbdtics`,
+ `[no]cbmtics`.
+
+ `set colorbox` without any parameter switches the position to default.
+ `unset colorbox` resets the default parameters for the colorbox and switches
+ the colorbox off.
+
+ See also help for `set pm3d`, `set palette`, `x11 pm3d`, and `set style line`.
+?colornames
+?show colornames
+?commands show colornames
+?show palette colornames
+ Gnuplot knows a limited number of color names. You can use these to define
+ the color range spanned by a pm3d palette, or to assign a terminal-independent
+ color to a particular linetype or linestyle. To see the list of known color
+ names, use the command `show colornames`. Example:
+
+ set style line 1 linecolor rgb "sea-green"
+?commands set contour
+?commands unset contour
+?commands show contour
+?set contour
+?unset contour
+?show contour
+?contour
+?nocontour
+ `set contour` enables contour drawing for surfaces. This option is available
+ for `splot` only. It requires grid data, see `grid_data` for more details.
+ If contours are desired from non-grid data, `set dgrid3d` can be used to
+ create an appropriate grid.
+
+ Syntax:
+ set contour {base | surface | both}
+ unset contour
+ show contour
+
+ The three options specify where to draw the contours: `base` draws the
+ contours on the grid base where the x/ytics are placed, `surface` draws the
+ contours on the surfaces themselves, and `both` draws the contours on both
+ the base and the surface. If no option is provided, the default is `base`.
+
+ See also `set cntrparam` for the parameters that affect the drawing of
+ contours, and `set clabel` for control of labelling of the contours.
+
+ The surface can be switched off (see `set surface`), giving a contour-only
+ graph. Though it is possible to use `set size` to enlarge the plot to fill
+ the screen, more control over the output format can be obtained by writing
+ the contour information to a file, and rereading it as a 2D datafile plot:
+
+ unset surface
+ set contour
+ set cntrparam ...
+ set table 'filename'
+ splot ...
+ unset table
+ # contour info now in filename
+ set term <whatever>
+ plot 'filename'
+
+ In order to draw contours, the data should be organized as "grid data". In
+ such a file all the points for a single y-isoline are listed, then all the
+ points for the next y-isoline, and so on. A single blank line (a line
+ containing no characters other than blank spaces and a carriage return and/or
+ a line feed) separates one y-isoline from the next.
+ See also `splot datafile`.
+
+ See also
+ contours demo (contours.dem)
+ and
+ contours with user defined levels demo (discrete.dem).
+?set data style
+ This form of the command is deprecated. Please see `set style data`.
+?set datafile
+?show datafile
+ The `set datafile` command options control interpretation of fields read from
+ input data files by the `plot`, `splot`, and `fit` commands. Six such
+ options are currently implemented.
+?set datafile fortran
+?show datafile fortran
+?fortran
+ The `set datafile fortran` command enables a special check for values in the
+ input file expressed as Fortran D or Q constants. This extra check slows down
+ the input process, and should only be selected if you do in fact have datafiles
+ containing Fortran D or Q constants. The option can be disabled again using
+ `unset datafile fortran`.
+?set datafile nofpe_trap
+?fpe_trap
+?nofpe_trap
+ The `set datafile nofpe_trap` command tells gnuplot not to re-initialize a
+ floating point exception handler before every expression evaluation used while
+ reading data from an input file. This can significantly speed data input from
+ very large files at the risk of program termination if a floating-point
+ exception is generated.
+?set datafile missing
+?show datafile missing
+?set missing
+?missing
+ The `set datafile missing` command allows you to tell `gnuplot` what character
+ string is used in a data file to denote missing data. Exactly how this missing
+ value will be treated depends on the `using` specifier of the `plot` or `splot`
+ command.
+
+ Syntax:
+ set datafile missing {"<string>"}
+ show datafile missing
+ unset datafile
+
+ Example:
+ # Ignore entries containing IEEE NaN ("Not a Number") code
+ set datafile missing "NaN"
+
+ Example:
+ set style data linespoints
+ plot '-'
+ 1 10
+ 2 20
+ 3 ?
+ 4 40
+ 5 50
+ e
+ set datafile missing "?"
+ plot '-'
+ 1 10
+ 2 20
+ 3 ?
+ 4 40
+ 5 50
+ e
+ plot '-' using 1:2
+ 1 10
+ 2 20
+ 3 ?
+ 4 40
+ 5 50
+ e
+ plot '-' using 1:($2)
+ 1 10
+ 2 20
+ 3 ?
+ 4 40
+ 5 50
+ e
+
+ The first `plot` will recognize only the first datum in the "3 ?" line. It
+ will use the single-datum-on-a-line convention that the line number is "x"
+ and the datum is "y", so the point will be plotted (in this case erroneously)
+ at (2,3).
+
+ The second and third `plot` commands will correctly ignore the middle line.
+ The plotted line will connect the points at (2,20) and (4,40).
+
+ The fourth `plot` will also correctly ignore the middle line, but the plotted
+ line will not connect the points at (2,20) and (4,40).
+
+ There is no default character for `missing`, but in many cases any
+ non-parsible string of characters found where a numerical value is expected
+ will be treated as missing data.
+
+?set datafile separator
+?show datafile separator
+?datafile separator
+?separator
+ The command `set datafile separator "<char>"` tells `gnuplot` that data fields
+ in subsequent input files are separated by <char> rather than by whitespace.
+ The most common use is to read in csv (comma-separated value) files written
+ by spreadsheet or database programs. By default data fields are separated by
+ whitespace.
+
+ Syntax:
+ set datafile separator {"<char>" | whitespace}
+
+ Examples:
+ # Input file contains tab-separated fields
+ set datafile separator "\t"
+
+ # Input file contains comma-separated values fields
+ set datafile separator ","
+?set datafile commentschars
+?commentschars
+ The `set datafile commentschars` command allows you to tell `gnuplot` what
+ characters are used in a data file to denote comments. Gnuplot will ignore
+ rest of the line behind the specified characters if either of them is the
+ first non-blank character on the line.
+
+ Syntax:
+ set datafile commentschars {"<string>"}
+ show datafile commentschars
+ unset commentschars
+
+ Default value of the string is "#!" on VMS and "#" otherwise.
+
+ Then, the following line in a data file is completely ignored
+ # 1 2 3 4
+ but the following
+ 1 # 3 4
+ produces rather unexpected plot unless
+ set datafile missing '#'
+ is specified as well.
+
+ Example:
+ set datafile commentschars "#!%"
+?set datafile binary
+ The `set datafile binary` command is used to set the defaults when reading
+ binary data files. The syntax matches precisely that used for commands
+ `plot` and `splot`. See `binary matrix` and `binary general` for details
+ about the keywords that can be present in <binary list>.
+
+ Syntax:
+ set datafile binary <binary list>
+ show datafile binary
+ show datafile
+ unset datafile
+
+ Examples:
+ set datafile binary filetype=auto
+ set datafile binary array=(512,512) format="%uchar"
+
+?show datafile binary
+ show datafile binary # list current settings
+?commands set decimalsign
+?commands show decimalsign
+?commands unset decimalsign
+?set decimalsign
+?show decimalsign
+?unset decimalsign
+?decimalsign
+ The `set decimalsign` command selects a decimal sign for numbers printed
+ into tic labels or `set label` strings.
+
+ Syntax:
+ set decimalsign {<value> | locale {"<locale>"}}
+ unset decimalsign
+ show decimalsign
+
+ The argument <value> is a string to be used in place of the usual
+ decimal point. Typical choices include the period, '.', and the comma,
+ ',', but others may be useful, too. If you omit the <value> argument,
+ the decimal separator is not modified from the usual default, which is
+ a period. Unsetting decimalsign has the same effect as omitting <value>.
+
+ Example:
+
+ Correct typesetting in most European countries requires:
+ set decimalsign ','
+
+ Please note: If you set an explicit string, this affects only numbers that
+ are printed using gnuplot's gprintf() formatting routine, include axis tics.
+ It does not affect the format expected for input data, and it does not affect
+ numbers printed with the sprintf() formatting routine. To change the behavior
+ of both input and output formatting, instead use the form
+
+ set decimalsign locale
+
+ This instructs the program to use both input and output formats in accordance
+ with the current setting of the LC_ALL, LC_NUMERIC, or LANG environmental
+ variables.
+
+ set decimalsign locale "foo"
+
+ This instructs the program to format all input and output in accordance with
+ locale "foo", which must be installed. If locale "foo" is not found then an
+ error message is printed and the decimal sign setting is unchanged.
+ On linux systems you can get a list of the locales installed on your machine by
+ typing "locale -a". A typical linux locale string is of the form "sl_SI.UTF-8".
+ A typical Windows locale string is of the form "Slovenian_Slovenia.1250" or
+ "slovenian". Please note that interpretation of the locale settings is done by
+ the C library at runtime. Older C libraries may offer only partial support for
+ locale settings such as the thousands grouping separator character.
+
+ set decimalsign locale; set decimalsign "."
+
+ This sets all input and output to use whatever decimal sign is correct for
+ the current locale, but over-rides this with an explicit '.' in numbers
+ formatted using gnuplot's internal gprintf() function.
+?commands set dgrid3d
+?commands unset dgrid3d
+?commands show dgrid3d
+?set dgrid3d
+?unset dgrid3d
+?show dgrid3d
+?dgrid3d
+?nodgrid3d
+?kdensity2d
+ The `set dgrid3d` command enables, and can set parameters for, non-grid to
+ grid data mapping. See `splot grid_data` for more details about the grid data
+ structure.
+
+ Syntax:
+ set dgrid3d {<rows>} {,{<cols>}}
+ { splines |
+ qnorm {<norm>} |
+ (gauss | cauchy | exp | box | hann)
+ {kdensity} {<dx>} {,<dy>} }
+ unset dgrid3d
+ show dgrid3d
+
+ By default `dgrid3d` is disabled. When enabled, 3D data read from a file
+ are always treated as a scattered data set. A grid with dimensions derived
+ from a bounding box of the scattered data and size as specified by the
+ row/col_size parameters is created for plotting and contouring. The grid
+ is equally spaced in x (rows) and in y (columns); the z values are computed
+ as weighted averages or spline interpolations of the scattered points' z
+ values. In other words, a regularly spaced grid is created and the a smooth
+ approximation to the raw data is evaluated for all grid points. This
+ approximation is plotted in place of the raw data.
+
+ The number of columns defaults to the number of rows, which defaults to 10.
+
+ Several algorithms are available to calculate the approximation from the
+ raw data. Some of these algorithms can take additional parameters.
+ These interpolations are such the closer the data point is to a grid point,
+ the more effect it has on that grid point.
+
+ The `splines` algorithm calculates an interpolation based on "thin plate
+ splines". It does not take additional parameters.
+
+ The `qnorm` algorithm calculates a weighted average of the input data at
+ each grid point. Each data point is weighted inversely by its distance from
+ the grid point raised to the norm power. (Actually, the weights are given
+ by the inverse of dx^norm + dy^norm, where dx and dy are the components of
+ the separation of the grid point from each data point. For some norms
+ that are powers of two, specifically 4, 8, and 16, the computation is
+ optimized by using the Euclidean distance in the weight calculation,
+ (dx^2+dy^2)^norm/2. However, any non-negative integer can be used.)
+ The power of the norm can be specified as a single optional parameter.
+ This algorithm is the default.
+
+ Finally, several smoothing kernels are available to calculate weighted
+ averages: z = Sum_i w(d_i) * z_i / Sum_i w(d_i), where z_i is the value
+ of the i-th data point and d_i is the distance between the current grid
+ point and the location of the i-th data point. All kernels assign higher
+ weights to data points that are close to the current grid point and lower
+ weights to data points further away.
+
+ The following kernels are available:
+ gauss : w(d) = exp(-d*d)
+ cauchy : w(d) = 1/(1 + d*d)
+ exp : w(d) = exp(-d)
+ box : w(d) = 1 if d<1
+ = 0 otherwise
+ hann : w(d) = 0.5*(1-cos(2*pi*d)) if d<1
+ w(d) = 0 otherwise
+
+ When using one of these five smoothing kernels, up to two additional
+ numerical parameters can be specified: dx and dy. These are used to
+ rescale the coordinate differences when calculating the distance:
+ d_i = sqrt( ((x-x_i)/dx)**2 + ((y-y_i)/dy)**2 ), where x,y are the
+ coordinates of the current grid point and x_i,y_i are the coordinates
+ of the i-th data point. The value of dy defaults to the value of dx,
+ which defaults to 1. The parameters dx and dy make it possible to
+ control the radius over which data points contribute to a grid point
+ IN THE UNITS OF THE DATA ITSELF.
+
+ The optional keyword `kdensity2d`, which must come after the name of the
+ kernel, but before the (optional) scale parameters, modifies the algorithm
+ so that the values calculated for the grid points are not divided by the
+ sum of the weights ( z = Sum_i w(d_i) * z_i ). If all z_i are constant,
+ this effectively plots a bivariate kernel density estimate: a kernel
+ function (one of the five defined above) is placed at each data point,
+ the sum of these kernels is evaluated at every grid point, and this smooth
+ surface is plotted instead of the original data. This is similar in
+ principle to + what the `smooth kdensity` option does to 1D datasets.
+ (See kdensity2d.dem for usage demo)
+
+ A slightly different syntax is also supported for reasons of backwards
+ compatibility. If no interpolation algorithm has been explicitly selected,
+ the `qnorm` algorithm is assumed. Up to three comma-separated, optional
+ parameters can be specified, which are interpreted as the the number of
+ rows, the number of columns, and the norm value, respectively.
+
+ The `dgrid3d` option is a simple scheme which replaces scattered data
+ with weighted averages on a regular grid. More sophisticated approaches
+ to this problem exist and should be used to preprocess the data outside
+ `gnuplot` if this simple solution is found inadequate.
+
+ See also
+ dgrid3d.dem: dgrid3d demo.
+ and
+ scatter.dem: dgrid3d demo.
+
+?commands set dummy
+?commands show dummy
+?set dummy
+?show dummy
+?dummy
+ The `set dummy` command changes the default dummy variable names.
+
+ Syntax:
+ set dummy {<dummy-var>} {,<dummy-var>}
+ show dummy
+
+ By default, `gnuplot` assumes that the independent, or "dummy", variable for
+ the `plot` command is "t" if in parametric or polar mode, or "x" otherwise.
+ Similarly the independent variables for the `splot` command are "u" and "v"
+ in parametric mode (`splot` cannot be used in polar mode), or "x" and "y"
+ otherwise.
+
+ It may be more convenient to call a dummy variable by a more physically
+ meaningful or conventional name. For example, when plotting time functions:
+
+ set dummy t
+ plot sin(t), cos(t)
+
+ At least one dummy variable must be set on the command; `set dummy` by itself
+ will generate an error message.
+
+ Examples:
+ set dummy u,v
+ set dummy ,s
+
+ The second example sets the second variable to s.
+?commands set encoding
+?commands show encoding
+?set encoding
+?show encoding
+?encoding
+?encodings
+ The `set encoding` command selects a character encoding.
+ Syntax:
+ set encoding {<value>}
+ set encoding locale
+ show encoding
+
+ Valid values are
+ default - tells a terminal to use its default encoding
+ iso_8859_1 - the most common Western European encoding used by many
+ Unix workstations and by MS-Windows. This encoding is
+ known in the PostScript world as 'ISO-Latin1'.
+ iso_8859_15 - a variant of iso_8859_1 that includes the Euro symbol
+ iso_8859_2 - used in Central and Eastern Europe
+ iso_8859_9 - used in Turkey (also known as Latin5)
+ koi8r - popular Unix cyrillic encoding
+ koi8u - ukrainian Unix cyrillic encoding
+ cp437 - codepage for MS-DOS
+ cp850 - codepage for OS/2, Western Europe
+ cp852 - codepage for OS/2, Central and Eastern Europe
+ cp950 - MS version of Big5 (emf terminal only)
+ cp1250 - codepage for MS Windows, Central and Eastern Europe
+ cp1251 - codepage for 8-bit Russian, Serbian, Bulgarian, Macedonian
+ cp1254 - codepage for MS Windows, Turkish (superset of Latin5)
+ sjis - shift-JIS Japanese encoding
+ utf8 - variable-length (multibyte) representation of Unicode
+ entry point for each character
+
+ The command `set encoding locale` is different from the other options.
+ It attempts to determine the current locale from the runtime environment.
+ On most systems this is controlled by the environmental variables
+ LC_ALL, LC_CTYPE, or LANG. This mechanism is necessary, for example, to
+ pass multibyte character encodings such as UTF-8 or EUC_JP to the wxt
+ and cairopdf terminals. This command does not affect the locale-specific
+ representation of dates or numbers.
+ See also `set locale` and `set decimalsign`.
+
+ Generally you must set the encoding before setting the terminal type.
+ Note that encoding is not supported by all terminal drivers and that
+ the device must be able to produce the desired non-standard characters.
+?commands set fit
+?commands show fit
+?set fit
+?show fit
+ The `fit` setting defines where the `fit` command writes its output.
+
+ Syntax:
+ set fit {logfile {"<filename>"}} {{no}errorvariables} {{no}quiet}
+ unset fit
+ show fit
+
+ The <filename> argument must be enclosed in single or double quotes.
+
+ If no filename is given or `unset fit` is used the log file is
+ reset to its default value "fit.log" or the value of the environmental
+ variable `FIT_LOG`.
+
+ If the given logfile name ends with a / or \, it is interpreted to be
+ a directory name, and the actual filename will be "fit.log" in that
+ directory.
+
+ If the `errorvariables` option is turned on, the error of each fitted
+ parameter computed by `fit` will be copied to a user-defined variable
+ whose name is formed by appending "_err" to the name of the parameter
+ itself. This is useful mainly to put the parameter and its error onto
+ a plot of the data and the fitted function, for reference, as in:
+
+ set fit errorvariables
+ fit f(x) 'datafile' using 1:2 via a, b
+ print "error of a is:", a_err
+ set label 'a=%6.2f', a, '+/- %6.2f', a_err
+ plot 'datafile' using 1:2, f(x)
+
+ By default the information written to the log file is also echoed to
+ the terminal session. `set fit quiet` turns off the echo.
+?commands set fontpath
+?commands show fontpath
+?set fontpath
+?show fontpath
+?fontpath
+ The `fontpath` setting defines additional locations for font files
+ searched when including font files. Currently only the postscript terminal
+ supports `fontpath`. If a file cannot be found in the current directory,
+ the directories in `fontpath` are tried. Further documentation concerning
+ the supported file formats is included in the `terminal postscript` section
+ of the documentation.
+
+ Syntax:
+ set fontpath {"pathlist1" {"pathlist2"...}}
+ show fontpath
+
+ Path names may be entered as single directory names, or as a list of
+ path names separated by a platform-specific path separator, eg. colon
+ (':') on Unix, semicolon (';') on DOS/Windows/OS/2 platforms.
+ The `show fontpath`, `save` and `save set` commands replace the
+ platform-specific separator with a space character (' ') for maximum
+ portability. If a directory name ends with an exclamation mark ('!') also
+ the subdirectories of this directory are searched for font files.
+
+ If the environmental variable GNUPLOT_FONTPATH is set, its contents are
+ appended to `fontpath`. If it is not set, a system dependent default value
+ is used. It is set by testing several directories for existence when using
+ the fontpath the first time. Thus, the first call of `set fontpath`,
+ `show fontpath`, `save fontpath`, `plot`, or `splot` with embedded font
+ files takes a little more time. If you want to save this time you may
+ set the environmental variable GNUPLOT_FONTPATH since probing is switched
+ off, then. You can find out which is the default fontpath by using
+ `show fontpath`.
+
+ `show fontpath` prints the contents of the user-defined fontpath and the
+ system fontpath separately. However, the `save` and `save set` commands
+ save only the user-specified parts of `fontpath`.
+
+ For terminal drivers that access fonts by filename via the gd library, the
+ font search path is controlled by the environmental variable GDFONTPATH.
+?commands set format
+?commands show format
+?set format
+?show format
+?format
+?format cb
+ The format of the tic-mark labels can be set with the `set format` command
+ or with the `set tics format` or individual `set {axis}tics format` commands.
+
+ Syntax:
+ set format {<axes>} {"<format-string>"}
+ set format {<axes>} {'<format-string>'}
+ show format
+
+ where <axes> is either `x`, `y`, `xy`, `x2`, `y2`, `z`, `cb` or nothing
+ (which applies the format to all axes). The following two commands are
+ equivalent:
+ set format y "%.2f"
+ set ytics format "%.2f"
+
+ The length of the string is restricted to 100 characters. The default format
+ is "% g", but other formats such as "%.2f" or "%3.0em" are often desirable.
+ The format "$%g$" is often desirable for LaTeX. If no format string is given,
+ the format will be returned to the default. If the empty string "" is given,
+ tics will have no labels, although the tic mark will still be plotted.
+ To eliminate the tic marks, use `unset xtics` or `set tics scale 0`.
+
+ Newline (\n) and enhanced text markup is accepted in the format string.
+ Use double-quotes rather than single-quotes in this case. See also `syntax`.
+ Characters not preceded by "%" are printed verbatim. Thus you can include
+ spaces and labels in your format string, such as "%g m", which will put " m"
+ after each number. If you want "%" itself, double it: "%g %%".
+
+ See also `set xtics` for more information about tic labels, and
+ `set decimalsign` for how to use non-default decimal separators in numbers
+ printed this way.
+ See also
+ electron demo (electron.dem).
+?gprintf
+ The string function gprintf("format",x) uses gnuplot's own format specifiers,
+ as do the gnuplot commands `set format`, `set timestamp`, and others. These
+ format specifiers are not the same as those used by the standard C-language
+ routine sprintf(). gprintf() accepts only a single variable to be formatted.
+ Gnuplot also provides an sprintf("format",x1,x2,...) routine if you prefer.
+ For a list of gnuplot's format options, see `format specifiers`.
+?commands set format specifiers
+?set format specifiers
+?format specifiers
+?format_specifiers
+ The acceptable formats (if not in time/date mode) are:
+
+ Format Explanation
+ %f floating point notation
+ %e or %E exponential notation; an "e" or "E" before the power
+ %g or %G the shorter of %e (or %E) and %f
+ %x or %X hex
+ %o or %O octal
+ %t mantissa to base 10
+ %l mantissa to base of current logscale
+ %s mantissa to base of current logscale; scientific power
+ %T power to base 10
+ %L power to base of current logscale
+ %S scientific power
+ %c character replacement for scientific power
+ %b mantissa of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
+ %B prefix of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
+ %P multiple of pi
+
+
+ A 'scientific' power is one such that the exponent is a multiple of three.
+ Character replacement of scientific powers (`"%c"`) has been implemented
+ for powers in the range -18 to +18. For numbers outside of this range the
+ format reverts to exponential.
+
+ Other acceptable modifiers (which come after the "%" but before the format
+ specifier) are "-", which left-justifies the number; "+", which forces all
+ numbers to be explicitly signed; " " (a space), which makes positive numbers
+ have a space in front of them where negative numbers have "-";
+ "#", which places a decimal point after
+ floats that have only zeroes following the decimal point; a positive integer,
+ which defines the field width; "0" (the digit, not the letter) immediately
+ preceding the field width, which indicates that leading zeroes are to be used
+ instead of leading blanks; and a decimal point followed by a non-negative
+ integer, which defines the precision (the minimum number of digits of an
+ integer, or the number of digits following the decimal point of a float).
+
+ Some systems may not support all of these modifiers but may also support
+ others; in case of doubt, check the appropriate documentation and
+ then experiment.
+
+ Examples:
+ set format y "%t"; set ytics (5,10) # "5.0" and "1.0"
+ set format y "%s"; set ytics (500,1000) # "500" and "1.0"
+ set format y "%+-12.3f"; set ytics(12345) # "+12345.000 "
+ set format y "%.2t*10^%+03T"; set ytic(12345)# "1.23*10^+04"
+ set format y "%s*10^{%S}"; set ytic(12345) # "12.345*10^{3}"
+ set format y "%s %cg"; set ytic(12345) # "12.345 kg"
+ set format y "%.0P pi"; set ytic(6.283185) # "2 pi"
+ set format y "%.0f%%"; set ytic(50) # "50%"
+
+ set log y 2; set format y '%l'; set ytics (1,2,3)
+ #displays "1.0", "1.0" and "1.5" (since 3 is 1.5 * 2^1)
+
+ There are some problem cases that arise when numbers like 9.999 are printed
+ with a format that requires both rounding and a power.
+
+ If the data type for the axis is time/date, the format string must contain
+ valid codes for the 'strftime' function (outside of `gnuplot`, type "man
+ strftime"). See `set timefmt` for a list of the allowed input format codes.
+?commands set format date_specifiers
+?commands set format time_specifiers
+?set format date_specifiers
+?set format time_specifiers
+?set date_specifiers
+?set time_specifiers
+?date_specifiers
+?time_specifiers
+ In time/date mode, the acceptable formats are:
+
+ Format Explanation
+ %a abbreviated name of day of the week
+ %A full name of day of the week
+ %b or %h abbreviated name of the month
+ %B full name of the month
+ %d day of the month, 01--31
+ %D shorthand for "%m/%d/%y" (only output)
+ %F shorthand for "%Y-%m-%d" (only output)
+ %k hour, 0--23 (one or two digits)
+ %H hour, 00--23 (always two digits)
+ %l hour, 1--12 (one or two digits)
+ %I hour, 01--12 (always two digits)
+ %j day of the year, 1--366
+ %m month, 01--12
+ %M minute, 0--60
+ %p "am" or "pm"
+ %r shorthand for "%I:%M:%S %p" (only output)
+ %R shorthand for "%H:%M" (only output)
+ %s number of seconds since the start of year 2000
+ %S second, integer 0--60 on output, (double) on input
+ %T shorthand for "%H:%M:%S" (only output)
+ %U week of the year (week starts on Sunday)
+ %w day of the week, 0--6 (Sunday = 0)
+ %W week of the year (week starts on Monday)
+ %y year, 0-68 for 2000-2068, 69-99 for 1969-1999
+ %Y year, 4-digit
+
+
+
+ Except for the non-numerical formats, these may be preceded by a "0" ("zero",
+ not "oh") to pad the field length with leading zeroes, and a positive digit,
+ to define the minimum field width (which will be overridden if the specified
+ width is not large enough to contain the number). The %S format also accepts
+ a precision specifier so that fractional seconds can be written.
+ There is a 24-character limit to the length of the printed text;
+ longer strings will be truncated.
+
+ Examples:
+
+ Suppose the text is "76/12/25 23:11:11". Then
+ set format x # defaults to "12/25/76" \n "23:11"
+ set format x "%A, %d %b %Y" # "Saturday, 25 Dec 1976"
+ set format x "%r %D" # "11:11:11 pm 12/25/76"
+
+ Suppose the text is "98/07/06 05:04:03.123456". Then
+ set format x "%1y/%2m/%3d %01H:%02M:%06.3S" # "98/ 7/ 6 5:04:03.123"
+?set function style
+ This form of the command is deprecated. Please see `set style function`.
+?commands show functions
+?show functions
+ The `show functions` command lists all user-defined functions and their
+ definitions.
+
+ Syntax:
+ show functions
+
+ For information about the definition and usage of functions in `gnuplot`,
+ please see `expressions`.
+ See also
+ splines as user defined functions (spline.dem)
+ and
+ use of functions and complex variables for airfoils (airfoil.dem).
+?commands set grid
+?commands unset grid
+?commands show grid
+?set grid
+?unset grid
+?show grid
+?grid
+?nogrid
+ The `set grid` command allows grid lines to be drawn on the plot.
+
+ Syntax:
+ set grid {{no}{m}xtics} {{no}{m}ytics} {{no}{m}ztics}
+ {{no}{m}x2tics} {{no}{m}y2tics}
+ {{no}{m}cbtics}
+ {polar {<angle>}}
+ {layerdefault | front | back}
+ { {linestyle <major_linestyle>}
+ | {linetype | lt <major_linetype>}
+ {linewidth | lw <major_linewidth>}
+ { , {linestyle | ls <minor_linestyle>}
+ | {linetype | lt <minor_linetype>}
+ {linewidth | lw <minor_linewidth>} } }
+ unset grid
+ show grid
+
+ The grid can be enabled and disabled for the major and/or minor tic
+ marks on any axis, and the linetype and linewidth can be specified
+ for major and minor grid lines, also via a predefined linestyle, as
+ far as the active terminal driver supports this.
+
+ Additionally, a polar grid can be selected for 2D plots---circles are drawn
+ to intersect the selected tics, and radial lines are drawn at definable
+ intervals. (The interval is given in degrees or radians, depending on the
+ `set angles` setting.) Note that a polar grid is no longer automatically
+ generated in polar mode.
+
+ The pertinent tics must be enabled before `set grid` can draw them; `gnuplot`
+ will quietly ignore instructions to draw grid lines at non-existent tics, but
+ they will appear if the tics are subsequently enabled.
+
+ If no linetype is specified for the minor gridlines, the same linetype as the
+ major gridlines is used. The default polar angle is 30 degrees.
+
+ If `front` is given, the grid is drawn on top of the graphed data. If
+ `back` is given, the grid is drawn underneath the graphed data. Using
+ `front` will prevent the grid from being obscured by dense data. The
+ default setup, `layerdefault`, is equivalent to `back` for 2D plots.
+ In 3D plots the default is to split up the grid and the graph box into
+ two layers: one behind, the other in front of the plotted data and
+ functions. Since `hidden3d` mode does its own sorting, it ignores
+ all grid drawing order options and passes the grid lines through the
+ hidden line removal machinery instead. These options actually affect
+ not only the grid, but also the lines output by `set border` and the
+ various ticmarks (see `set xtics`).
+
+ Z grid lines are drawn on the bottom of the plot. This looks better if a
+ partial box is drawn around the plot---see `set border`.
+?commands set hidden3d
+?commands unset hidden3d
+?commands show hidden3d
+?set hidden3d
+?unset hidden3d
+?show hidden3d
+?hidden3d
+?nohidden3d
+ The `set hidden3d` command enables hidden line removal for surface plotting
+ (see `splot`). Some optional features of the underlying algorithm can also
+ be controlled using this command.
+
+ Syntax:
+ set hidden3d {defaults} |
+ { {front|back}
+ {{offset <offset>} | {nooffset}}
+ {trianglepattern <bitpattern>}
+ {{undefined <level>} | {noundefined}}
+ {{no}altdiagonal}
+ {{no}bentover} }
+ unset hidden3d
+ show hidden3d
+
+ In contrast to the usual display in gnuplot, hidden line removal actually
+ treats the given function or data grids as real surfaces that can't be seen
+ through, so plot elements behind the surface will be hidden by it. For this
+ to work, the surface needs to have 'grid structure' (see `splot datafile`
+ about this), and it has to be drawn `with lines` or `with linespoints`.
+
+ When `hidden3d` is set, both the hidden portion of the surface and possibly
+ its contours drawn on the base (see `set contour`) as well as the grid will
+ be hidden. Each surface has its hidden parts removed with respect to itself
+ and to other surfaces, if more than one surface is plotted. Contours drawn
+ on the surface (`set contour surface`) don't work.
+
+ Labels and arrows are always visible and are unaffected. The key box is never
+ hidden by the surface. As of gnuplot version 4.6, hidden3d also affects 3D
+ plotting styles `points`, `labels`, `vectors`, and `impulses` even if no
+ surface is present in the graph. Individual plots within the graph may be
+ explicitly excluded from this processing by appending the extra option
+ `nohidden3d` to the `with` specifier.
+
+ Hidden3d does not affect solid surfaces drawn using the pm3d mode. To achieve
+ a similar effect purely for pm3d surfaces, use instead `set pm3d depthorder`.
+ To mix pm3d surfaces with normal `hidden3d` processing, use the option
+ `set hidden3d front` to force all elements included in hidden3d processing to
+ be drawn after any remaining plot elements. Then draw the surface twice, once
+ `with lines lt -2` and a second time `with pm3d`. The first instance will
+ include the surface during calculation of occluded elements but will not draw
+ the surface itself.
+
+ Functions are evaluated at isoline intersections. The algorithm interpolates
+ linearly between function points or data points when determining the visible
+ line segments. This means that the appearance of a function may be different
+ when plotted with `hidden3d` than when plotted with `nohidden3d` because in
+ the latter case functions are evaluated at each sample. Please see
+ `set samples` and `set isosamples` for discussion of the difference.
+
+ The algorithm used to remove the hidden parts of the surfaces has some
+ additional features controllable by this command. Specifying `defaults` will
+ set them all to their default settings, as detailed below. If `defaults` is
+ not given, only explicitly specified options will be influenced: all others
+ will keep their previous values, so you can turn on/off hidden line removal
+ via `set {no}hidden3d`, without modifying the set of options you chose.
+
+ The first option, `offset`, influences the linetype used for lines on the
+ 'back' side. Normally, they are drawn in a linetype one index number higher
+ than the one used for the front, to make the two sides of the surface
+ distinguishable. You can specify a different linetype offset to add
+ instead of the default 1, by `offset <offset>`. Option `nooffset` stands for
+ `offset 0`, making the two sides of the surface use the same linetype.
+
+ Next comes the option `trianglepattern <bitpattern>`. <bitpattern> must be
+ a number between 0 and 7, interpreted as a bit pattern. Each bit determines
+ the visibility of one edge of the triangles each surface is split up into.
+ Bit 0 is for the 'horizontal' edges of the grid, Bit 1 for the 'vertical'
+ ones, and Bit 2 for the diagonals that split each cell of the original grid
+ into two triangles. The default pattern is 3, making all horizontal and
+ vertical lines visible, but not the diagonals. You may want to choose 7 to
+ see those diagonals as well.
+
+ The `undefined <level>` option lets you decide what the algorithm is to do
+ with data points that are undefined (missing data, or undefined function
+ values), or exceed the given x-, y- or z-ranges. Such points can either be
+ plotted nevertheless, or taken out of the input data set. All surface
+ elements touching a point that is taken out will be taken out as well, thus
+ creating a hole in the surface. If <level> = 3, equivalent to option
+ `noundefined`, no points will be thrown away at all. This may produce all
+ kinds of problems elsewhere, so you should avoid this. <level> = 2 will
+ throw away undefined points, but keep the out-of-range ones. <level> = 1,
+ the default, will get rid of out-of-range points as well.
+
+ By specifying `noaltdiagonal`, you can override the default handling of a
+ special case can occur if `undefined` is active (i.e. <level> is not 3).
+ Each cell of the grid-structured input surface will be divided in two
+ triangles along one of its diagonals. Normally, all these diagonals have
+ the same orientation relative to the grid. If exactly one of the four cell
+ corners is excluded by the `undefined` handler, and this is on the usual
+ diagonal, both triangles will be excluded. However if the default setting
+ of `altdiagonal` is active, the other diagonal will be chosen for this cell
+ instead, minimizing the size of the hole in the surface.
+
+ The `bentover` option controls what happens to another special case, this
+ time in conjunction with the `trianglepattern`. For rather crumply surfaces,
+ it can happen that the two triangles a surface cell is divided into are seen
+ from opposite sides (i.e. the original quadrangle is 'bent over'), as
+ illustrated in the following ASCII art:
+
+ C----B
+ original quadrangle: A--B displayed quadrangle: |\ |
+ ("set view 0,0") | /| ("set view 75,75" perhaps) | \ |
+ |/ | | \ |
+ C--D | \|
+ A D
+
+ If the diagonal edges of the surface cells aren't generally made visible by
+ bit 2 of the <bitpattern> there, the edge CB above wouldn't be drawn at all,
+ normally, making the resulting display hard to understand. Therefore, the
+ default option of `bentover` will turn it visible in this case. If you don't
+ want that, you may choose `nobentover` instead.
+ See also
+ hidden line removal demo (hidden.dem)
+ and
+ complex hidden line demo (singulr.dem).
+?commands set historysize
+?set historysize
+?unset historysize
+?historysize
+?nohistorysize
+ Note: the command `set historysize` is only available when
+ gnuplot has been configured to use the GNU readline library.
+
+ Syntax:
+ set historysize <int>
+ unset historysize
+
+ When leaving gnuplot, the value of historysize is used for
+ truncating the history to at most that much lines. The default
+ is 500.
+ `unset historysize` will disable history truncation and thus
+ allow an infinite number of lines to be written to the history
+ file.
+?commands set isosamples
+?commands show isosamples
+?set isosamples
+?show isosamples
+?isosamples
+ The isoline density (grid) for plotting functions as surfaces may be changed
+ by the `set isosamples` command.
+
+ Syntax:
+ set isosamples <iso_1> {,<iso_2>}
+ show isosamples
+
+ Each function surface plot will have <iso_1> iso-u lines and <iso_2> iso-v
+ lines. If you only specify <iso_1>, <iso_2> will be set to the same value
+ as <iso_1>. By default, sampling is set to 10 isolines per u or v axis.
+ A higher sampling rate will produce more accurate plots, but will take longer.
+ These parameters have no effect on data file plotting.
+
+ An isoline is a curve parameterized by one of the surface parameters while
+ the other surface parameter is fixed. Isolines provide a simple means to
+ display a surface. By fixing the u parameter of surface s(u,v), the iso-u
+ lines of the form c(v) = s(u0,v) are produced, and by fixing the v parameter,
+ the iso-v lines of the form c(u) = s(u,v0) are produced.
+
+ When a function surface plot is being done without the removal of hidden
+ lines, `set samples` controls the number of points sampled along each
+ isoline; see `set samples` and `set hidden3d`. The contour algorithm
+ assumes that a function sample occurs at each isoline intersection, so
+ change in `samples` as well as `isosamples` may be desired when changing
+ the resolution of a function surface/contour.
+?commands set key
+?commands unset key
+?commands show key
+?set key
+?unset key
+?show key
+?key
+?nokey
+?legend
+ The `set key` command enables a key (or legend) describing plots on a plot.
+
+ The contents of the key, i.e., the names given to each plotted data set and
+ function and samples of the lines and/or symbols used to represent them, are
+ determined by the `title` and `with` options of the {`s`}`plot` command.
+ Please see `plot title` and `plot with` for more information.
+
+ Syntax:
+ set key {on|off} {default}
+ {{inside | outside} | {lmargin | rmargin | tmargin | bmargin}
+ | {at <position>}}
+ {left | right | center} {top | bottom | center}
+ {vertical | horizontal} {Left | Right}
+ {{no}opaque}
+ {{no}reverse} {{no}invert}
+ {samplen <sample_length>} {spacing <vertical_spacing>}
+ {width <width_increment>}
+ {height <height_increment>}
+ {{no}autotitle {columnheader}}
+ {title "<text>"} {{no}enhanced}
+ {font "<face>,<size>"} {textcolor <colorspec>}
+ {{no}box { {linestyle | ls <line_style>}
+ | {linetype | lt <line_type>}
+ {linewidth | lw <line_width>}}}
+ {maxcols {<max no. of columns> | auto}}
+ {maxrows {<max no. of rows> | auto}}
+ unset key
+ show key
+
+ The key contains a title and a sample (line, point, box) for each plot
+ in the graph. The key may be turned off by requesting `set key off` or
+ `unset key`. Individual key entries may be turned off by using the
+ `notitle` keyword in the corresponding plot command.
+
+ Elements within the key are stacked according to `vertical` or `horizontal`.
+ In the case of `vertical`, the key occupies as few columns as possible. That
+ is, elements are aligned in a column until running out of vertical space at
+ which point a new column is started. The vertical space may be limited using
+ 'maxrows'. In the case of `horizontal`, the key occupies as few rows as
+ possible. The horizontal space may be limited using 'maxcols'.
+
+ By default the key is placed in the upper right inside corner of the graph.
+ The keywords `left`, `right`, `top`, `bottom`, `center`, `inside`, `outside`,
+ `lmargin`, `rmargin`, `tmargin`, `bmargin` (, `above`, `over`, `below` and
+ `under`) may be used to automatically place the key in other positions of the
+ graph. Also an `at <position>` may be given to indicate precisely where the
+ plot should be placed. In this case, the keywords `left`, `right`, `top`,
+ `bottom` and `center` serve an analogous purpose for alignment.
+ For more information, see `key placement`.
+
+ Justification of the plot titles within the key is controlled by `Left` or
+ `Right` (default). The text and sample can be reversed (`reverse`) and a
+ box can be drawn around the key (`box {...}`) in a specified `linetype`
+ and `linewidth`, or a user-defined `linestyle`.
+
+ By default the key is built up one plot at a time. That is, the key symbol and
+ title are drawn at the same time as the corresponding plot. That means newer
+ plots may sometimes place elements on top of the key. `set key opaque` causes
+ the key to be generated after all the plots. In this case the key area is
+ filled with background color and then the key symbols and titles are written.
+ Therefore the key itself may obscure portions of some plot elements.
+ The default can be restored by `set key noopaque`.
+
+ By default the first plot label is at the top of the key and successive labels
+ are entered below it. The `invert` option causes the first label to be placed
+ at the bottom of the key, with successive labels entered above it. This option
+ is useful to force the vertical ordering of labels in the key to match the
+ order of box types in a stacked histogram.
+
+ The <height_increment> is a number of character heights to be added to or
+ subtracted from the height of the key box. This is useful mainly when you are
+ putting a box around the key and want larger borders around the key entries.
+
+ All plotted curves of `plot`s and `splot`s are titled according to the
+ default option `autotitles`. The automatic generation of titles can be
+ suppressed by `noautotitles`; then only those titles explicitly defined
+ by `(s)plot ... title ...` will be drawn.
+
+ The command `set key autotitle columnheader` causes the first entry in each
+ column of input data to be interpreted as a text string and used as a title for
+ the corresponding plot. If the quantity being plotted is a function of data
+ from several columns, gnuplot may be confused as to which column to draw the
+ title from. In this case it is necessary to specify the column explicitly in
+ the plot command, e.g.
+
+ plot "datafile" using (($2+$3)/$4) title columnhead(3) with lines
+
+ An overall title can be put on the key (`title "<text>"`)---see also `syntax`
+ for the distinction between text in single- or double-quotes. The key title
+ uses the same justification as do the plot titles.
+
+ The defaults for `set key` are `on`, `right`, `top`, `vertical`, `Right`,
+ `noreverse`, `noinvert`, `samplen 4`, `spacing 1.25`, `title ""`, and
+ `nobox`. The default <linetype> is the same as that used for the plot
+ borders. Entering `set key default` returns the key to its default
+ configuration.
+
+ The key is drawn as a sequence of lines, with one plot described on each
+ line. On the right-hand side (or the left-hand side, if `reverse` is
+ selected) of each line is a representation that attempts to mimic the way the
+ curve is plotted. On the other side of each line is the text description
+ (the line title), obtained from the `plot` command. The lines are vertically
+ arranged so that an imaginary straight line divides the left- and right-hand
+ sides of the key. It is the coordinates of the top of this line that are
+ specified with the `set key` command. In a `plot`, only the x and y
+ coordinates are used to specify the line position. For a `splot`, x, y and
+ z are all used as a 3D location mapped using the same mapping as the graph
+ itself to form the required 2D screen position of the imaginary line.
+
+ When using the TeX or other terminals where formatting information is embedded
+ in the string, `gnuplot` can only estimate the correctly exact width of the
+ string for key positioning. If the key is to be positioned at the left, it may
+ be convenient to use the combination `set key left Left reverse`.
+
+ If `splot` is being used to draw contours, the contour labels will be listed
+ in the key. If the alignment of these labels is poor or a different number
+ of decimal places is desired, the label format can be specified. See
+ `set clabel` for details.
+
+ Examples:
+
+ This places the key at the default location:
+ set key default
+
+ This disables the key:
+ unset key
+
+ This places a key at coordinates 2,3.5,2 in the default (first) coordinate
+ system:
+ set key at 2,3.5,2
+
+ This places the key below the graph:
+ set key below
+
+ This places the key in the bottom left corner, left-justifies the text,
+ gives it a title, and draws a box around it in linetype 3:
+ set key left bottom Left title 'Legend' box 3
+?commands set key placement
+?set key placement
+?key placement
+ To understand positioning, the best concept is to think of a region, i.e.,
+ inside/outside, or one of the margins. Along with the region, keywords
+ `left/center/right` (l/c/r) and `top/center/bottom` (t/c/b) control where
+ within the particular region the key should be placed.
+
+ When in `inside` mode, the keywords `left` (l), `right` (r), `top` (t),
+ `bottom` (b), and `center` (c) push the key out toward the plot boundary as
+ illustrated:
+
+ t/l t/c t/r
+
+ c/l c c/r
+
+ b/l b/c b/r
+
+
+ When in `outside` mode, automatic placement is similar to the above
+ illustration, but with respect to the view, rather than the graph boundary.
+ That is, a border is moved inward to make room for the key outside of
+ the plotting area, although this may interfere with other labels and may
+ cause an error on some devices. The particular plot border that is moved
+ depends upon the position described above and the stacking direction. For
+ options centered in one of the dimensions, there is no ambiguity about which
+ border to move. For the corners, when the stack direction is `vertical`, the
+ left or right border is moved inward appropriately. When the stack direction
+ is `horizontal`, the top or bottom border is moved inward appropriately.
+
+ The margin syntax allows automatic placement of key regardless of stack
+ direction. When one of the margins `lmargin` (lm), `rmargin` (rm),
+ `tmargin` (tm), and `bmargin` (bm) is combined with a single, non-conflicting
+ direction keyword, the following illustrated positions may contain the key:
+
+ l/tm c/tm r/tm
+
+ t/lm t/rm
+
+ c/lm c/rm
+
+ b/lm b/rm
+
+ l/bm c/bm r/bm
+
+
+ Keywords `above` and `over` are synonymous with `tmargin`. For version
+ compatibility, `above` or `over` without an additional l/c/r or stack direction
+ keyword uses `center` and `horizontal`. Keywords `below` and `under` are
+ synonymous with `bmargin`. For compatibility, `below` or `under` without an
+ additional l/c/r or stack direction keyword uses `center` and `horizontal`. A
+ further compatibility issue is that `outside` appearing without an additional
+ t/b/c or stack direction keyword uses `top`, `right` and `vertical` (i.e., the
+ same as t/rm above).
+
+ The <position> can be a simple x,y,z as in previous versions, but these can
+ be preceded by one of five keywords (`first`, `second`, `graph`, `screen`,
+ `character`) which selects the coordinate system in which the position of
+ the first sample line is specified. See `coordinates` for more details.
+ The effect of `left`, `right`, `top`, `bottom`, and `center` when <position>
+ is given is to align the key as though it were text positioned using the
+ label command, i.e., `left` means left align with key to the right of
+ <position>, etc.
+?commands set key samples
+?set key samples
+?key samples
+ By default, each plot on the graph generates a corresponding entry in the key.
+ This entry contains a plot title and a sample line/point/box of the same color
+ and fill properties as used in the plot itself. The font and textcolor
+ properties control the appearance of the individual plot titles that appear in
+ the key. Setting the textcolor to "variable" causes the text for each key
+ entry to be the same color as the line or fill color for that plot.
+ This was the default in some earlier versions of gnuplot.
+
+ The length of the sample line can be controlled by `samplen`. The sample
+ length is computed as the sum of the tic length and <sample_length> times the
+ character width. `samplen` also affects the positions of point samples in
+ the key since these are drawn at the midpoint of the sample line, even if
+ the sample line itself is not drawn.
+
+ The vertical spacing between lines is controlled by `spacing`. The spacing
+ is set equal to the product of the pointsize, the vertical tic size, and
+ <vertical_spacing>. The program will guarantee that the vertical spacing is
+ no smaller than the character height.
+
+ The <width_increment> is a number of character widths to be added to or
+ subtracted from the length of the string. This is useful only when you are
+ putting a box around the key and you are using control characters in the text.
+ `gnuplot` simply counts the number of characters in the string when computing
+ the box width; this allows you to correct it.
+?commands set label
+?commands unset label
+?commands show label
+?set label
+?unset label
+?show label
+?label
+?nolabel
+ Arbitrary labels can be placed on the plot using the `set label` command.
+
+ Syntax:
+ set label {<tag>} {"<label text>"} {at <position>}
+ {left | center | right}
+ {norotate | rotate {by <degrees>}}
+ {font "<name>{,<size>}"}
+ {noenhanced}
+ {front | back}
+ {textcolor <colorspec>}
+ {point <pointstyle> | nopoint}
+ {offset <offset>}
+ unset label {<tag>}
+ show label
+
+ The <position> is specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, `screen`, or `character` to select the coordinate
+ system. See `coordinates` for details.
+
+ The tag is an integer that is used to identify the label. If no <tag>
+ is given, the lowest unused tag value is assigned automatically. The
+ tag can be used to delete or modify a specific label. To change any
+ attribute of an existing label, use the `set label` command with the
+ appropriate tag, and specify the parts of the label to be changed.
+
+ The <label text> can be a string constant, a string variable, or a string-
+ valued expression. See `strings`, `sprintf`, and `gprintf`.
+
+ By default, the text is placed flush left against the point x,y,z. To adjust
+ the way the label is positioned with respect to the point x,y,z, add the
+ justification parameter, which may be `left`, `right` or `center`,
+ indicating that the point is to be at the left, right or center of the text.
+ Labels outside the plotted boundaries are permitted but may interfere with
+ axis labels or other text.
+
+ If `rotate` is given, the label is written vertically (if the terminal can do
+ so, of course). If `rotate by <degrees>` is given, conforming terminals will
+ try to write the text at the specified angle; non-conforming terminals will
+ treat this as vertical text.
+
+ Font and its size can be chosen explicitly by `font "<name>{,<size>}"` if the
+ terminal supports font settings. Otherwise the default font of the terminal
+ will be used.
+
+ Normally the enhanced text mode string interpretation, if enabled for the
+ current terminal, is applied to all text strings including label text.
+ The `noenhanced` property can be used to exempt a specific label from the
+ enhanced text mode processing. The can be useful if the label contains
+ underscores, for example. See `enhanced text`.
+
+ If `front` is given, the label is written on top of the graphed data. If
+ `back` is given (the default), the label is written underneath the graphed
+ data. Using `front` will prevent a label from being obscured by dense data.
+
+ `textcolor <colorspec>` changes the color of the label text. <colorspec> can be
+ a linetype, an rgb color, or a palette mapping. See help for `colorspec` and
+ `palette`. `textcolor` may be abbreviated `tc`.
+ `tc default` resets the text color to its default state.
+ `tc lt <n>` sets the text color to that of line type <n>.
+ `tc ls <n>` sets the text color to that of line style <n>.
+ `tc palette z` selects a palette color corresponding to the label z position.
+ `tc palette cb <val>` selects a color corresponding to <val> on the colorbar.
+ `tc palette fraction <val>`, with 0<=val<=1, selects a color corresponding to
+ the mapping [0:1] to grays/colors of the `palette`.
+ `tc rgb "#RRGGBB"` selects an arbitrary 24-bit RGB color.
+
+ If a <pointstyle> is given, using keywords `lt`, `pt` and `ps`, see `style`,
+ a point with the given style and color of the given line type is plotted at
+ the label position and the text of the label is displaced slightly.
+ This option is used by default for placing labels in `mouse` enhanced
+ terminals. Use `nopoint` to turn off the drawing of a point near
+ the label (this is the default).
+
+ The displacement defaults to 1,1 in `pointsize` units if a <pointstyle> is
+ given, 0,0 if no <pointstyle> is given. The displacement can be controlled
+ by the optional `offset <offset>` where <offset> is specified by either x,y
+ or x,y,z, and may be preceded by `first`, `second`, `graph`, `screen`, or
+ `character` to select the coordinate system. See `coordinates` for details.
+
+ 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` and `set timefmt`.
+
+ The EEPIC, Imagen, LaTeX, and TPIC drivers allow \\ in a string to specify
+ a newline.
+
+ Label coordinates and text can also be read from a data file (see `labels`).
+
+ Examples:
+
+ To set a label at (1,2) to "y=x", use:
+ set label "y=x" at 1,2
+
+ To set a Sigma of size 24, from the Symbol font set, at the center of
+ the graph, use:
+ set label "S" at graph 0.5,0.5 center font "Symbol,24"
+
+ To set a label "y=x^2" with the right of the text at (2,3,4), and tag the
+ label as number 3, use:
+ set label 3 "y=x^2" at 2,3,4 right
+
+ To change the preceding label to center justification, use:
+ set label 3 center
+
+ To delete label number 2, use:
+ unset label 2
+
+ To delete all labels, use:
+ unset label
+
+ To show all labels (in tag order), use:
+ show label
+
+ To set a label on a graph with a timeseries on the x axis, use, for example:
+ set timefmt "%d/%m/%y,%H:%M"
+ set label "Harvest" at "25/8/93",1
+
+ To display a freshly fitted parameter on the plot with the data and the
+ fitted function, do this after the `fit`, but before the `plot`:
+ set label sprintf("a = %3.5g",par_a) at 30,15
+ bfit = gprintf("b = %s*10^%S",par_b)
+ set label bfit at 30,20
+
+ To display a function definition along with its fitted parameters, use:
+ f(x)=a+b*x
+ fit f(x) 'datafile' via a,b
+ set label GPFUN_f at graph .05,.95
+ set label sprintf("a = %g", a) at graph .05,.90
+ set label sprintf("b = %g", b) at graph .05,.85
+
+ To set a label displaced a little bit from a small point:
+ set label 'origin' at 0,0 point lt 1 pt 2 ps 3 offset 1,-1
+
+ To set a label whose color matches the z value (in this case 5.5) of some
+ point on a 3D splot colored using pm3d:
+ set label 'text' at 0,0,5.5 tc palette z
+?commands set linetype
+?commands unset linetype
+?commands show linetype
+?set linetype
+?unset linetype
+?show linetype
+?linetype
+ The `set linetype` command allows you to redefine the basic linetypes used
+ for plots. The command options are identical to those for "set style line".
+ Unlike line styles, redefinitions by `set linetype` are persistent; they
+ are not affected by `reset`.
+
+ For example, linetypes one and two default to red and green. If you redefine
+ them like this:
+
+ set linetype 1 lw 2 lc rgb "blue" pointtype 6
+ set linetype 2 lw 2 lc rgb "forest-green" pointtype 8
+
+ everywhere that uses lt 1 will now get a thick blue line rather than a thin red
+ line (the previous default meaning of lt 1). This includes uses such as the
+ definition of a temporary linestyle derived from the base linetype 1.
+
+ `Note`: This command is new to gnuplot version 4.6. It supersedes a rather
+ cryptic command in version 4.2 "set style increment user".
+ The older command is now deprecated.
+
+ This mechanism can be used to define a set of personal preferences for the
+ sequence of lines used in gnuplot. The recommended way to do this is to add
+ to the run-time initialization file ~/.gnuplot a sequence of commands like
+
+ if ((GPVAL_VERSION < 4.5) \
+ || (!strstrt(GPVAL_COMPILE_OPTIONS,"+USER_LINETYPES"))) \
+ exit
+ set linetype 1 lc rgb "dark-violet" lw 2 pt 0
+ set linetype 2 lc rgb "sea-green" lw 2 pt 7
+ set linetype 3 lc rgb "cyan" lw 2 pt 6 pi -1
+ set linetype 4 lc rgb "dark-red" lw 2 pt 5 pi -1
+ set linetype 5 lc rgb "blue" lw 2 pt 8
+ set linetype 6 lc rgb "dark-orange" lw 2 pt 3
+ set linetype 7 lc rgb "black" lw 2 pt 11
+ set linetype 8 lc rgb "goldenrod" lw 2
+ set linetype cycle 8
+
+ Every time you run gnuplot the line types will be initialized to these values.
+ You may initialize as many linetypes as you like. If you do not redefine, say,
+ linetype 3 then it will continue to have the default properties (in this case
+ blue, pt 3, lw 1, etc). The first few lines of the example script insure that
+ the commands will be skipped by older versions of gnuplot.
+
+ Similar script files can be used to define theme-based color choices, or sets
+ of colors optimized for a particular plot type or output device.
+
+ The command `set linetype cycle 8` tells gnuplot to re-use these definitions
+ for the color and linewidth of higher-numbered linetypes. That is, linetypes
+ 9-16, 17-24, and so on will use this same sequence of colors and widths.
+ The point properties (pointtype, pointsize, pointinterval) are not affected by
+ this command. `unset linetype cycle` disables this feature. If the line
+ properties of a higher numbered linetype are explicitly defined, this takes
+ precedence over the recycled low-number linetype properties.
+
+?commands set lmargin
+?set lmargin
+?lmargin
+ The command `set lmargin` sets the size of the left margin.
+ Please see `set margin` for details.
+?commands set loadpath
+?commands show loadpath
+?set loadpath
+?show loadpath
+?loadpath
+ The `loadpath` setting defines additional locations for data and command
+ files searched by the `call`, `load`, `plot` and `splot` commands. If a
+ file cannot be found in the current directory, the directories in
+ `loadpath` are tried.
+
+ Syntax:
+ set loadpath {"pathlist1" {"pathlist2"...}}
+ show loadpath
+
+ Path names may be entered as single directory names, or as a list of
+ path names separated by a platform-specific path separator, eg. colon
+ (':') on Unix, semicolon (';') on DOS/Windows/OS/2 platforms.
+ The `show loadpath`, `save` and `save set` commands replace the
+ platform-specific separator with a space character (' ').
+
+ If the environment variable GNUPLOT_LIB is set, its contents are appended to
+ `loadpath`. However, `show loadpath` prints the contents of `set loadpath`
+ and GNUPLOT_LIB separately. Also, the `save` and `save set` commands ignore
+ the contents of GNUPLOT_LIB.
+?commands set locale
+?set locale
+?locale
+ The `locale` setting determines the language with which `{x,y,z}{d,m}tics`
+ will write the days and months.
+
+ Syntax:
+ set locale {"<locale>"}
+
+ <locale> may be any language designation acceptable to your installation.
+ See your system documentation for the available options. The command
+ `set locale ""` will try to determine the locale from the LC_TIME, LC_ALL,
+ or LANG environment variables.
+
+ To change the decimal point locale, see `set decimalsign`.
+ To change the character encoding to the current locale, see `set encoding`.
+?commands set logscale
+?commands unset logscale
+?commands show logscale
+?set logscale
+?unset logscale
+?show logscale
+?set log
+?logscale
+?nologscale
+ Syntax:
+ set logscale <axes> {<base>}
+ unset logscale <axes>
+ show logscale
+
+ where <axes> may be any combinations of `x`, `x2`, `y`, `y2`, `z`, `cb`, and
+ `r` in any order. <base> is the base of the log scaling (default is base 10).
+ If no axes are specified, the command affects all axes except `r`.
+ The command `unset logscale` turns off log scaling for all axes.
+ Note that the ticmarks generated for logscaled axes are not uniformly spaced.
+ See `set xtics`.
+
+ Examples:
+
+ To enable log scaling in both x and z axes:
+ set logscale xz
+
+ To enable scaling log base 2 of the y axis:
+ set logscale y 2
+
+ To enable z and color log axes for a pm3d plot:
+ set logscale zcb
+
+ To disable z axis log scaling:
+ unset logscale z
+?commands set macros
+?commands show macros
+?set macros
+?show macros
+ If command line macro substitution is enabled, then tokens in the command line
+ of the form @<stringvariablename> will be replaced by the text string contained
+ in <stringvariablename>. See `substitution`.
+
+ Syntax:
+ set macros
+
+?commands set mapping
+?commands show mapping
+?set mapping
+?show mapping
+?mapping
+ If data are provided to `splot` in spherical or cylindrical coordinates,
+ the `set mapping` command should be used to instruct `gnuplot` how to
+ interpret them.
+
+ Syntax:
+ set mapping {cartesian | spherical | cylindrical}
+
+ A cartesian coordinate system is used by default.
+
+ For a spherical coordinate system, the data occupy two or three columns
+ (or `using` entries). The first two are interpreted as the azimuthal
+ and polar angles theta and phi (or "longitude" and "latitude"), in the
+ units specified by `set angles`. The radius r is taken from the third
+ column if there is one, or is set to unity if there is no third column.
+ The mapping is:
+
+ x = r * cos(theta) * cos(phi)
+ y = r * sin(theta) * cos(phi)
+ z = r * sin(phi)
+
+ Note that this is a "geographic" spherical system, rather than a "polar"
+ one (that is, phi is measured from the equator, rather than the pole).
+
+ For a cylindrical coordinate system, the data again occupy two or three
+ columns. The first two are interpreted as theta (in the units specified by
+ `set angles`) and z. The radius is either taken from the third column or set
+ to unity, as in the spherical case. The mapping is:
+
+ x = r * cos(theta)
+ y = r * sin(theta)
+ z = z
+
+ The effects of `mapping` can be duplicated with the `using` filter on the
+ `splot` command, but `mapping` may be more convenient if many data files are
+ to be processed. However even if `mapping` is used, `using` may still be
+ necessary if the data in the file are not in the required order.
+
+ `mapping` has no effect on `plot`.
+ world.dem: mapping demos.
+?commands set margin
+?commands show margin
+?set margin
+?show margin
+?margin
+ The `margin` is the distance between the plot border and the outer edge of the
+ canvas. The size of the margin is chosen automatically, but can be overridden
+ by the `set margin` commands. `show margin` shows the current settings.
+ To alter the distance between the inside of the plot border and the data in the
+ plot itself, see `set offsets`.
+
+ Syntax:
+ set bmargin {{at screen} <margin>}
+ set lmargin {{at screen} <margin>}
+ set rmargin {{at screen} <margin>}
+ set tmargin {{at screen} <margin>}
+ show margin
+
+ The default units of <margin> are character heights or widths, as appropriate.
+ A positive value defines the absolute size of the margin. A negative value
+ (or none) causes `gnuplot` to revert to the computed value. For 3D plots,
+ only the left margin can be set using character units.
+
+ The keywords `at screen` indicates that the margin is specified as a fraction
+ of the full drawing area. This can be used to precisely line up the corners of
+ individual 2D and 3D graphs in a multiplot. This placement ignores the current
+ values of `set origin` and `set size`, and is intended as an alternative
+ method for positioning graphs within a multiplot.
+
+ Normally the margins of a plot are automatically calculated based on tics,
+ tic labels, axis labels, the plot title, the timestamp and the size of the
+ key if it is outside the borders. If, however, tics are attached to the
+ axes (`set xtics axis`, for example), neither the tics themselves nor their
+ labels will be included in either the margin calculation or the calculation
+ of the positions of other text to be written in the margin. This can lead
+ to tic labels overwriting other text if the axis is very close to the border.
+?commands set mouse
+?commands unset mouse
+?set mouse
+?unset mouse
+?mousing
+?mouse
+?nomouse
+ The command `set mouse` enables mouse actions for the current interactive
+ terminal. It is usually enabled by default in interactive mode, but disabled
+ by default if commands are being read from a file.
+
+ There are two mouse modes. The 2D mode works for `plot` commands and for `splot`
+ maps (i.e. `set view` with z-rotation 0, 90, 180, 270 or 360 degrees, including
+ `set view map`). In this mode the mouse position is tracked and you can pan or
+ zoom using the mouse buttons or arrow keys. Some terminals support toggling
+ individual plots on/off by clicking on the corresponding key title or on a
+ separate widget.
+
+ For 3D graphs `splot`, the view and scaling of the graph can be changed with
+ mouse buttons 1 and 2, respectively. A vertical motion of Button 2 with the
+ shift key held down changes the `xyplane`. If additionally to these
+ buttons the modifier <ctrl> is held down, the coordinate axes are displayed
+ but the data are suppressed. This is useful for large data sets.
+
+ Mousing is not available inside multiplot mode. When multiplot is completed
+ using `unset multiplot`, then the mouse will be turned on again but acts only
+ on the most recent plot within the multiplot (like replot does).
+
+ Syntax:
+ set mouse {doubleclick <ms>} {nodoubleclick} \
+ {{no}zoomcoordinates} \
+ {noruler | ruler {at x,y}} \
+ {polardistance{deg|tan} | nopolardistance} \
+ {format <string>} \
+ {clipboardformat <int>/<string>} \
+ {mouseformat <int>/<string>} \
+ {{no}labels {"labeloptions"}} \
+ {{no}zoomjump} {{no}verbose}
+ unset mouse
+
+ The options `noruler` and `ruler` switch the ruler off and on, the latter
+ optionally setting the origin at the given coordinates. While the ruler is on,
+ the distance in user units from the ruler origin to the mouse is displayed
+ continuously. By default, toggling the ruler has the key binding 'r'.
+
+ The option `polardistance` determines if the distance between the mouse cursor
+ and the ruler is also shown in polar coordinates (distance and angle in
+ degrees or tangent (slope)). This corresponds to the default key binding '5'.
+
+ Choose the option `labels` to define persistent gnuplot labels using Button 2.
+ The default is `nolabels`, which makes Button 2 draw only a temporary label at
+ the mouse position. Labels are drawn with the current setting of `mouseformat`.
+ The `labeloptions` string is passed to the `set label` command. The default is
+ "point pointstyle 1" which will plot a small plus at the label position.
+ Temporary labels will disappear at the next `replot` or mouse zoom operation.
+ Persistent labels can be removed by holding the Ctrl-Key down while clicking
+ Button 2 on the label's point. The threshold for how close you must be to the
+ label is also determined by the `pointsize`.
+
+ If the option `verbose` is turned on the communication commands are shown
+ during execution. This option can also be toggled by hitting `6` in the
+ driver's window. `verbose` is off by default.
+
+ Press 'h' in the driver's window for a short summary of the mouse and key
+ bindings. This will also display user defined bindings or `hotkeys` which
+ can be defined using the `bind` command, see help for `bind`. Note, that user
+ defined `hotkeys` may override the default bindings.
+ See also help for `bind` and `label`.
+?set mouse doubleclick
+?mouse doubleclick
+ The doubleclick resolution is given in milliseconds and used for Button 1,
+ which copies the current mouse position to the `clipboard`. The default value
+ is 300 ms. Setting the value to 0 ms triggers the copy on a single click.
+?set mouse format
+?set mouse mouseformat
+?mouse format
+?mouseformat
+ The `set mouse format` command specifies a format string for sprintf() which
+ determines how the mouse cursor [x,y] coordinates are printed to the plot
+ window and to the clipboard. The default is "% #g".
+
+ `set mouse clipboardformat` and `set mouse mouseformat` are used for formatting
+ the text on Button1 and Button2 actions -- copying the coordinates to the
+ clipboard and temporarily annotating the mouse position. An integer argument
+ selects one of the format options in the table below. A string argument is used
+ as a format for sprintf() in option 6 and should contain two float specifiers.
+ Example:
+ `set mouse mouseformat "mouse x,y = %5.2g, %10.3f"`.
+ Use `set mouse mouseformat ""` to turn this string off again.
+
+ The following formats are available:
+
+ 0 default (same as 1)
+ 1 axis coordinates 1.23, 2.45
+ 2 graph coordinates (from 0 to 1) /0.00, 1.00/
+ 3 x = timefmt y = axis [(as set by `set timefmt`), 2.45]
+ 4 x = date y = axis [31. 12. 1999, 2.45]
+ 5 x = time y = axis [23:59, 2.45]
+ 6 x = date time y = axis [31. 12. 1999 23:59, 2.45]
+ 7 format from `set mouse mouseformat`, e.g. "mouse x,y = 1.23, 2.450"
+?set mouse scrolling
+?mouse scrolling
+?mouse wheel
+?scrolling
+?mousewheel
+ X and Y axis scaling in both 2D and 3D graphs can be adjusted using the
+ mouse wheel. <wheel-up> scrolls up (increases both YMIN and YMAX by ten
+ percent of the Y range, and increases both Y2MIN and Y2MAX likewise), and
+ <wheel down> scrolls down. <shift-wheel-up> scrolls left (decreases both
+ XMIN and XMAX, and both X2MIN and X2MAX), and <shift-wheel-down> scrolls
+ right. <control-wheel-up> zooms in toward the center of the plot, and
+ <control-wheel-down> zooms out. <shift-control-wheel-up> zooms in along the
+ X and X2 axes only, and <shift-control-wheel-down> zooms out along the X and
+ X2 axes only.
+?mouse x11_mouse
+?x11_mouse
+?x11 mouse
+ If multiple X11 plot windows have been opened using the `set term x11 <n>`
+ terminal option, then only the current plot window supports the entire
+ range of mouse commands and hotkeys. The other windows will, however,
+ continue to display mouse coordinates at the lower left.
+?mouse zoom
+?zoom
+ Zooming is usually accomplished by holding down the left mouse button and
+ dragging the mouse to delineate a zoom region. Some platforms may require
+ using a different mouse button. The original plot can be restored by typing
+ the 'u' hotkey in the plot window. The hotkeys 'p' and 'n' step back and
+ forth through a history of zoom operations.
+
+ The option `zoomcoordinates` determines if the coordinates of the zoom box are
+ drawn at the edges while zooming. This is on by default.
+
+ If the option `zoomjump` is on, the mouse pointer will be automatically
+ offset a small distance after starting a zoom region with button 3. This can
+ be useful to avoid a tiny (or even empty) zoom region. `zoomjump` is off by
+ default.
+
+?commands set multiplot
+?commands unset multiplot
+?set multiplot
+?unset multiplot
+?multiplot
+?nomultiplot
+ The command `set multiplot` places `gnuplot` in the multiplot mode, in which
+ several plots are placed on the same page, window, or screen.
+
+ Syntax:
+ set multiplot
+ { title <page title> {font <fontspec>} {enhanced|noenhanced} }
+ { layout <rows>,<cols>
+ {rowsfirst|columnsfirst} {downwards|upwards}
+ {scale <xscale>{,<yscale>}} {offset <xoff>{,<yoff>}}
+ }
+ unset multiplot
+
+ For some terminals, no plot is displayed until the command `unset multiplot`
+ is given, which causes the entire page to be drawn and then returns gnuplot
+ to its normal single-plot mode. For other terminals, each separate `plot`
+ command produces an updated display, either by redrawing all previous ones
+ and the newly added plot, or by just adding the new plot to the existing
+ display.
+
+ The area to be used by the next plot is not erased before doing the
+ new plot. The `clear` command can be used to do this if wanted, as is
+ typically the case for "inset" plots.
+
+ Any labels or arrows that have been defined will be drawn for each plot
+ according to the current size and origin (unless their coordinates are
+ defined in the `screen` system). Just about everything else that can be
+ `set` is applied to each plot, too. If you want something to appear only
+ once on the page, for instance a single time stamp, you'll need to put a `set
+ time`/`unset time` pair around one of the `plot`, `splot` or `replot`
+ commands within the `set multiplot`/`unset multiplot` block.
+
+ The multiplot title is separate from the individual plot titles, if any.
+ Space is reserved for it at the top of the page, spanning the full width
+ of the canvas.
+
+ The commands `set origin` and `set size` must be used to correctly position
+ each plot if no layout is specified or if fine tuning is desired. See
+ `set origin` and `set size` for details of their usage.
+
+ Example:
+ set multiplot
+ set size 0.4,0.4
+ set origin 0.1,0.1
+ plot sin(x)
+ set size 0.2,0.2
+ set origin 0.5,0.5
+ plot cos(x)
+ unset multiplot
+
+ This displays a plot of cos(x) stacked above a plot of sin(x).
+
+ `set size` and `set origin` refer to the entire plotting area used for each
+ plot. Please also see `set term size`. If you want to have the axes
+ themselves line up, you can guarantee that the margins are the same size with
+ the `set margin` commands. See `set margin` for their use. Note that the
+ margin settings are absolute, in character units, so the appearance of the
+ graph in the remaining space will depend on the screen size of the display
+ device, e.g., perhaps quite different on a video display and a printer.
+
+ With the `layout` option you can generate simple multiplots without having
+ to give the `set size` and `set origin` commands before each plot: Those
+ are generated automatically, but can be overridden at any time. With
+ `layout` the display will be divided by a grid with <rows> rows and
+ <cols> columns. This grid is filled rows first or columns first depending on
+ whether the corresponding option is given in the multiplot command. The stack
+ of plots can grow `downwards` or `upwards`.
+ Default is `rowsfirst` and `downwards`.
+
+ Each plot can be scaled by `scale` and shifted with `offset`; if the y-values
+ for scale or offset are omitted, the x-value will be used. `unset multiplot`
+ will turn off the automatic layout and restore the values of `set size` and
+ `set origin` as they were before `set multiplot layout`.
+
+ Example:
+ set size 1,1
+ set origin 0,0
+ set multiplot layout 3,2 columnsfirst scale 1.1,0.9
+ [ up to 6 plot commands here ]
+ unset multiplot
+
+ The above example will produce 6 plots in 2 columns filled top to bottom,
+ left to right. Each plot will have a horizontal size of 1.1/2 and a vertical
+ size of 0.9/3.
+
+ See also
+ multiplot demo (multiplt.dem)
+?commands set mx2tics
+?commands unset mx2tics
+?commands show mx2tics
+?set mx2tics
+?unset mx2tics
+?show mx2tics
+?mx2tics
+?nomx2tics
+ Minor tic marks along the x2 (top) axis are controlled by `set mx2tics`.
+ Please see `set mxtics`.
+?commands set mxtics
+?commands unset mxtics
+?commands show mxtics
+?set mxtics
+?unset mxtics
+?show mxtics
+?mxtics
+?nomxtics
+ Minor tic marks along the x axis are controlled by `set mxtics`. They can be
+ turned off with `unset mxtics`. Similar commands control minor tics along
+ the other axes.
+
+ Syntax:
+ set mxtics {<freq> | default}
+ unset mxtics
+ show mxtics
+
+ The same syntax applies to `mytics`, `mztics`, `mx2tics`, `my2tics` and
+ `mcbtics`.
+
+ <freq> is the number of sub-intervals (NOT the number of minor tics) between
+ major tics (the default for a linear axis is either two or five
+ depending on the major tics, so there are one or four minor
+ tics between major tics). Selecting `default` will return the number of minor
+ ticks to its default value.
+
+ If the axis is logarithmic, the number of sub-intervals will be set to a
+ reasonable number by default (based upon the length of a decade). This will
+ be overridden if <freq> is given. However the usual minor tics (2, 3, ...,
+ 8, 9 between 1 and 10, for example) are obtained by setting <freq> to 10,
+ even though there are but nine sub-intervals.
+
+ To set minor tics at arbitrary positions, use the ("<label>" <pos> <level>,
+ ...) form of `set {x|x2|y|y2|z}tics` with <label> empty and <level> set to 1.
+
+ The `set m{x|x2|y|y2|z}tics` commands work only when there are uniformly
+ spaced major tics. If all major tics were placed explicitly by
+ `set {x|x2|y|y2|z}tics`, then minor tic commands are ignored. Implicit
+ major tics and explicit minor tics can be combined using
+ `set {x|x2|y|y2|z}tics` and `set {x|x2|y|y2|z}tics add`.
+
+ Examples:
+ set xtics 0, 5, 10
+ set xtics add (7.5)
+ set mxtics 5
+ Major tics at 0,5,7.5,10, minor tics at 1,2,3,4,6,7,8,9
+ set logscale y
+ set ytics format ""
+ set ytics 1e-6, 10, 1
+ set ytics add ("1" 1, ".1" 0.1, ".01" 0.01, "10^-3" 0.001, \
+ "10^-4" 0.0001)
+ set mytics 10
+ Major tics with special formatting, minor tics at log positions
+
+ By default, minor tics are off for linear axes and on for logarithmic axes.
+ They inherit the settings for `axis|border` and `{no}mirror` specified for
+ the major tics. Please see `set xtics` for information about these.
+?commands set my2tics
+?commands unset my2tics
+?commands show my2tics
+?set my2tics
+?unset my2tics
+?show my2tics
+?my2tics
+?nomy2tics
+ Minor tic marks along the y2 (right-hand) axis are controlled by `set
+ my2tics`. Please see `set mxtics`.
+?commands set mytics
+?commands unset mytics
+?commands show mytics
+?set mytics
+?unset mytics
+?show mytics
+?mytics
+?nomytics
+ Minor tic marks along the y axis are controlled by `set mytics`. Please
+ see `set mxtics`.
+?commands set mztics
+?commands unset mztics
+?commands show mztics
+?set mztics
+?unset mztics
+?show mztics
+?mztics
+?nomztics
+ Minor tic marks along the z axis are controlled by `set mztics`. Please
+ see `set mxtics`.
+?object
+?commands set object
+?commands show object
+?set object
+?show object
+ The `set object` command defines a single object which will appear in all
+ subsequent 2D plots. You may define as many objects as you like. Currently the
+ supported object types are `rectangle`, `circle`, `ellipse`, and `polygon`.
+ Rectangles inherit a default set of style properties (fill, color, border) from
+ those set by the command `set style rectangle`, but each object can also be
+ given individual style properties. Circles, ellipses, and polygons inherit the
+ fill style from `set style fill`.
+
+ Syntax:
+ set object <index>
+ <object-type> <object-properties>
+ {front|back|behind} {clip|noclip}
+ {fc|fillcolor <colorspec>} {fs <fillstyle>}
+ {default} {lw|linewidth <width>}
+
+ <object-type> is either `rectangle`, `ellipse`, `circle`, or `polygon`.
+ Each object type has its own set of characteristic properties.
+
+ Setting `front` will draw the object in front of all plot elements, but
+ behind any labels that are also marked `front`. Setting `back` will place the
+ object behind all plot curves and labels. Setting `behind` will place the
+ object behind everything including the axes and `back` rectangles, thus
+ set object rectangle from screen 0,0 to screen 1,1 behind
+ can be used to provide a colored background for the entire graph or page.
+
+ By default, objects are clipped to the graph boundary unless one or more
+ vertices are given in screen coordinates. Setting `noclip` will disable
+ clipping to the graph boundary, but will still clip against the screen size.
+
+ The fill color of the object is taken from the <colorspec>. `fillcolor`
+ may be abbreviated `fc`. The fill style is taken from <fillstyle>.
+ See `colorspec` and `fillstyle`. If the keyword `default` is given,
+ these properties are inherited from the default settings at the time a plot
+ is drawn. See `set style rectangle`.
+?rectangle
+?commands set object rectangle
+?commands show object rectangle
+?set object rectangle
+?show object rectangle
+ Syntax:
+ set object <index> rectangle
+ {from <position> {to|rto} <position> |
+ center <position> size <w>,<h> |
+ at <position> size <w>,<h>}
+
+ The position of the rectangle may be specified by giving the position of two
+ diagonal corners (bottom left and top right) or by giving the position of the
+ center followed by the width and the height. In either case the positions
+ may be given in axis, graph, or screen coordinates. See `coordinates`.
+ The options `at` and `center` are synonyms.
+
+ Examples:
+ # Force the entire area enclosed by the axes to have background color cyan
+ set object 1 rect from graph 0, graph 0 to graph 1, graph 1 back
+ set object 1 rect fc rgb "cyan" fillstyle solid 1.0
+
+ # Position a red square with lower left at 0,0 and upper right at 2,3
+ set object 2 rect from 0,0 to 2,3 fc lt 1
+
+ # Position an empty rectangle (no fill) with a blue border
+ set object 3 rect from 0,0 to 2,3 fs empty border rgb "blue"
+
+ # Return fill and color to the default style but leave vertices unchanged
+ set object 2 rect default
+
+ Rectangle corners specified in screen coordinates may extend beyond the edge of
+ the current graph. Otherwise the rectangle is clipped to fit in the graph.
+
+?ellipse
+?commands set object ellipse
+?commands show object ellipse
+?set object ellipse
+?show object ellipse
+ Syntax:
+ set object <index> ellipse {at|center} <position> size <w>,<h>
+ {angle <orientation>} {units xy|xx|yy}
+ {<other-object-properties>}
+
+ The position of the ellipse is specified by giving the center followed by
+ the width and the height (actually the major and minor axes). The keywords
+ `at` and `center` are synonyms. The center position may be given in axis,
+ graph, or screen coordinates. See `coordinates`. The major and minor axis
+ lengths must be given in axis coordinates. The orientation of the ellipse
+ is specified by the angle between the horizontal axis and the major diameter
+ of the ellipse. If no angle is given, the default ellipse orientation
+ will be used instead (see `set style ellipse`). The `units` keyword
+ controls the scaling of the axes of the ellipse. `units xy` means that the
+ major axis is interpreted in terms of units along the x axis, while the
+ minor axis in that of the y axis. `units xx` means that both axes of the
+ ellipses are scaled in the units of the x axis, while `units yy` means
+ that both axes are in units of the y axis.
+ The default is `xy` or whatever `set style ellipse units` was set to.
+
+ NB: If the x and y axis scales are not equal, (e.g. `units xy` is in
+ effect) then the major/minor axis ratio will no longer be correct after
+ rotation.
+
+ Note that `set object ellipse size <2r>,<2r>` does not in general produce
+ the same result as `set object circle <r>`. The circle radius is always
+ interpreted in terms of units along the x axis, and will always produce a
+ circle even if the x and y axis scales are different and even if the aspect
+ ratio of your plot is not 1. If `units` is set to `xy`, then
+ 'set object ellipse' interprets the first <2r> in terms of x axis units
+ and the second <2r> in terms of y axis units. This will only produce a
+ circle if the x and y axis scales are identical and the plot aspect ratio
+ is 1. On the other hand, if `units` is set to `xx` or `yy`, then the
+ diameters specified in the 'set object' command will be interpreted in the
+ same units, so the ellipse will have the correct aspect ratio, and it will
+ maintain its aspect ratio even if the plot is resized.
+
+?circle
+?commands set object circle
+?commands show object circle
+?set object circle
+?show object circle
+ Syntax:
+ set object <index> circle {at|center} <position> size <radius>
+ {arc [<begin>:<end>]}
+ {<other-object-properties>}
+
+ The position of the circle is specified by giving the position of the center
+ center followed by the radius. The keywords `at` and `center` are synonyms.
+ The position and radius may be given in x-axis, graph, or canvas
+ coordinates. See `coordinates`. In all cases the radius is calculated
+ relative to the horizontal scale of the axis, graph, or canvas. Any
+ disparity between the horizontal and vertical scaling will be corrected for
+ so that the result is always a circle.
+
+ By default a full circle is drawn. The optional qualifier `arc` specifies
+ a starting angle and ending angle, in degrees, for one arc of the circle.
+ The arc is always drawn counterclockwise.
+
+?polygon
+?commands set object polygon
+?commands show object polygon
+?set object polygon
+?show object polygon
+ Syntax:
+ set object <index> polygon
+ from <position> to <position> ... {to <position>}
+ or
+ from <position> rto <position> ... {rto <position>}
+
+ The position of the polygon may be specified by giving the position of a
+ sequence of vertices. These may be given in axis, graph, or screen coordinates.
+ If relative coordinates are used (rto) then the coordinate type must match
+ that of the previous vertex.
+ See `coordinates`.
+
+ Example:
+ set object 1 polygon from 0,0 to 1,1 to 2,0
+ set object 1 fc rgb "cyan" fillstyle solid 1.0 border lt -1
+
+?commands set offsets
+?commands unset offsets
+?commands show offsets
+?set offsets
+?unset offsets
+?show offsets
+?offsets
+?nooffsets
+ Offsets provide a mechanism to put an empty boundary around the data inside
+ an autoscaled graph. The offsets only affect the x1 and y1 axes, and only in
+ 2D `plot` commands.
+
+ Syntax:
+ set offsets <left>, <right>, <top>, <bottom>
+ unset offsets
+ show offsets
+
+ Each offset may be a constant or an expression. Each defaults to 0.
+ By default, the left and right offsets are given in units of the first x axis,
+ the top and bottom offsets in units of the first y axis. Alternatively, you
+ may specify the offsets as a fraction of the total axis range by using the
+ keyword "graph". A positive offset expands the axis range in the specified
+ direction, e.g., a positive bottom offset makes ymin more negative. Negative
+ offsets, while permitted, can have unexpected interactions with autoscaling
+ and clipping. To prevent the auto-scaling from further adjusting your axis
+ ranges, it is useful to also specify "set auto fix".
+
+ Example:
+ set auto fix
+ set offsets graph 0.05, 0, 2, 2
+ plot sin(x)
+
+ This graph of sin(x) will have a y range [-3:3] because the function
+ will be autoscaled to [-1:1] and the vertical offsets are each two.
+ The x range will be [-11:10] because the default is [-10:10] and it has
+ been expanded to the left by 0.05 of that total range.
+?commands set origin
+?commands show origin
+?set origin
+?show origin
+?origin
+ The `set origin` command is used to specify the origin of a plotting surface
+ (i.e., the graph and its margins) on the screen. The coordinates are given
+ in the `screen` coordinate system (see `coordinates` for information about
+ this system).
+
+ Syntax:
+ set origin <x-origin>,<y-origin>
+?commands set output
+?commands show output
+?set output
+?show output
+?output
+?output file
+ By default, screens are displayed to the standard output. The `set output`
+ command redirects the display to the specified file or device.
+
+ Syntax:
+ set output {"<filename>"}
+ show output
+
+ The filename must be enclosed in quotes. If the filename is omitted, any
+ output file opened by a previous invocation of `set output` will be closed
+ and new output will be sent to STDOUT. (If you give the command `set output
+ "STDOUT"`, your output may be sent to a file named "STDOUT"! ["May be", not
+ "will be", because some terminals, like `x11` or `wxt`, ignore `set output`.])
+
+ When both `set terminal` and `set output` are used together, it is safest to
+ give `set terminal` first, because some terminals set a flag which is needed
+ in some operating systems. This would be the case, for example, if the
+ operating system needs to know whether or not a file is to be formatted in
+ order to open it properly.
+
+ On machines with popen functions (Unix), output can be piped through a shell
+ command if the first non-whitespace character of the filename is '|'.
+ For instance,
+
+ set output "|lpr -Plaser filename"
+ set output "|lp -dlaser filename"
+
+ On MSDOS machines, `set output "PRN"` will direct the output to the default
+ printer. On VMS, output can be sent directly to any spooled device. It is
+ also possible to send the output to DECnet transparent tasks, which allows
+ some flexibility.
+?commands set parametric
+?commands unset parametric
+?commands show parametric
+?set parametric
+?unset parametric
+?show parametric
+?parametric
+?noparametric
+ The `set parametric` command changes the meaning of `plot` (`splot`) from
+ normal functions to parametric functions. The command `unset parametric`
+ restores the plotting style to normal, single-valued expression plotting.
+
+ Syntax:
+ set parametric
+ unset parametric
+ show parametric
+
+ For 2D plotting, a parametric function is determined by a pair of parametric
+ functions operating on a parameter. An example of a 2D parametric function
+ would be `plot sin(t),cos(t)`, which draws a circle (if the aspect ratio is
+ set correctly---see `set size`). `gnuplot` will display an error message if
+ both functions are not provided for a parametric `plot`.
+
+ For 3D plotting, the surface is described as x=f(u,v), y=g(u,v), z=h(u,v).
+ Therefore a triplet of functions is required. An example of a 3D parametric
+ function would be `cos(u)*cos(v),cos(u)*sin(v),sin(u)`, which draws a sphere.
+ `gnuplot` will display an error message if all three functions are not
+ provided for a parametric `splot`.
+
+ The total set of possible plots is a superset of the simple f(x) style plots,
+ since the two functions can describe the x and y values to be computed
+ separately. In fact, plots of the type t,f(t) are equivalent to those
+ produced with f(x) because the x values are computed using the identity
+ function. Similarly, 3D plots of the type u,v,f(u,v) are equivalent to
+ f(x,y).
+
+ Note that the order the parametric functions are specified is xfunction,
+ yfunction (and zfunction) and that each operates over the common parametric
+ domain.
+
+ Also, the `set parametric` function implies a new range of values. Whereas
+ the normal f(x) and f(x,y) style plotting assume an xrange and yrange (and
+ zrange), the parametric mode additionally specifies a trange, urange, and
+ vrange. These ranges may be set directly with `set trange`, `set urange`,
+ and `set vrange`, or by specifying the range on the `plot` or `splot`
+ commands. Currently the default range for these parametric variables is
+ [-5:5]. Setting the ranges to something more meaningful is expected.
+?commands show plot
+?show plot
+ The `show plot` command shows the current plotting command as it results
+ from the last `plot` and/or `splot` and possible subsequent `replot` commands.
+
+ In addition, the `show plot add2history` command adds this current plot
+ command into the `history`. It is useful if you have used `replot` to add
+ more curves to the current plot and you want to edit the whole command now.
+?commands set pm3d
+?commands show pm3d
+?set pm3d
+?show pm3d
+?pm3d
+ pm3d is an `splot` style for drawing palette-mapped 3d and 4d data as
+ color/gray maps and surfaces. It uses an algorithm that allows plotting
+ gridded as well as non-gridded data without preprocessing, even when the data
+ scans do not have the same number of points.
+
+ Syntax (the options can be given in any order):
+ set pm3d {
+ { at <position> }
+ { interpolate <steps/points in scan, between scans> }
+ { scansautomatic | scansforward | scansbackward | depthorder }
+ { flush { begin | center | end } }
+ { ftriangles | noftriangles }
+ { clip1in | clip4in }
+ { corners2color { mean|geomean|median|min|max|c1|c2|c3|c4 } }
+ { hidden3d {<linestyle>} | nohidden3d }
+ { implicit | explicit }
+ { map }
+ }
+ show pm3d
+ unset pm3d
+
+ A pm3d color surface is drawn if the splot command specifies `with pm3d`,
+ if the data or function `style` is set to pm3d globally, or if the pm3d mode is
+ `set pm3d implicit`. In the latter two cases, the pm3d surface is draw in
+ addition to the mesh produced by the style specified in the plot command. E.g.
+ splot 'fred.dat' with lines, 'lola.dat' with lines
+ would draw both a mesh of lines and a pm3d surface for each data set.
+ If the option `explicit` is on (or `implicit` is off) only plots specified
+ by the `with pm3d` attribute are plotted with a pm3d surface, e.g.:
+ splot 'fred.dat' with lines, 'lola.dat' with pm3d
+ would plot 'fred.dat' with lines (only) and 'lola.dat' with a pm3d surface.
+
+ On gnuplot start-up, the mode is `explicit`. For historical and compatibility
+ reasons, the commands `set pm3d;` (i.e. no options) and `set pm3d at X ...`
+ (i.e. `at` is the first option) change the mode to `implicit`.
+ The command `set pm3d;` sets other options to their default state.
+
+ If you set the default data or function style to `pm3d`, e.g.:
+ set style data pm3d
+ then the options `implicit` and `explicit` have no effect.
+
+ Note that when plotting several plots, they are plotted in the order given
+ on the command line. This can be of interest especially for filled surfaces
+ which can overwrite and therefore hide part of earlier plots.
+
+ The pm3d coloring can be drawn at any or all of three different positions,
+ `top`, `bottom`, or `surface`. See `pm3d position`.
+ The following command draws three color surfaces at different altitudes:
+ set border 4095
+ set pm3d at s
+ splot 10*x with pm3d at b, x*x-y*y, x*x+y*y with pm3d at t
+
+ See also help for `set palette`, `set cbrange`, `set colorbox`,
+ and definitely the demo file `demo/pm3d.dem`.
+?pm3d algorithm
+
+ Let us first describe how a map/surface is drawn. The input data come from an
+ evaluated function or from an `splot data file`. Each surface consists of a
+ sequence of separate scans (isolines). The pm3d algorithm fills the region
+ between two neighbouring points in one scan with another two points in the
+ next scan by a gray (or color) according to z-values (or according to an
+ additional 'color' column, see help for `using`) of these 4 corners; by default
+ the 4 corner values are averaged, but this can be changed by the option
+ `corners2color`. In order to get a reasonable surface, the neighbouring scans
+ should not cross and the number of points in the neighbouring scans should not
+ differ too much; of course, the best plot is with scans having same number of
+ points. There are no other requirements (e.g. the data need not be gridded).
+ Another advantage is that the pm3d algorithm does not draw anything outside of
+ the input (measured or calculated) region.
+
+ Surface coloring works with the following input data:
+
+ 1. splot of function or of data file with one or three data columns: The
+ gray/color scale is obtained by mapping the averaged (or `corners2color`)
+ z-coordinate of the four corners of the above-specified quadrangle into the
+ range [min_color_z,max_color_z] of `zrange` or `cbrange` providing a gray value
+ in the range [0:1]. This value can be used directly as the gray for gray maps.
+ The normalized gray value can be further mapped into a color---see `set palette`
+ for the complete description.
+
+ 2. splot of data file with two or four data columns: The gray/color value is
+ obtained by using the last-column coordinate instead of the z-value, thus
+ allowing the color and the z-coordinate be mutually independent. This can be
+ used for 4d data drawing.
+
+ Other notes:
+
+ 1. The term 'scan' referenced above is used more among physicists than the
+ term 'iso_curve' referenced in gnuplot documentation and sources. You measure
+ maps recorded one scan after another scan, that's why.
+
+ 2. The 'gray' or 'color' scale is a linear mapping of a continuous variable
+ onto a smoothly varying palette of colors. The mapping is shown in a
+ rectangle next to the main plot. This documentation refers to this as a
+ "colorbox", and refers to the indexing variable as lying on the colorbox axis.
+ See `set colorbox`, `set cbrange`.
+
+ 3. To use pm3d coloring to generate a two-dimensional plot rather than a 3D
+ surface, use `set view map` or `set pm3d map`.
+?pm3d position
+ Color surface can be drawn at the base or top (then it is a gray/color planar
+ map) or at z-coordinates of surface points (gray/color surface). This is
+ defined by the `at` option with a string of up to 6 combinations of `b`, `t`
+ and `s`. For instance, `at b` plots at bottom only, `at st` plots firstly
+ surface and then top map, while `at bstbst` will never by seriously used.
+
+ Colored quadrangles are plotted one after another. When plotting surfaces
+ (`at s`), the later quadrangles overlap (overdraw) the previous ones.
+ (Gnuplot is not virtual reality tool to calculate intersections of filled
+ polygon meshes.) You may try to switch between `scansforward` and
+ `scansbackward` to force the first scan of the data to be plotted first or
+ last. The default is `scansautomatic` where gnuplot makes a guess about scans
+ order. On the other hand, the `depthorder` option completely reorders the
+ quadrangles. The rendering is performed after a depth sorting, which allows to
+ visualize even complicated surfaces; see `pm3d depthorder` for more details.
+?pm3d scanorder
+?pm3d depthorder
+?pm3d flush
+?depthorder
+ By default the quadrangles making up a pm3d solid surface are rendered in the
+ order they are encountered along the surface grid points. This order may be
+ controlled by the options `scansautomatic`|`scansforward`|`scansbackward`.
+ These scan options are not in general compatible with hidden-surface removal.
+
+ If two successive scans do not have same number of points, then it has to be
+ decided whether to start taking points for quadrangles from the beginning of
+ both scans (`flush begin`), from their ends (`flush end`) or to center them
+ (`flush center`). Note, that `flush (center|end)` are incompatible with
+ `scansautomatic`: if you specify `flush center` or `flush end` and
+ `scansautomatic` is set, it is silently switched to `scansforward`.
+
+ If two subsequent scans do not have the same number of points, the option
+ `ftriangles` specifies whether color triangles are drawn at the scan tail(s)
+ where there are not enough points in either of the scan. This can be used to
+ draw a smooth map boundary.
+
+ Gnuplot does not do true hidden surface removal for solid surfaces, but often
+ it is sufficient to render the component quadrangles in order from furthest
+ to closest. This mode may be selected using the options
+ set pm3d depthorder hidden3d
+ The `depthorder` option orders the solid quadrangles; the `hidden3d` option
+ similarly orders the bounding lines (if drawn). Note that the global option
+ `set hidden3d` does not affect pm3d surfaces.
+
+?pm3d clipping
+ Clipping with respect to x, y coordinates of quadrangles can be done in two
+ ways. `clip1in`: all 4 points of each quadrangle must be defined and at least
+ 1 point of the quadrangle must lie in the x and y ranges. `clip4in`: all 4
+ points of each quadrangle must lie in the x and y ranges.
+
+?pm3d color_assignment
+ `3 columns of data (x,y,z)`:
+
+ The coloring setup as well as the color box drawing are determined by
+ `set palette`. There can be only one palette for the current plot. Drawing
+ of several surfaces with different palettes can be achieved by `multiplot`
+ with fixed `origin` and `size`; don't forget to use `set palette maxcolors`
+ when your terminal is running out of available colors.
+
+ There is a single gray/color value associated to each drawn pm3d quadrangle
+ (no smooth color change among vertices). The value is calculated from
+ z-coordinates from the surrounding corners according to `corners2color
+ <option>`. The options 'mean' (default), 'geomean' and 'median' produce
+ various kinds of surface color smoothing, while options 'min' and 'max' choose
+ minimal or maximal value, respectively. This may not be desired for pixel
+ images or for maps with sharp and intense peaks, in which case the options
+ 'c1', 'c2', 'c3' or 'c4' can be used instead to assign the quadrangle color
+ based on the z-coordinate of only one corner. Some experimentation may be
+ needed to determine which corner corresponds to 'c1', as the orientation
+ depends on the drawing direction. Because the pm3d algorithm does not extend
+ the colored surface outside the range of the input data points, the 'c<j>'
+ coloring options will result in pixels along two edges of the grid not
+ contributing to the color of any quadrangle. For example, applying the pm3d
+ algorithm to the 4x4 grid of data points in script `demo/pm3d.dem` (please have
+ a look) produces only (4-1)x(4-1)=9 colored rectangles.
+
+ `4 columns of data (x,y,z,color)`:
+
+ If a fourth column of data is provided, it is normally interpreted as a
+ separate palette-mapped gray value. The coloring of individual quadrangles
+ works as above, except that the color value is distinct from the z value.
+ As a separate coloring option, the fourth data column may provide instead
+ an RGB color. See `rgbcolor variable`. In this case the plotting command
+ must be
+
+ splot ... using 1:2:3:4 with pm3d lc rgb variable
+
+ Another drawing algorithm, which would draw quadrangles around a given node
+ by taking corners from averaged (x,y)-coordinates of its surrounding 4 nodes
+ while using node's color, could be implemented in the future. This is already
+ done for drawing images (2D grids) via `image` and `rgbimage` styles.
+
+ Notice that ranges of z-values and color-values for surfaces are adjustable
+ independently by `set zrange`, `set cbrange`, as well as `set log` for z or
+ cb. Maps can be adjusted by the cb-axis only; see also `set view map` and
+ `set colorbox`.
+?set pm3d hidden3d
+?pm3d hidden3d
+ The option `set pm3d hidden3d` draws the bounding lines of each quadrangle
+ at the same time that the quadrangle itself is drawn. Normally it is used in
+ conjunction with the `depthorder` option to achieve an approximation to true
+ hidden line removal. This is far more efficient than using the command
+ `set hidden3d`. The command takes an optional linestyle controlling the
+ appearance of the bounding lines. If the linestyle parameter is negative,
+ or omitted, then the line properties given in the plot command are used.
+ Example of recommended usage:
+
+ set pm3d at s hidden3d depthorder
+ unset hidden3d
+ unset surf
+ splot x*x+y*y linecolor rgb "black" linewidth 0.5
+
+?set pm3d interpolate
+?pm3d interpolate
+ The option `interpolate m,n` will interpolate grid points into a finer mesh,
+ and color each quadrangle appropriately. For data files, this will smoothen
+ the color surface, and enhance spikes in a color surface. For functions,
+ interpolation makes little sense, except to trade off precision for memory.
+ It would usually make more sense to use `samples` and `isosamples` when
+ working with functions. For positive m and n, each quadrangle or triangle
+ is interpolated m-times and n-times in the respective direction. For negative
+ m and n, the interpolation frequency is chosen so that there will be at least
+ |m| and |n| points drawn; you can consider this as a special gridding function.
+ Zeros, i.e. `interpolate 0,0`, will automatically choose an optimal number of
+ interpolated surface points.
+?pm3d deprecated_options
+ There used to be an option {transparent|solid} to this command. Now
+ you get the same effect from `set grid {front|layerdefault}`, respectively.
+
+ The command `set pm3d map` is equivalent to `set pm3d at b`; `set view map`;
+ `set style data pm3d`; `set style func pm3d`;.
+ It is used for backwards compatibility, when `set view map` was not available.
+ Take care that you properly use `zrange` and `cbrange` for input data point
+ filtering and color range scaling, respectively; and also `set (no)surface`
+ seems to have a (side?) effect.
+?commands set palette
+?commands show palette
+?set palette
+?show palette
+?palette
+ Palette is a color storage for use by `pm3d`, filled color contours or
+ polygons, color histograms, color gradient background, and whatever it is
+ or it will be implemented... Here it stands for a palette of smooth
+ "continuous" colors or grays, but let's call it just a palette.
+
+ Color palettes require terminal entries for filled color polygons and
+ palettes of smooth colors, are currently available for terminals listed in
+ help for `set pm3d`. The range of color values are adjustable independently by
+ `set cbrange` and `set log cb`. The whole color palette is
+ visualized in the `colorbox`.
+
+ Syntax:
+ set palette
+ set palette {
+ { gray | color }
+ { gamma <gamma> }
+ { rgbformulae <r>,<g>,<b>
+ | defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }
+ | file '<filename>' {datafile-modifiers}
+ | functions <R>,<G>,<B>
+ }
+ { cubehelix {start <val>} {cycles <val>} {saturation <val>} }
+ { model { RGB | HSV | CMY | YIQ | XYZ } }
+ { positive | negative }
+ { nops_allcF | ps_allcF }
+ { maxcolors <maxcolors> }
+ }
+ show palette
+ show palette palette <n> {{float | int}}
+ show palette gradient
+ show palette fit2rgbformulae
+ show palette rgbformulae
+ show colornames
+
+ `set palette` (i.e. without options) sets up the default values.
+ Otherwise, the options can be given in any order.
+ `show palette` shows the current palette properties.
+
+ `show palette gradient` displays the gradient defining the palette (if
+ appropriate). `show palette rgbformulae` prints the available fixed gray -->
+ color transformation formulae. `show colornames` prints the known color names.
+
+ `show palette palette <n>` prints to the screen or to the file given by
+ `set print` a table of RGB triplets calculated for the current palette settings
+ and a palette having <n> discrete colors. The default wide table can be
+ limited to 3 columns of r,g,b float values [0..1] or integer values [0..255]
+ by options float or int, respectively. This way, the current gnuplot color
+ palette can be loaded into other imaging applications, for example Octave.
+ Additionally to this textual list of RGB table, you can use the `test palette`
+ command to plot the R,G,B profiles for the current palette.
+
+ The following options determine the coloring properties.
+
+ Figure using this palette can be `gray` or `color`. For instance, in `pm3d`
+ color surfaces the gray of each small spot is obtained by mapping the averaged
+ z-coordinate of the 4 corners of surface quadrangles into the range
+ [min_z,max_z] providing range of grays [0:1]. This value can be used directly
+ as the gray for gray maps. The color map requires a transformation gray -->
+ (R,G,B), i.e. a mapping [0:1] --> ([0:1],[0:1],[0:1]).
+
+ Basically two different types of mappings can be used: Analytic formulae to
+ convert gray to color, or discrete mapping tables which are interpolated.
+ `palette rgbformulae` and `palette functions` use analytic formulae whereas
+ `palette defined` and `palette file` use interpolated tables. `palette
+ rgbformulae` reduces the size of postscript output to a minimum.
+
+ The command `show palette fit2rgbformulae` finds the best matching `set
+ palette rgbformulae` for the current `set palette`. Naturally, it makes sense
+ to use it for non-rgbformulae palettes. This command can be found useful
+ mainly for external programs using the same rgbformulae definition of palettes
+ as gnuplot, like zimg (
+ http://zimg.sourceforge.net
+ ).
+
+ `set palette gray` switches to a gray only palette. `set palette rgbformulae`,
+ `set palette defined`, `set palette file` and `set palette functions` switch
+ to a color mapping. `set palette color` is an easy way to switch back from the
+ gray palette to the last color mapping.
+
+ Automatic gamma correction via `set palette gamma <gamma>` can be done for
+ gray maps (`set palette gray`) and for the `cubehelix` color palette schemes.
+ Gamma = 1 produces a linear ramp of intensity. See `test palette`.
+
+ Many terminals support only discrete number of colors (e.g. 256 colors in gif).
+ After the default gnuplot linetype colors are allocated, the rest of the
+ available colors are by default reserved for pm3d. Thus a multiplot using
+ multiple palettes could fail because the first palette has used all the
+ available color positions. You can mitigate this limitation by using
+ `set palette maxcolors <N>` with a reasonably small value of N.
+ This option causes N discrete colors to be selected from a continuous palette
+ sampled at equally spaced intervals. If you want unequal spacing of N
+ discrete colors, use `set palette defined` instead of a single continuous
+ palette.
+
+ RGB color space might not be the most useful color space to work in. For that
+ reason you may change the color space with `model` to one of `RGB`, `HSV`,
+ `CMY`, `YIQ` and `XYZ`. Using color names for `set palette defined` tables
+ and a color space other than RGB will result in funny colors. All explanation
+ have been written for RGB color space, so please note, that `R` can be `H`,
+ `C`, `Y`, or `X`, depending on the actual color space (`G` and `B`
+ accordingly).
+
+ All values for all color spaces are limited to [0,1].
+
+ RGB stands for Red, Green and Blue; CMY stands for Cyan, Magenta and Yellow;
+ HSV stands for Hue, Saturation, and Value; YIQ is the color model used by
+ the U.S. Commercial Color Television Broadcasting, it is basically an RGB
+ recoding with downward compatibility for black and white television;
+ XYZ are the three primary colors of the color model defined by the 'Commission
+ Internationale de l'Eclairage' (CIE).
+ For more information on color models see:
+ http://en.wikipedia.org/wiki/Color_space
+
+?commands set palette rgbformulae
+?set palette rgbformulae
+?palette rgbformulae
+?rgbformulae
+ For `rgbformulae` three suitable mapping functions have
+ to be chosen. This is done via `rgbformulae <r>,<g>,<b>`. The available
+ mapping functions are listed by `show palette rgbformulae`. Default is
+ `7,5,15`, some other examples are `3,11,6`, `21,23,3` or `3,23,21`. Negative
+ numbers, like `3,-11,-6`, mean inverted color (i.e. 1-gray passed into the
+ formula, see also `positive` and `negative` options below).
+
+ Some nice schemes in RGB color space
+ 7,5,15 ... traditional pm3d (black-blue-red-yellow)
+ 3,11,6 ... green-red-violet
+ 23,28,3 ... ocean (green-blue-white); try also all other permutations
+ 21,22,23 ... hot (black-red-yellow-white)
+ 30,31,32 ... color printable on gray (black-blue-violet-yellow-white)
+ 33,13,10 ... rainbow (blue-green-yellow-red)
+ 34,35,36 ... AFM hot (black-red-yellow-white)
+
+ A full color palette in HSV color space
+ 3,2,2 ... red-yellow-green-cyan-blue-magenta-red
+
+ Please note that even if called `rgbformulae` the formulas might actually
+ determine the <H>,<S>,<V> or <X>,<Y>,<Z> or ... color components as usual.
+
+ Use `positive` and `negative` to invert the figure colors.
+
+ Note that it is possible to find a set of the best matching rgbformulae for any
+ other color scheme by the command
+ show palette fit2rgbformulae
+?commands set palette defined
+?set palette defined
+?palette defined
+ Gray-to-rgb mapping can be manually set by use of `palette defined`:
+ A color gradient is defined and used to give the rgb values. Such a gradient
+ is a piecewise linear mapping from gray values in [0,1] to the RGB space
+ [0,1]x[0,1]x[0,1]. You must specify the gray values and the corresponding RGB
+ values between which linear interpolation will be done.
+
+ Syntax:
+ set palette defined { ( <gray1> <color1> {, <grayN> <colorN>}... ) }
+
+ <grayX> are gray values which are mapped to [0,1] and <colorX> are the
+ corresponding rgb colors. The color can be specified in three different
+ ways:
+
+ <color> := { <r> <g> <b> | '<color-name>' | '#rrggbb' }
+
+ Either by three numbers (each in [0,1]) for red, green and blue, separated by
+ whitespace, or the name of the color in quotes or X style color specifiers
+ also in quotes. You may freely mix the three types in a gradient definition,
+ but the named color "red" will be something strange if RGB is not selected
+ as color space. Use `show colornames` for a list of known color names.
+
+ Please note, that even if written as <r>, this might actually be the
+ <H> component in HSV color space or <X> in CIE-XYZ space, or ...
+ depending on the selected color model.
+
+ The <gray> values have to form an ascending sequence of real numbers; the
+ sequence will be automatically rescaled to [0,1].
+
+ `set palette defined` (without a gradient definition in braces) switches to
+ RGB color space and uses a preset full-spectrum color gradient.
+ Use `show palette gradient` to display the gradient.
+
+ Examples:
+
+ To produce a gray palette (useless but instructive) use:
+ set palette model RGB
+ set palette defined ( 0 "black", 1 "white" )
+
+ To produce a blue yellow red palette use (all equivalent):
+ set palette defined ( 0 "blue", 1 "yellow", 2 "red" )
+ set palette defined ( 0 0 0 1, 1 1 1 0, 2 1 0 0 )
+ set palette defined ( 0 "#0000ff", 1 "#ffff00", 2 "#ff0000" )
+
+ To produce some rainbow-like palette use:
+ set palette defined ( 0 "blue", 3 "green", 6 "yellow", 10 "red" )
+
+ Full color spectrum within HSV color space:
+ set palette model HSV
+ set palette defined ( 0 0 1 1, 1 1 1 1 )
+ set palette defined ( 0 0 1 0, 1 0 1 1, 6 0.8333 1 1, 7 0.8333 0 1)
+
+ Approximate the default palette used by MATLAB:
+ set pal defined (1 '#00008f', 8 '#0000ff', 24 '#00ffff', \
+ 40 '#ffff00', 56 '#ff0000', 64 '#800000')
+
+ To produce a palette with only a few, equally-spaced colors:
+ set palette model RGB maxcolors 4
+ set palette defined ( 0 "yellow", 1 "red" )
+
+ 'Traffic light' palette (non-smooth color jumps at gray = 1/3 and 2/3).
+ set palette model RGB
+ set palette defined (0 "dark-green", 1 "green", \
+ 1 "yellow", 2 "dark-yellow", \
+ 2 "red", 3 "dark-red" )
+
+?commands set palette functions
+?set palette functions
+?palette functions
+ Use `set palette functions <Rexpr>, <Gexpr>, <Bexpr>` to define three formulae
+ for the R(gray), G(gray) and B(gray) mapping. The three formulae may depend
+ on the variable `gray` which will take values in [0,1] and should also
+ produce values in [0,1].
+ Please note that <Rexpr> might be a formula for the H-value if HSV color
+ space has been chosen (same for all other formulae and color spaces).
+
+ Examples:
+
+ To produce a full color palette use:
+ set palette model HSV functions gray, 1, 1
+
+ A nice black to gold palette:
+ set palette model XYZ functions gray**0.35, gray**0.5, gray**0.8
+
+ A gamma-corrected black and white palette
+ gamma = 2.2
+ color(gray) = gray**(1./gamma)
+ set palette model RGB functions color(gray), color(gray), color(gray)
+
+?commands set palette cubehelix
+?set palette cubehelix
+?cubehelix
+ The "cubehelix" option defines a family of palettes in which color (hue) varies
+ along the standard color wheel while at the same time the net intensity
+ increases monotonically as the gray value goes from 0 to 1.
+ D A Green (2011) http://arxiv.org/abs/1108.5083
+ `start` defines the starting point along the color wheel in radians.
+ `cycles` defines how many color wheel cycles span the palette range.
+ Larger values of `saturation` produce more saturated color; saturation > 1
+ may lead to clipping of the individual RGB components and to intensity
+ becoming non-monotonic. The palette is also affected by `set palette gamma`.
+ The default values are
+ set palette cubehelix start 0.5 cycles -1.5 saturation 1
+ set palette gamma 1.5
+
+?commands set palette file
+?set palette file
+?palette file
+ `set palette file` is basically a `set palette defined (<gradient>)` where
+ <gradient> is read from a datafile. Either 4 columns (gray,R,G,B) or
+ just three columns (R,G,B) have to be selected via the `using` data file
+ modifier. In the three column case, the line number will be used as gray.
+ The gray range is automatically rescaled to [0,1]. The file is read as a
+ normal data file, so all datafile modifiers can be used.
+ Please note, that `R` might actually be e.g. `H` if HSV color space is
+ selected.
+
+ As usual <filename> may be `'-'` which means that the data follow the command
+ inline and are terminated by a single `e` on a line of its own.
+
+ Use `show palette gradient` to display the gradient.
+
+ Examples:
+
+ Read in a palette of RGB triples each in range [0,255]:
+ set palette file 'some-palette' using ($1/255):($2/255):($3/255)
+
+ Equidistant rainbow (blue-green-yellow-red) palette:
+ set palette model RGB file "-"
+ 0 0 1
+ 0 1 0
+ 1 1 0
+ 1 0 0
+ e
+
+ Binary palette files are supported as well, see `binary general`. Example:
+ put 64 triplets of R,G,B doubles into file palette.bin and load it by
+ set palette file "palette.bin" binary record=64 using 1:2:3
+
+
+?commands set palette gamma-correction
+?set palette gamma-correction
+?palette gamma-correction
+?gamma-correction
+ For gray mappings gamma correction can be turned on by `set palette gamma
+ <gamma>`. <gamma> defaults to 1.5 which is quite suitable for most
+ terminals.
+
+ The gamma correction is applied to the cubehelix color palette family, but not
+ to other palette coloring schemes. However, you may easily implement gamma
+ correction for explicit color functions.
+
+ Example:
+ set palette model RGB
+ set palette functions gray**0.64, gray**0.67, gray**0.70
+
+ To use gamma correction with interpolated gradients specify intermediate
+ gray values with appropriate colors. Instead of
+
+ set palette defined ( 0 0 0 0, 1 1 1 1 )
+
+ use e.g.
+
+ set palette defined ( 0 0 0 0, 0.5 .73 .73 .73, 1 1 1 1 )
+
+ or even more intermediate points until the linear interpolation fits the
+ "gamma corrected" interpolation well enough.
+
+?commands set palette postscript
+?set palette postscript
+ In order to reduce the size of postscript files, the gray value and not all
+ three calculated r,g,b values are written to the file. Therefore the
+ analytical formulae are coded directly in the postscript language as a header
+ just before the pm3d drawing, see /g and /cF definitions. Usually, it makes
+ sense to write therein definitions of only the 3 formulae used. But for
+ multiplot or any other reason you may want to manually edit the
+ transformations directly in the postscript file. This is the default option
+ `nops_allcF`. Using the option `ps_allcF` writes postscript definitions of
+ all formulae. This you may find interesting if you want to edit the
+ postscript file in order to have different palettes for different surfaces
+ in one graph. Well, you can achieve this functionality by `multiplot` with
+ fixed `origin` and `size`.
+
+ If pm3d map has been plotted from gridded or almost regular data with an
+ output to a postscript file, then it is possible to reduce the size of this
+ postscript file up to at about 50% by the enclosed awk script
+ `pm3dCompress.awk`. This you may find interesting if you intend to keep the
+ file for including it into your publication or before downloading a very large
+ file into a slow printer. Usage:
+ awk -f pm3dCompress.awk thefile.ps >smallerfile.ps
+
+ If pm3d map has been plotted from rectangular gridded data with an output
+ to a postscript file, then it is possible to reduce the file size even more
+ by the enclosed awk script `pm3dConvertToImage.awk`. Usage:
+ awk -f pm3dConvertToImage.awk <thefile.ps >smallerfile.ps
+
+ You may manually change the postscript output from gray to color and vice
+ versa and change the definition of <maxcolors>.
+?commands set pointintervalbox
+?set pointintervalbox
+?pointintervalbox
+ The `pointinterval` property of line types is used in plot style `linespoints`.
+ A negative value of pointinterval, e.g. -N, means that point symbols are drawn
+ only for every Nth point, and that a box (actually circle) behind each point
+ symbol is blanked out by filling with the background color. The command
+ `set pointintervalbox` controls the radius of this blanked-out region.
+ It is a multiplier for the default radius, which is equal to the point size.
+?commands set pointsize
+?commands show pointsize
+?set pointsize
+?show pointsize
+?pointsize
+ The `set pointsize` command scales the size of the points used in plots.
+
+ Syntax:
+ set pointsize <multiplier>
+ show pointsize
+
+ The default is a multiplier of 1.0. Larger pointsizes may be useful to
+ make points more visible in bitmapped graphics.
+
+ The pointsize of a single plot may be changed on the `plot` command.
+ See `plot with` for details.
+
+ Please note that the pointsize setting is not supported by all terminal
+ types.
+?commands set polar
+?commands unset polar
+?commands show polar
+?set polar
+?unset polar
+?show polar
+?polar
+?nopolar
+ The `set polar` command changes the meaning of the plot from rectangular
+ coordinates to polar coordinates.
+
+ Syntax:
+ set polar
+ unset polar
+ show polar
+
+ In polar coordinates, the dummy variable (t) is an angle. The default range
+ of t is [0:2*pi], or, if degree units have been selected, to [0:360] (see
+ `set angles`).
+
+ The command `unset polar` changes the meaning of the plot back to the default
+ rectangular coordinate system.
+
+ The `set polar` command is not supported for `splot`s. See the `set mapping`
+ command for similar functionality for `splot`s.
+
+ While in polar coordinates the meaning of an expression in t is really
+ r = f(t), where t is an angle of rotation. The trange controls the domain
+ (the angle) of the function. The r, x and y ranges control the extent of the
+ graph in the x and y directions. Each of these ranges, as well as the
+ rrange, may be autoscaled or set explicitly. For details, see `set rrange`
+ and `set xrange`.
+
+ Example:
+ set polar
+ plot t*sin(t)
+ set trange [-2*pi:2*pi]
+ set rrange [0:3]
+ plot t*sin(t)
+
+ The first `plot` uses the default polar angular domain of 0 to 2*pi. The
+ radius and the size of the graph are scaled automatically. The second `plot`
+ expands the domain, and restricts the size of the graph to the area within
+ 3 units of the origin. This has the effect of limiting x and y to [-3:3].
+
+ You may want to `set size square` to have `gnuplot` try to make the aspect
+ ratio equal to unity, so that circles look circular.
+ See also
+ polar demos (polar.dem)
+ and
+ polar data plot (poldat.dem).
+?commands set print
+?commands show print
+?set print
+?show print
+ The `set print` command redirects the output of the `print` command to a file.
+
+ Syntax:
+ set print
+ set print "-"
+ set print "<filename>"
+ set print "<filename>" append
+ set print "|<shell_command>"
+
+ Without "<filename>", the output file is restored to <STDERR>. The <filename>
+ "-" means <STDOUT>. The `append` flag causes the file to be opened in append
+ mode. A <filename> starting with "|" is opened as a pipe to the
+ <shell_command> on platforms that support piping.
+?commands set psdir
+?commands show psdir
+?set psdir
+?show psdir
+?psdir
+ The `set psdir <directory>` command controls the search path used by the
+ postscript terminal to find prologue.ps and character encoding files.
+ You can use this mechanism to switch between different sets of
+ locally-customized prolog files.
+ The search order is
+ 1) The directory specified by `set psdir`, if any
+ 2) The directory specified by environmental variable GNUPLOT_PS_DIR
+ 3) A built-in header or one from the default system directory
+ 4) Directories set by `set loadpath`
+?commands set raxis
+?raxis
+ The commands `set raxis` and `unset raxis` toggle whether the polar axis
+ is drawn separately from grid lines and the x axis. If the minimum of the
+ current rrange is non-zero (and not autoscaled), then a white circle is drawn
+ at the center of the polar plot to indicate that the plot lines and axes do
+ not reach 0. The axis line is drawn using the same line type as the plot
+ border. See `polar`, `rrange`, `rtics`, `set grid`.
+?commands set rmargin
+?set rmargin
+?rmargin
+ The command `set rmargin` sets the size of the right margin.
+ Please see `set margin` for details.
+?commands set rrange
+?commands show rrange
+?set rrange
+?show rrange
+?rrange
+ The `set rrange` command sets the range of the radial coordinate for a graph
+ in polar mode. This has the effect of setting both xrange and yrange as well.
+ The resulting xrange and yrange are both [-(rmax-rmin) : +(rmax-rmin)].
+ However if you later change the x or y range, for example by zooming, this does
+ not change rrange, so data points continue to be clipped against rrange.
+ Autoscaling of rmin always results in rmin = 0.
+?commands set rtics
+?commands show rtics
+?set rtics
+?show rtics
+?rtics
+ The `set rtics` command places tics along the polar axis. These will only be
+ shown in polar plot mode. The tics and labels are drawn to the right of the
+ origin. The `mirror` keyword causes them to be drawn also to the left of the
+ origin. See `polar`, and see `set xtics` for discussion of other keywords.
+?commands set samples
+?commands show samples
+?set samples
+?show samples
+?samples
+ The sampling rate of functions, or for interpolating data, may be changed
+ by the `set samples` command.
+
+ Syntax:
+ set samples <samples_1> {,<samples_2>}
+ show samples
+
+ By default, sampling is set to 100 points. A higher sampling rate will
+ produce more accurate plots, but will take longer. This parameter has no
+ effect on data file plotting unless one of the interpolation/approximation
+ options is used. See `plot smooth` re 2D data and `set cntrparam` and
+ `set dgrid3d` re 3D data.
+
+ When a 2D graph is being done, only the value of <samples_1> is relevant.
+
+ When a surface plot is being done without the removal of hidden lines, the
+ value of samples specifies the number of samples that are to be evaluated for
+ the isolines. Each iso-v line will have <sample_1> samples and each iso-u
+ line will have <sample_2> samples. If you only specify <samples_1>,
+ <samples_2> will be set to the same value as <samples_1>. See also
+ `set isosamples`.
+?commands set size
+?commands show size
+?set size
+?show size
+?size
+?aspect ratio
+?set size square
+?set size ratio
+?ratio
+ Syntax:
+ set size {{no}square | ratio <r> | noratio} {<xscale>,<yscale>}
+ show size
+
+ The <xscale> and <yscale> values are scale factors for the size of the plot,
+ which includes the graph, labels, and margins.
+
+ Important note:
+ 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.
+ In version 4.6 almost all terminals now follow the following convention:
+
+ `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.
+
+ `ratio` causes `gnuplot` to try to create a graph with an aspect ratio of <r>
+ (the ratio of the y-axis length to the x-axis length) within the portion of
+ the plot specified by <xscale> and <yscale>.
+
+ The meaning of a negative value for <r> is different. If <r>=-1, gnuplot
+ tries to set the scales so that the unit has the same length on both the x
+ and y axes. This is equivalent to `set view equal xy`. See `set view equal`.
+ If <r>=-2, the unit on y has twice the length of the unit on x, and so on.
+
+ The success of `gnuplot` in producing the requested aspect ratio depends on
+ the terminal selected. The graph area will be the largest rectangle of
+ aspect ratio <r> that will fit into the specified portion of the output
+ (leaving adequate margins, of course).
+
+ `square` is a synonym for `ratio 1`.
+
+ Both `noratio` and `nosquare` return the graph to the default aspect ratio
+ of the terminal, but do not return <xscale> or <yscale> to their default
+ values (1.0).
+
+ `ratio` and `square` have no effect on 3D plots, but do affect 3D projections
+ created using `set view map`. See also `set view equal`, which forces
+ the x and y axes of a 3D onto the same scale.
+
+ Examples:
+
+ To set the size so that the plot fills the available canvas:
+ set size 1,1
+
+ To make the graph half size and square use:
+ set size square 0.5,0.5
+
+ To make the graph twice as high as wide use:
+ set size ratio 2
+
+?set style
+?show style
+?unset style
+ Default plotting styles are chosen with the `set style data` and
+ `set style function` commands. See `plot with` for information about how to
+ override the default plotting style for individual functions and data sets.
+ See `plotting styles` for a complete list of styles.
+
+ Syntax:
+ set style function <style>
+ set style data <style>
+ show style function
+ show style data
+
+ Default styles for specific plotting elements may also be set.
+
+ Syntax:
+ set style arrow <n> <arrowstyle>
+ set style fill <fillstyle>
+ set style histogram <histogram style options>
+ set style line <n> <linestyle>
+
+ If `gnuplot` was built with the support of objects, then the following
+ options are also available:
+
+ Syntax:
+ set style rectangle <object options> <linestyle> <fillstyle>
+ set style circle radius <size> {clip|noclip}
+ set style ellipse size <size> units {xy|xx|yy} {clip|noclip}
+
+?commands set style arrow
+?commands unset style arrow
+?commands show style arrow
+?set style arrow
+?unset style arrow
+?show style arrow
+?arrowstyle
+ Each terminal has a default set of arrow and point types, which can be seen
+ by using the command `test`. `set style arrow` defines a set of arrow types
+ and widths and point types and sizes so that you can refer to them later by
+ an index instead of repeating all the information at each invocation.
+
+ Syntax:
+ set style arrow <index> default
+ set style arrow <index> {nohead | head | heads}
+ {size <length>,<angle>{,<backangle>}}
+ {filled | empty | nofilled}
+ {front | back}
+ { {linestyle | ls <line_style>}
+ | {linetype | lt <line_type>}
+ {linewidth | lw <line_width} }
+ unset style arrow
+ show style arrow
+
+ <index> is an integer that identifies the arrowstyle.
+
+ If `default` is given all arrow style parameters are set to their default
+ values.
+
+ If the linestyle <index> already exists, only the given parameters are
+ changed while all others are preserved. If not, all undefined values are
+ set to the default values.
+
+ Specifying `nohead` produces arrows drawn without a head---a line segment.
+ This gives you yet another way to draw a line segment on the plot. By
+ default, arrows have one head. Specifying `heads` draws arrow heads on both
+ ends of the line.
+
+ Head size can be controlled by `size <length>,<angle>` or
+ `size <length>,<angle>,<backangle>`, where `<length>` defines length of each
+ branch of the arrow head and `<angle>` the angle (in degrees) they make with
+ the arrow. `<Length>` is in x-axis units; this can be changed by `first`,
+ `second`, `graph`, `screen`, or `character` before the <length>; see
+ `coordinates` for details. `<Backangle>` only takes effect when `filled`
+ or `empty` is also used. Then, `<backangle>` is the angle (in degrees) the
+ back branches make with the arrow (in the same direction as `<angle>`).
+ The `fig` terminal has a restricted backangle function. It supports three
+ different angles. There are two thresholds: Below 70 degrees, the arrow head
+ gets an indented back angle. Above 110 degrees, the arrow head has an acute
+ back angle. Between these thresholds, the back line is straight.
+
+ Specifying `filled` produces filled arrow heads (if heads are used).
+ Filling is supported on filled-polygon capable terminals, see help of `pm3d`
+ for their list, otherwise the arrow heads are closed but not filled.
+ The same result (closed but not filled arrow head) is reached by specifying
+ `empty`. Further, filling and outline is obviously not supported on
+ terminals drawing arrows by their own specific routines, like `metafont`,
+ `metapost`, `latex` or `tgif`.
+
+ The line style may be selected from a user-defined list of line styles
+ (see `set style line`) or may be defined here by providing values for
+ `<line_type>` (an index from the default list of styles) and/or
+ `<line_width>` (which is a multiplier for the default width).
+
+ Note, however, that if a user-defined line style has been selected, its
+ properties (type and width) cannot be altered merely by issuing another
+ `set style arrow` command with the appropriate index and `lt` or `lw`.
+
+ If `front` is given, the arrows are written on top of the graphed data. If
+ `back` is given (the default), the arrow is written underneath the graphed
+ data. Using `front` will prevent a arrow from being obscured by dense data.
+
+ Examples:
+
+ To draw an arrow without an arrow head and double width, use:
+ set style arrow 1 nohead lw 2
+ set arrow arrowstyle 1
+
+ See also `set arrow` for further examples.
+
+?commands set style boxplot
+?commands unset style boxplot
+?commands show style boxplot
+?set style boxplot
+?unset style boxplot
+?show style boxplot
+ The `set style boxplot` command allows you to change the layout of plots
+ created using the `boxplot` plot style.
+
+ Syntax:
+ set style boxplot {range <r> | fraction <f>}
+ {{no}outliers} {pointtype <p>}
+ {candlesticks | financebars}
+ {separation <x>}
+ {labels off | auto | x | x2}
+ {sorted | unsorted}
+
+ The box in the boxplot always spans the range of values from the first
+ quartile to the third quartile of the data points. The limit of the whiskers
+ that extend from the box can be controlled in two different ways. By default
+ the whiskers extend from each end of the box for a range equal to 1.5 times
+ the interquartile range (i.e. the vertical height of the box proper).
+ Each whisker is truncated back toward the median so that it terminates at a
+ y value belonging to some point in the data set. Since there may be no point
+ whose value is exactly 1.5 times the interquartile distance, the whisker may
+ be shorter than its nominal range. This default corresponds to
+ set style boxplot range 1.5
+
+ Alternatively, you can specify the fraction of the total number of points
+ that the whiskers should span. In this case the range is extended
+ symmetrically from the median value until it encompasses the requested fraction
+ of the data set. Here again each whisker is constrained to end at a point in
+ the data set. To span 95% of the points in the set
+ set style boxplot fraction 0.95
+
+ Any points that lie outside the range of the whiskers are considered outliers.
+ By default these are drawn as individual circles (pointtype 7). The option
+ `nooutliers` disables this.
+
+ By default boxplots are drawn in a style similar to candlesticks, but you have
+ the option of using instead a style similar to finance bars.
+
+ If the using specification for a boxplot contains a fourth column, the values
+ in that column will be interpreted as the discrete leveles of a factor
+ variable. In this case more than one boxplots may be drawn, as many as the
+ number of levels of the factor variable. These boxplots will be drawn next to
+ each other, the distance between them is 1.0 by default (in x-axis units).
+ This distance can be changed by the option `separation`.
+
+ The `labels` option governs how and where these boxplots (each representing a
+ part of the dataset) are labeled. By default the value of the factor is put
+ as a tick label on the horizontal axis -- x or x2, depending on which one is
+ used for the plot itself. This setting corresponds to option `labels auto`.
+ The labels can be forced to use either of the x or x2 axes -- options
+ `labels x` and `labels x2`, respectively --, or they can be turned off
+ altogether with the option `labels off`.
+
+ By default the boxplots corresponding to different levels of the factor
+ variable are not sorted; they will be drawn in the same order the levels are
+ encountered in the data file. This behavior corresponds to the `unsorted`
+ option. If the `sorted` option is active, the levels are first sorted
+ alphabetically, and the boxplots are drawn in the sorted order.
+
+ The `separation`, `labels`, `sorted` and `unsorted` option only have an effect
+ if a fourth column is given the plot specification.
+
+ See `boxplot`, `candlesticks`, `financebars`.
+
+?commands set style data
+?commands show style data
+?set style data
+?show style data
+?data style
+ The `set style data` command changes the default plotting style for data
+ plots.
+
+ Syntax:
+ set style data <plotting-style>
+ show style data
+
+ See `plotting styles` for the choices. If no choice is given, the choices are
+ listed. `show style data` shows the current default data plotting style.
+?commands set style fill
+?commands show style fill
+?set style fill
+?show style fill
+?fillstyle
+ The `set style fill` command is used to set the default style of the plot
+ elements in plots with boxes, histograms, candlesticks and filledcurves.
+ This default can be superseded by fillstyles attached to individual plots.
+ See also 'set style rectangle'.
+
+ Syntax:
+ set style fill {empty
+ | {transparent} solid {<density>}
+ | {transparent} pattern {<n>}}
+ {border {lt} {lc <colorspec>} | noborder}
+
+ The default fillstyle is `empty`.
+
+ The `solid` option causes filling with a solid color, if the terminal
+ supports that. The <density> parameter specifies the intensity of the
+ fill color. At a <density> of 0.0, the box is empty, at <density> of 1.0,
+ the inner area is of the same color as the current linetype.
+ Some terminal types can vary the density continuously; others implement
+ only a few levels of partial fill. If no <density> parameter is given,
+ it defaults to 1.
+
+ The `pattern` option causes filling to be done with a fill pattern supplied
+ by the terminal driver. The kind and number of available fill patterns
+ depend on the terminal driver. If multiple datasets using filled boxes are
+ plotted, the pattern cycles through all available pattern types, starting
+ from pattern <n>, much as the line type cycles for multiple line plots.
+
+ The `empty` option causes filled boxes not to be filled. This is the default.
+
+ By default, `border`, the box is bounded by a solid line of the current
+ linetype. `border <colorspec>` allows you to change the color of the border.
+ `noborder` specifies that no bounding lines are drawn.
+?commands set style fill transparent
+?set style fill transparent
+?fillstyle transparent
+?transparent
+ Some terminals support the attribute `transparent` for filled areas.
+ In the case of transparent solid fill areas, the `density` parameter is
+ interpreted as an alpha value; that is, density 0 is fully transparent,
+ density 1 is fully opaque. In the case of transparent pattern fill, the
+ background of the pattern is either fully transparent or fully opaque.
+
+ terminal solid pattern pm3d
+ --------------------------------
+ gif no yes no
+ jpeg yes no yes
+ pdf yes yes yes
+ png TrueColor index yes
+ post no yes no
+ svg yes no yes
+ win yes yes yes
+ wxt yes yes yes
+ x11 no yes no
+
+
+ Note that there may be additional limitations on the creation or viewing of
+ graphs containing transparent fill areas. For example, the png terminal can
+ only use transparent fill if the "truecolor" option is set. Some pdf viewers
+ may not correctly display the fill areas even if they are correctly described
+ in the pdf file. Ghostscript/gv does not correctly display pattern-fill areas
+ even though actual PostScript printers generally have no problem.
+?commands set style function
+?commands show style function
+?set style function
+?show style function
+ The `set style function` command changes the default plotting style for
+ function plots (e.g. lines, points, filledcurves). See `plotting styles`.
+
+ Syntax:
+ set style function <plotting-style>
+ show style function
+?commands set style increment
+?commands show style increment
+?set style increment
+?show style increment
+ `Note`: This command has been deprecated. Instead please use the newer
+ command `set linetype`, which redefines the linetypes themselves rather
+ than searching for a suitable temporary line style to substitute.
+ See `set linetype`
+
+ Syntax:
+ set style increment {default|userstyles}
+ show style increment
+
+ By default, successive plots within the same graph will use successive
+ linetypes from the default set for the current terminal type.
+ However, choosing `set style increment user` allows you to step through
+ the user-defined line styles rather than through the default linetypes.
+
+ Example:
+
+ set style line 1 lw 2 lc rgb "gold"
+ set style line 2 lw 2 lc rgb "purple"
+ set style line 4 lw 1 lc rgb "sea-green"
+ set style increment user
+
+ plot f1(x), f2(x), f3(x), f4(x)
+
+ should plot functions f1, f2, f4 in your 3 newly defined line styles.
+ If a user-defined line style is not found then the corresponding default
+ linetype is used instead. E.g. in the example above, f3(x) will be plotted
+ using the default linetype 3.
+
+?commands set style line
+?commands unset style line
+?commands show style line
+?set style line
+?unset style line
+?show style line
+?linestyle
+?linewidth
+ Each terminal has a default set of line and point types, which can be seen
+ by using the command `test`. `set style line` defines a set of line types
+ and widths and point types and sizes so that you can refer to them later by
+ an index instead of repeating all the information at each invocation.
+
+ Syntax:
+ set style line <index> default
+ set style line <index> {{linetype | lt} <line_type> | <colorspec>}
+ {{linecolor | lc} <colorspec>}
+ {{linewidth | lw} <line_width>}
+ {{pointtype | pt} <point_type>}
+ {{pointsize | ps} <point_size>}
+ {{pointinterval | pi} <interval>}
+ {palette}
+ unset style line
+ show style line
+
+ `default` sets all line style parameters to those of the linetype with
+ that same index.
+
+ If the linestyle <index> already exists, only the given parameters are
+ changed while all others are preserved. If not, all undefined values are
+ set to the default values.
+
+ Line styles created by this mechanism do not replace the default linetype
+ styles; both may be used. Line styles are temporary. They are lost whenever
+ you execute a `reset` command. To redefine the linetype itself,
+ please see `set linetype`.
+
+ The line and point types default to the index value. The exact symbol that is
+ drawn for that index value may vary from one terminal type to another.
+
+ The line width and point size are multipliers for the current terminal's
+ default width and size (but note that <point_size> here is unaffected by
+ the multiplier given by the command`set pointsize`).
+
+ The `pointinterval` controls the spacing between points in a plot drawn with
+ style `linespoints`. The default is 0 (every point is drawn). For example,
+ `set style line N pi 3` defines a linestyle that uses pointtype N, pointsize
+ and linewidth equal to the current defaults for the terminal, and will draw
+ every 3rd point in plots using `with linespoints`. A negative value for the
+ interval is treated the same as a positive value, except that some terminals
+ will try to interrupt the line where it passes through the point symbol.
+
+ Not all terminals support the `linewidth` and `pointsize` features; if
+ not supported, the option will be ignored.
+
+ Terminal-independent colors may be assigned using either
+ `linecolor <colorspec>` or `linetype <colorspec>`, abbreviated `lc` or `lt`.
+ This requires giving a RGB color triple, a known palette color name,
+ a fractional index into the current palette, or a constant value from the
+ current mapping of the palette onto cbrange.
+ See `colors`, `colorspec`, `set palette`, `colornames`, `cbrange`.
+
+ `set style line <n> linetype <lt>` will set both a terminal-dependent dot/dash
+ pattern and color. The commands`set style line <n> linecolor <colorspec>` or
+ `set style line <n> linetype <colorspec>` will set a new line color while
+ leaving the existing dot-dash pattern unchanged.
+
+ In 3d mode (`splot` command), the special keyword `palette` is allowed as a
+ shorthand for "linetype palette z". The color value corresponds to the
+ z-value (elevation) of the splot, and varies smoothly along a line or surface.
+
+ Examples:
+ Suppose that the default lines for indices 1, 2, and 3 are red, green, and
+ blue, respectively, and the default point shapes for the same indices are a
+ square, a cross, and a triangle, respectively. Then
+
+ set style line 1 lt 2 lw 2 pt 3 ps 0.5
+
+ defines a new linestyle that is green and twice the default width and a new
+ pointstyle that is a half-sized triangle. The commands
+
+ set style function lines
+ plot f(x) lt 3, g(x) ls 1
+
+ will create a plot of f(x) using the default blue line and a plot of g(x)
+ using the user-defined wide green line. Similarly the commands
+
+ set style function linespoints
+ plot p(x) lt 1 pt 3, q(x) ls 1
+
+ will create a plot of p(x) using the default triangles connected by a red
+ line and q(x) using small triangles connected by a green line.
+
+ splot sin(sqrt(x*x+y*y))/sqrt(x*x+y*y) w l pal
+
+ creates a surface plot using smooth colors according to `palette`. Note,
+ that this works only on some terminals. See also `set palette`, `set pm3d`.
+
+ set style line 10 linetype 1 linecolor rgb "cyan"
+
+ will assign linestyle 10 to be a solid cyan line on any terminal that
+ supports rgb colors.
+
+?commands set style circle
+?commands unset style circle
+?commands show style circle
+?set style circle
+?unset style circle
+?show style circle
+
+ Syntax:
+ set style circle {radius {graph|screen} <R>} {clip|noclip}
+
+ This command sets the default radius used in plot style "with circles". It
+ applies to data plots with only 2 columns of data (x,y) and to function plots.
+ "noclip" disables clippling the circle to the plot boundary.
+ The default is "set style circle radius graph 0.02 clip".
+
+?commands set style rectangle
+?commands unset style rectangle
+?commands show style rectangle
+?set style rectangle
+?unset style rectangle
+?show style rectangle
+
+ Rectangles defined with the `set object` command can have individual styles.
+ However, if the object is not assigned a private style then it inherits a
+ default that is taken from the `set style rectangle` command.
+
+ Syntax:
+ set style rectangle {front|back} {lw|linewidth <lw>}
+ {fillcolor <colorspec>} {fs <fillstyle>}
+
+ See `colorspec` and `fillstyle`. `fillcolor` may be abbreviated as `fc`.
+
+ Examples:
+ set style rectangle back fc rgb "white" fs solid 1.0 border lt -1
+ set style rectangle fc linsestyle 3 fs pattern 2 noborder
+
+ The default values correspond to solid fill with the background color and a
+ black border.
+
+?commands set style ellipse
+?commands show style ellipse
+?set style ellipse
+?unset style ellipse
+?show style ellipse
+
+ Syntax:
+ set style ellipse {units xx|xy|yy} {clip|noclip}
+ {size {graph|screen} <a>, {{graph|screen} <b>}}
+ {angle <angle>}
+
+ This command governs whether the diameters of ellipses are interpreted in
+ the same units or not.
+ Default is `xy`, which means that the major diameter (first axis) of
+ ellipses will be interpreted in the same units as the x (or x2) axis,
+ while the minor (second) diameter in those of the y (or y2) axis.
+ In this mode the ratio of the ellipse axes depends on the scales of the
+ plot axes and aspect ratio of the plot. When set to `xx` or `yy`,
+ both axes of all ellipses will be interpreted in the same units.
+ This means that the ratio of the axes of the plotted ellipses will be
+ correct even after rotation, but either their vertical or horizontal extent
+ will not be correct.
+
+ This is a global setting that affects all ellipses, both those defined as
+ objects and those generated with the `plot` command, however, the value of
+ `units` can also be redefined on a per-plot and per-object basis.
+
+ It is also possible to set a default size for ellipses with the `size`
+ keyword. This default size applies to data plots with only
+ 2 columns of data (x,y) and to function plots. The two values are
+ interpreted as the major and minor diameters (as opposed to semi-major
+ and semi-minor axes) of the ellipse.
+
+ The default is "set style ellipse size graph 0.05,0.03".
+
+ Last, but not least it is possible to set the default orientation with the
+ `angle` keyword. The orientation, which is defined as the angle between the
+ major axis of the ellipse and the plot's x axis, must be given in degrees.
+
+ "noclip" disables clippling the circle to the plot boundary.
+
+ For defining ellipse objects, see `set object ellipse`;
+ for the 2D plot style, see `ellipses`.
+
+?commands set surface
+?commands unset surface
+?commands show surface
+?set surface
+?unset surface
+?show surface
+?surface
+?nosurface
+ The command `set surface` controls the display of surfaces by `splot`.
+
+ Syntax:
+ set surface
+ unset surface
+ show surface
+
+ The surface is drawn with the style specified by `with`, or else the
+ appropriate style, data or function.
+
+ `unset surface` will cause `splot` to not draw points or lines corresponding
+ to any of the function or data file points. If you want to turn off the surface
+ for an individual function or data file while leaving the others active, use
+ the `nosurface` keyword in the `splot` command. Contours may still be drawn on
+ the surface, depending on the `set contour` option. The combination
+ `unset surface; set contour base` is useful for displaying contours on the grid
+ base. See also `set contour`.
+?commands set table
+?set table
+?table
+ When `table` mode is enabled, `plot` and `splot` commands print out a
+ multicolumn ASCII table of X Y {Z} R values rather than creating an actual
+ plot on the current terminal. The character R takes on one of three values:
+ "i" if the point is in the active range, "o" if it is out-of-range, or "u"
+ if it is undefined. The data format is determined by the format of the axis
+ labels (see `set format`), and the columns are separated by single spaces.
+ This can be useful if you want to generate contours and then save them for
+ further use, perhaps for plotting with `plot`; see `set contour` for example.
+ The same method can be used to save interpolated data
+ (see `set samples` and `set dgrid3d`).
+
+ Syntax:
+ set table {"outfile"}
+ plot <whatever>
+ unset table
+
+ Tabular output is written to the named file, if any, otherwise it is written
+ to the current value of `set output`. You must explicitly `unset table`
+ in order to go back to normal plotting on the current terminal.
+?commands set terminal
+?commands show terminal
+?set terminal
+?set term
+?show terminal
+?show term
+?set terminal push
+?set term push
+?terminal push
+?term push
+?push
+?set terminal pop
+?set term pop
+?terminal pop
+?term pop
+?pop
+ `gnuplot` supports many different graphics devices. Use `set terminal` to
+ tell `gnuplot` what kind of output to generate. Use `set output` to redirect
+ that output to a file or device.
+
+ Syntax:
+ set terminal {<terminal-type> | push | pop}
+ show terminal
+
+ If <terminal-type> is omitted, `gnuplot` will list the available terminal
+ types. <terminal-type> may be abbreviated.
+
+ If both `set terminal` and `set output` are used together, it is safest to
+ give `set terminal` first, because some terminals set a flag which is needed
+ in some operating systems.
+
+ Some terminals have many additional options.
+ The options used by a previous invocation `set term <term> <options>` of a
+ given `<term>` are remembered, thus subsequent `set term <term>` does
+ not reset them. This helps in printing, for instance, when switching
+ among different terminals---previous options don't have to be repeated.
+
+ The command `set term push` remembers the current terminal including its
+ settings while `set term pop` restores it. This is equivalent to `save term`
+ and `load term`, but without accessing the filesystem. Therefore they can be
+ used to achieve platform independent restoring of the terminal after printing,
+ for instance. After gnuplot's startup, the default terminal or that from
+ `startup` file is pushed automatically. Therefore portable scripts can rely
+ that `set term pop` restores the default terminal on a given platform unless
+ another terminal has been pushed explicitly.
+
+ For more information, see the `complete list of terminals`.
+
+?commands set termoption
+?set termoption
+?termoption
+ The `set termoption` command allows you to change the behaviour of the
+ current terminal without requiring a new `set terminal` command. Only one
+ option can be changed per command, and only a small number of options can
+ be changed this way. Currently the only options accepted are
+
+ set termoption {no}enhanced
+ set termoption font "<fontname>{,<fontsize>}"
+ set termoption fontscale <scale>
+ set termoption {solid|dashed}
+ set termoption {linewidth <lw>}{lw <lw>}
+
+?commands set tics
+?commands unset tics
+?commands show tics
+?set tics
+?unset tics
+?show tics
+?tics
+ Control of the major (labelled) tics on all axes at once is possible with the
+ `set tics` command.
+
+ Fine control of the major (labelled) tics on all axes at once is possible
+ with the `set tics` command. The tics may be turned off with the `unset tics`
+ command, and may be turned on (the default state) with `set tics`. Similar
+ commands (by preceding 'tics' by the axis name) control the major tics on a
+ single axis.
+
+ Syntax:
+ set tics {axis | border} {{no}mirror}
+ {in | out} {scale {default | <major> {,<minor>}}}
+ {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+ {left | right | center | autojustify}
+ { format "formatstring" } { font "name{,<size>}" }
+ { textcolor <colorspec> }
+ set tics {front | back}
+ unset tics
+ show tics
+
+ The options in the first set above can be applied individually to
+ any or all axes, i.e., x, y, z, x2, y2, and cb.
+
+ Set tics `front` or `back` applies to all axes at once, but only for 2D plots
+ (not splot). It controls whether the tics are placed behind or in front of
+ the plot elements, in the case that there is overlap.
+
+ `axis` or `border` tells `gnuplot` to put the tics (both the tics themselves
+ and the accompanying labels) along the axis or the border, respectively. If
+ the axis is very close to the border, the `axis` option will move the
+ tic labels to outside the border in case the border is printed (see
+ `set border`). The relevant margin settings will usually be sized badly by
+ the automatic layout algorithm in this case.
+
+ `mirror` tells `gnuplot` to put unlabelled tics at the same positions on the
+ opposite border. `nomirror` does what you think it does.
+
+ `in` and `out` change the tic marks to be drawn inwards or outwards.
+
+ With `scale`, the size of the tic marks can be adjusted. If <minor> is not
+ specified, it is 0.5*<major>. The default size 1.0 for major tics and 0.5
+ for minor tics is requested by `scale default`.
+
+ `rotate` asks `gnuplot` to rotate the text through 90 degrees, which will be
+ done if the terminal driver in use supports text rotation. `norotate`
+ cancels this. `rotate by <ang>` asks for rotation by <ang> degrees, supported
+ by some terminal types.
+
+ The defaults are `border mirror norotate` for tics on the x and y axes, and
+ `border nomirror norotate` for tics on the x2 and y2 axes. For the z axis,
+ the default is `nomirror`.
+
+ The <offset> is specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, `screen`, or `character` to select the
+ coordinate system. <offset> is the offset of the tics texts from their
+ default positions, while the default coordinate system is `character`.
+ See `coordinates` for details. `nooffset` switches off the offset.
+
+ By default, tic labels are justified automatically depending on the axis and
+ rotation angle to produce aesthetically pleasing results. If this is not
+ desired, justification can be overridden with an explicit `left`, `right` or
+ `center` keyword. `autojustify` restores the default behavior.
+
+ `set tics` with no options restores to place tics inwards. Every other
+ options are retained.
+
+ See also `set xtics` for more control of major (labelled) tic marks and
+ `set mxtics` for control of minor tic marks. These commands provide control
+ at a axis by axis basis.
+?commands set ticslevel
+?commands show ticslevel
+?set ticslevel
+?show ticslevel
+?ticslevel
+ Deprecated. See `set xyplane`.
+?commands set ticscale
+?commands show ticscale
+?set ticscale
+?show ticscale
+?ticscale
+ The `set ticscale` command is deprecated, use `set tics scale` instead.
+?commands set timestamp
+?commands unset timestamp
+?commands show timestamp
+?set timestamp
+?unset timestamp
+?show timestamp
+?timestamp
+?notimestamp
+ The command `set timestamp` places the time and date of the plot in the left
+ margin.
+
+ Syntax:
+ set timestamp {"<format>"} {top|bottom} {{no}rotate}
+ {offset <xoff>{,<yoff>}} {font "<fontspec>"}
+ unset timestamp
+ show timestamp
+
+ The format string allows you to choose the format used to write the date and
+ time. Its default value is what asctime() uses: "%a %b %d %H:%M:%S %Y"
+ (weekday, month name, day of the month, hours, minutes, seconds, four-digit
+ year). With `top` or `bottom` you can place the timestamp at the top or
+ bottom of the left margin (default: bottom). `rotate` lets you write the
+ timestamp vertically, if your terminal supports vertical text. The constants
+ <xoff> and <yoff> are offsets that let you adjust the position more finely.
+ <font> is used to specify the font with which the time is to be written.
+
+ The abbreviation `time` may be used in place of `timestamp`.
+
+ Example:
+ set timestamp "%d/%m/%y %H:%M" offset 80,-2 font "Helvetica"
+
+ See `set timefmt` for more information about time format strings.
+?commands set timefmt
+?commands show timefmt
+?set timefmt
+?show timefmt
+?timefmt
+ This command applies to timeseries where data are composed of dates/times.
+ It has no meaning unless the command `set xdata time` is given also.
+
+ Syntax:
+ set timefmt "<format string>"
+ show timefmt
+
+ The string argument tells `gnuplot` how to read timedata from the datafile.
+ The valid formats are:
+
+ Format Explanation
+ %d day of the month, 1--31
+ %m month of the year, 1--12
+ %y year, 0--99
+ %Y year, 4-digit
+ %j day of the year, 1--365
+ %H hour, 0--24
+ %M minute, 0--60
+ %s seconds since the Unix epoch (1970-01-01, 00:00 UTC)
+ %S second, integer 0--60 on output, (double) on input
+ %b three-character abbreviation of the name of the month
+ %B name of the month
+
+
+
+ Any character is allowed in the string, but must match exactly. \t (tab) is
+ recognized. Backslash-octals (\nnn) are converted to char. If there is no
+ separating character between the time/date elements, then %d, %m, %y, %H, %M
+ and %S read two digits each. If a decimal point immediately follows the field
+ read by %S, the decimal and any following digits are interpreted as a
+ fractional second. %Y reads four digits. %j reads three digits.
+ %b requires three characters, and %B requires as many as it needs.
+
+ Spaces are treated slightly differently. A space in the string stands for
+ zero or more whitespace characters in the file. That is, "%H %M" can be used
+ to read "1220" and "12 20" as well as "12 20".
+
+ Each set of non-blank characters in the timedata counts as one column in the
+ `using n:n` specification. Thus `11:11 25/12/76 21.0` consists of three
+ columns. To avoid confusion, `gnuplot` requires that you provide a complete
+ `using` specification if your file contains timedata.
+
+ If the date format includes the day or month in words, the format string must
+ exclude this text. But it can still be printed with the "%a", "%A", "%b", or
+ "%B" specifier. `gnuplot` will determine the proper month and weekday from the
+ numerical values. See `set format` for more details about these and other
+ options for printing time data.
+
+ When reading two-digit years with %y, values 69-99 refer to the 20th century,
+ while values 00-68 refer to the 21st century. NB: This is in accordance with
+ the UNIX98 spec, but conventions vary widely and two-digit year values are
+ inherently ambiguous.
+
+ See also `set xdata` and `time/date` for more information.
+
+ Example:
+ set timefmt "%d/%m/%Y\t%H:%M"
+ tells `gnuplot` to read date and time separated by tab. (But look closely at
+ your data---what began as a tab may have been converted to spaces somewhere
+ along the line; the format string must match what is actually in the file.)
+ See also
+ time data demo.
+?commands set title
+?commands show title
+?set title
+?show title
+?title
+ The `set title` command produces a plot title that is centered at the top of
+ the plot. `set title` is a special case of `set label`.
+
+ Syntax:
+ set title {"<title-text>"} {offset <offset>} {font "<font>{,<size>}"}
+ {{textcolor | tc} {<colorspec> | default}} {{no}enhanced}
+ show title
+
+ If <offset> is specified by either x,y or x,y,z the title is moved by the
+ given offset. It may be preceded by `first`, `second`, `graph`, `screen`,
+ or `character` to select the coordinate system. See `coordinates` for
+ details. By default, the `character` coordinate system is used. For
+ example, "`set title offset 0,-1`" will change only the y offset of the
+ title, moving the title down by roughly the height of one character. The
+ size of a character depends on both the font and the terminal.
+
+ <font> is used to specify the font with which the title is to be written;
+ the units of the font <size> depend upon which terminal is used.
+
+ `textcolor <colorspec>` changes the color of the text. <colorspec> can be a
+ linetype, an rgb color, or a palette mapping. See help for `colorspec` and
+ `palette`.
+
+ `noenhanced` requests that the title not be processed by the enhanced text
+ mode parser, even if enhanced text mode is currently active.
+
+ `set title` with no parameters clears the title.
+
+ See `syntax` for details about the processing of backslash sequences and
+ the distinction between single- and double-quotes.
+?commands set tmargin
+?set tmargin
+?tmargin
+ The command `set tmargin` sets the size of the top margin.
+ Please see `set margin` for details.
+?commands set trange
+?commands show trange
+?set trange
+?show trange
+?trange
+ The `set trange` command sets the parametric range used to compute x and y
+ values when in parametric or polar modes. Please see `set xrange` for
+ details.
+?commands set urange
+?commands show urange
+?set urange
+?show urange
+?urange
+ The `set urange` and `set vrange` commands set the parametric ranges used
+ to compute x, y, and z values when in `splot` parametric mode.
+ Please see `set xrange` for details.
+?commands show variables
+?show variables all
+?show variables
+ The `show variables` command lists the current value of user-defined and
+ internal variables. Gnuplot internally defines variables whose names begin
+ with GPVAL_, MOUSE_, FIT_, and TERM_.
+
+ Syntax:
+ show variables # show variables that do not begin with GPVAL_
+ show variables all # show all variables including those beginning GPVAL_
+ show variables NAME # show only variables beginning with NAME
+
+?show version
+ The `show version` command lists the version of gnuplot being run, its last
+ modification date, the copyright holders, and email addresses for the FAQ,
+ the gnuplot-info mailing list, and reporting bugs--in short, the information
+ listed on the screen when the program is invoked interactively.
+
+ Syntax:
+ show version {long}
+
+ When the `long` option is given, it also lists the operating system, the
+ compilation options used when `gnuplot` was installed, the location of the
+ help file, and (again) the useful email addresses.
+?commands set view
+?commands show view
+?set view
+?set view map
+?show view
+?view
+ The `set view` command sets the viewing angle for `splot`s. It controls how
+ the 3D coordinates of the plot are mapped into the 2D screen space. It
+ provides controls for both rotation and scaling of the plotted data, but
+ supports orthographic projections only. It supports both 3D projection or
+ orthogonal 2D projection into a 2D plot-like map.
+
+ Syntax:
+ set view <rot_x>{,{<rot_z>}{,{<scale>}{,<scale_z>}}}
+ set view map
+ set view {no}equal {xy|xyz}
+ show view
+
+ where <rot_x> and <rot_z> control the rotation angles (in degrees) in a
+ virtual 3D coordinate system aligned with the screen such that initially
+ (that is, before the rotations are performed) the screen horizontal axis is
+ x, screen vertical axis is y, and the axis perpendicular to the screen is z.
+ The first rotation applied is <rot_x> around the x axis. The second rotation
+ applied is <rot_z> around the new z axis.
+
+ Command `set view map` is used to represent the drawing as a map. It can be
+ used for `contour` plots, or for color `pm3d` maps. In the latter, take care
+ that you properly use `zrange` and `cbrange` for input data point filtering
+ and color range scaling, respectively.
+
+ <rot_x> is bounded to the [0:180] range with a default of 60 degrees, while
+ <rot_z> is bounded to the [0:360] range with a default of 30 degrees.
+ <scale> controls the scaling of the entire `splot`, while <scale_z> scales
+ the z axis only. Both scales default to 1.0.
+
+ Examples:
+ set view 60, 30, 1, 1
+ set view ,,0.5
+
+ The first sets all the four default values. The second changes only scale,
+ to 0.5.
+?set view equal_axes
+?set view equal
+?view equal_axes
+?view equal
+?equal_axes
+ The command `set view equal xy` forces the unit length of the x and y axes
+ to be on the same scale, and chooses that scale so that the plot will fit on
+ the page. The command `set view equal xyz` additionally sets the z axis
+ scale to match the x and y axes; however there is no guarantee that the
+ current z axis range will fit within the plot boundary.
+ By default all three axes are scaled independently to fill the available area.
+
+ See also `set xyplane`.
+?commands set vrange
+?commands show vrange
+?set vrange
+?show vrange
+?vrange
+ The `set urange` and `set vrange` commands set the parametric ranges used
+ to compute x, y, and z values when in `splot` parametric mode.
+ Please see `set xrange` for details.
+?commands set x2data
+?commands show x2data
+?set x2data
+?show x2data
+?x2data
+ The `set x2data` command sets data on the x2 (top) axis to timeseries
+ (dates/times). Please see `set xdata`.
+?commands set x2dtics
+?commands unset x2dtics
+?commands show x2dtics
+?set x2dtics
+?unset x2dtics
+?show x2dtics
+?x2dtics
+?nox2dtics
+ The `set x2dtics` command changes tics on the x2 (top) axis to days of the
+ week. Please see `set xdtics` for details.
+?commands set x2label
+?commands show x2label
+?set x2label
+?show x2label
+?x2label
+ The `set x2label` command sets the label for the x2 (top) axis.
+ Please see `set xlabel`.
+?commands set x2mtics
+?commands unset x2mtics
+?commands show x2mtics
+?set x2mtics
+?unset x2mtics
+?show x2mtics
+?x2mtics
+?nox2mtics
+ The `set x2mtics` command changes tics on the x2 (top) axis to months of the
+ year. Please see `set xmtics` for details.
+?commands set x2range
+?commands show x2range
+?set x2range
+?show x2range
+?x2range
+ The `set x2range` command sets the horizontal range that will be displayed on
+ the x2 (top) axis. Please see `set xrange` for details.
+?commands set x2tics
+?commands unset x2tics
+?commands show x2tics
+?set x2tics
+?unset x2tics
+?show x2tics
+?x2tics
+?nox2tics
+ The `set x2tics` command controls major (labelled) tics on the x2 (top) axis.
+ Please see `set xtics` for details.
+?commands set x2zeroaxis
+?commands unset x2zeroaxis
+?commands show x2zeroaxis
+?set x2zeroaxis
+?unset x2zeroaxis
+?show x2zeroaxis
+?x2zeroaxis
+?nox2zeroaxis
+ The `set x2zeroaxis` command draws a line at the origin of the x2 (top) axis
+ (y2 = 0). For details, please see `set zeroaxis`.
+?commands set xdata
+?commands show xdata
+?set xdata
+?show xdata
+?xdata
+ This command sets the datatype on the x axis to time/date. A similar command
+ does the same thing for each of the other axes.
+
+ Syntax:
+ set xdata {time}
+ show xdata
+
+ The same syntax applies to `ydata`, `zdata`, `x2data`, `y2data` and `cbdata`.
+
+ The `time` option signals that the datatype is indeed time/date. If the
+ option is not specified, the datatype reverts to normal.
+
+ See `set timefmt` to tell gnuplot how to read date or time data. The
+ time/date is converted to seconds from start of the century. There is
+ currently only one timefmt, which implies that all the time/date columns must
+ conform to this format. Specification of ranges should be supplied as quoted
+ strings according to this format to avoid interpretation of the time/date as
+ an expression.
+
+ The function 'strftime' (type "man strftime" on unix to look it up) is used
+ to print tic-mark labels. `gnuplot` tries to figure out a reasonable format
+ for this unless the `set format x "string"` has supplied something that does
+ not look like a decimal format (more than one '%' or neither %f nor %g).
+
+ See also `time/date` for more information.
+?commands set xdtics
+?commands unset xdtics
+?commands show xdtics
+?set xdtics
+?unset xdtics
+?show xdtics
+?xdtics
+?noxdtics
+ The `set xdtics` commands converts the x-axis tic marks to days of the week
+ where 0=Sun and 6=Sat. Overflows are converted modulo 7 to dates. `set
+ noxdtics` returns the labels to their default values. Similar commands do
+ the same things for the other axes.
+
+ Syntax:
+ set xdtics
+ unset xdtics
+ show xdtics
+
+ The same syntax applies to `ydtics`, `zdtics`, `x2dtics`, `y2dtics` and
+ `cbdtics`.
+
+ See also the `set format` command.
+?commands set xlabel
+?commands show xlabel
+?set xlabel
+?show xlabel
+?xlabel
+ The `set xlabel` command sets the x axis label. Similar commands set labels
+ on the other axes.
+
+ Syntax:
+ set xlabel {"<label>"} {offset <offset>} {font "<font>{,<size>}"}
+ {textcolor <colorspec>} {{no}enhanced}
+ {rotate by <degrees> | rotate parallel | norotate}
+ show xlabel
+
+ The same syntax applies to `x2label`, `ylabel`, `y2label`, `zlabel` and
+ `cblabel`.
+
+ If <offset> is specified by either x,y or x,y,z the label is moved by the
+ given offset. It may be preceded by `first`, `second`, `graph`, `screen`,
+ or `character` to select the coordinate system. See `coordinates` for
+ details. By default, the `character` coordinate system is used. For
+ example, "`set xlabel offset -1,0`" will change only the x offset of the
+ title, moving the label roughly one character width to the left. The size
+ of a character depends on both the font and the terminal.
+
+ <font> is used to specify the font in which the label is written; the units
+ of the font <size> depend upon which terminal is used.
+
+ `noenhanced` requests that the label text not be processed by the enhanced text
+ mode parser, even if enhanced text mode is currently active.
+
+ To clear a label, put no options on the command line, e.g., "`set y2label`".
+
+ The default positions of the axis labels are as follows:
+
+ xlabel: The x-axis label is centered below the bottom of the plot.
+
+ ylabel: The y-axis label is centered to the left of the plot, defaulting to
+ either horizontal or vertical orientation depending on the terminal type.
+
+ zlabel: The z-axis label is centered along the z axis and placed in the space
+ above the grid level.
+
+ cblabel: The color box axis label is centered along the box and placed below
+ or to the right according to horizontal or vertical color box gradient.
+
+ y2label: The y2-axis label is placed to the right of the y2 axis. The
+ position is terminal-dependent in the same manner as is the y-axis label.
+
+ x2label: The x2-axis label is placed above the plot but below the title.
+ It is also possible to create an x2-axis label by using new-line
+ characters to make a multi-line plot title, e.g.,
+
+ set title "This is the title\n\nThis is the x2label"
+
+ Note that double quotes must be used. The same font will be used for both
+ lines, of course.
+
+ The orientation (rotation angle) of the x, x2, y and y2 axis labels in 2D plots
+ can be changed by specifying `rotate by <degrees>`. The orientation of the x
+ and y axis labels in 3D plots defaults to horizontal but can be changed to run
+ parallel to the axis by specifying `rotate parallel`.
+
+ If you are not satisfied with the default position of an axis label, use `set
+ label` instead--that command gives you much more control over where text is
+ placed.
+
+ Please see `syntax` for further information about backslash processing
+ and the difference between single- and double-quoted strings.
+?commands set xmtics
+?commands unset xmtics
+?commands show xmtics
+?set xmtics
+?unset xmtics
+?show xmtics
+?xmtics
+?noxmtics
+ The `set xmtics` command converts the x-axis tic marks to months of the
+ year where 1=Jan and 12=Dec. Overflows are converted modulo 12 to months.
+ The tics are returned to their default labels by `unset xmtics`. Similar
+ commands perform the same duties for the other axes.
+
+ Syntax:
+ set xmtics
+ unset xmtics
+ show xmtics
+
+ The same syntax applies to `x2mtics`, `ymtics`, `y2mtics`, `zmtics` and
+ `cbmtics`.
+
+ See also the `set format` command.
+?commands set xrange
+?commands show xrange
+?set xrange
+?show xrange
+?writeback
+?restore
+?xrange
+ The `set xrange` command sets the horizontal range that will be displayed.
+ A similar command exists for each of the other axes, as well as for the
+ polar radius r and the parametric variables t, u, and v.
+
+ Syntax:
+ set xrange { [{{<min>}:{<max>}}] {{no}reverse} {{no}writeback} }
+ | restore
+ show xrange
+
+ where <min> and <max> terms are constants, expressions or an asterisk to set
+ autoscaling. See below for full autoscaling syntax.
+ If the data are time/date, you must give the range as a quoted
+ string according to the `set timefmt` format. Any value omitted will not be
+ changed.
+
+ The same syntax applies to `yrange`, `zrange`, `x2range`, `y2range`, `cbrange`,
+ `rrange`, `trange`, `urange` and `vrange`.
+
+ The `reverse` option reverses the direction of the axis, e.g., `set xrange
+ [0:1] reverse` will produce an axis with 1 on the left and 0 on the right.
+ This is identical to the axis produced by `set xrange [1:0]`, of course.
+ `reverse` is intended primarily for use with `autoscale`.
+
+ Autoscaling: If <min> (the same applies for correspondingly to <max>) is
+ an asterisk "*" autoscaling is turned on. The range in which autoscaling
+ is being performed may be limited by a lower bound <lb> or an upper bound
+ <ub> or both. The syntax is
+ { <lb> < } * { < <ub> }
+ For example,
+ 0 < * < 200
+ sets <lb> = 0 and <ub> = 200. With such a setting <min> would be autoscaled,
+ but its final value will be between 0 and 200 (both inclusive despite the
+ '<' sign). If no lower or upper bound is specified, the '<' to also be
+ ommited. If <ub> is lower than <lb> the constraints will be turned off
+ and full autoscaling will happen.
+ This feature is useful to plot measured data with autoscaling but providing
+ a limit on the range, to clip outliers, or to guarantee a minimum range
+ that will be displayed even if the data would not need such a big range.
+
+ The `writeback` option essentially saves the range found by `autoscale` in
+ the buffers that would be filled by `set xrange`. This is useful if you wish
+ to plot several functions together but have the range determined by only
+ some of them. The `writeback` operation is performed during the `plot`
+ execution, so it must be specified before that command. To restore,
+ the last saved horizontal range use `set xrange restore`. For example,
+
+ set xrange [-10:10]
+ set yrange [] writeback
+ plot sin(x)
+ set yrange restore
+ replot x/2
+
+ results in a yrange of [-1:1] as found only from the range of sin(x); the
+ [-5:5] range of x/2 is ignored. Executing `show yrange` after each command
+ in the above example should help you understand what is going on.
+
+ In 2D, `xrange` and `yrange` determine the extent of the axes, `trange`
+ determines the range of the parametric variable in parametric mode or the
+ range of the angle in polar mode. Similarly in parametric 3D, `xrange`,
+ `yrange`, and `zrange` govern the axes and `urange` and `vrange` govern the
+ parametric variables.
+
+ In polar mode, `rrange` determines the radial range plotted. <rmin> acts as
+ an additive constant to the radius, whereas <rmax> acts as a clip to the
+ radius---no point with radius greater than <rmax> will be plotted. `xrange`
+ and `yrange` are affected---the ranges can be set as if the graph was of
+ r(t)-rmin, with rmin added to all the labels.
+
+ Any range may be partially or totally autoscaled, although it may not make
+ sense to autoscale a parametric variable unless it is plotted with data.
+
+ Ranges may also be specified on the `plot` command line. A range given on
+ the plot line will be used for that single `plot` command; a range given by
+ a `set` command will be used for all subsequent plots that do not specify
+ their own ranges. The same holds true for `splot`.
+
+ Examples:
+
+ To set the xrange to the default:
+ set xrange [-10:10]
+
+ To set the yrange to increase downwards:
+ set yrange [10:-10]
+
+ To change zmax to 10 without affecting zmin (which may still be autoscaled):
+ set zrange [:10]
+
+ To autoscale xmin while leaving xmax unchanged:
+ set xrange [*:]
+
+ To autoscale xmin but keeping xmin positive:
+ set xrange [0<*:]
+
+ To autoscale x but keep minimum range of 10 to 50 (actual might be larger):
+ set xrange [*<10:50<*]
+
+ Autoscaling but limit maximum xrange to -1000 to 1000, i.e. autoscaling
+ within [-1000:1000]
+ set xrange [-1000<*:*<1000]
+
+ Make sure xmin is somewhere between -200 and 100:
+ set xrange [-200<*<100:]
+
+?commands set xtics
+?commands unset xtics
+?commands show xtics
+?set xtics
+?unset xtics
+?show xtics
+?xtics
+?noxtics
+ Fine control of the major (labelled) tics on the x axis is possible with the
+ `set xtics` command. The tics may be turned off with the `unset xtics`
+ command, and may be turned on (the default state) with `set xtics`. Similar
+ commands control the major tics on the y, z, x2 and y2 axes.
+
+ Syntax:
+ set xtics {axis | border} {{no}mirror}
+ {in | out} {scale {default | <major> {,<minor>}}}
+ {{no}rotate {by <ang>}} {offset <offset> | nooffset}
+ {left | right | center | autojustify}
+ {add}
+ { autofreq
+ | <incr>
+ | <start>, <incr> {,<end>}
+ | ({"<label>"} <pos> {<level>} {,{"<label>"}...) }
+ { format "formatstring" } { font "name{,<size>}" }
+ { rangelimited }
+ { textcolor <colorspec> }
+ unset xtics
+ show xtics
+
+ The same syntax applies to `ytics`, `ztics`, `x2tics`, `y2tics` and `cbtics`.
+
+ `axis` or `border` tells `gnuplot` to put the tics (both the tics themselves
+ and the accompanying labels) along the axis or the border, respectively. If
+ the axis is very close to the border, the `axis` option will move the
+ tic labels to outside the border. The relevant margin settings will usually
+ be sized badly by the automatic layout algorithm in this case.
+
+ `mirror` tells `gnuplot` to put unlabelled tics at the same positions on the
+ opposite border. `nomirror` does what you think it does.
+
+ `in` and `out` change the tic marks to be drawn inwards or outwards.
+
+ With `scale`, the size of the tic marks can be adjusted. If <minor> is not
+ specified, it is 0.5*<major>. The default size 1.0 for major tics and 0.5
+ for minor tics is requested by `scale default`.
+
+ `rotate` asks `gnuplot` to rotate the text through 90 degrees, which will be
+ done if the terminal driver in use supports text rotation. `norotate`
+ cancels this. `rotate by <ang>` asks for rotation by <ang> degrees, supported
+ by some terminal types.
+
+ The defaults are `border mirror norotate` for tics on the x and y axes, and
+ `border nomirror norotate` for tics on the x2 and y2 axes. For the z axis,
+ the `{axis | border}` option is not available and the default is
+ `nomirror`. If you do want to mirror the z-axis tics, you might want to
+ create a bit more room for them with `set border`.
+
+ The <offset> is specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, `screen`, or `character` to select the
+ coordinate system. <offset> is the offset of the tics texts from their
+ default positions, while the default coordinate system is `character`.
+ See `coordinates` for details. `nooffset` switches off the offset.
+
+ Example:
+
+ Move xtics more closely to the plot.
+ set xtics offset 0,graph 0.05
+
+ By default, tic labels are justified automatically depending on the axis and
+ rotation angle to produce aesthetically pleasing results. If this is not
+ desired, justification can be overridden with an explicit `left`, `right` or
+ `center` keyword. `autojustify` restores the default behavior.
+
+ `set xtics` with no options restores the default border or axis if xtics are
+ being displayed; otherwise it has no effect. Any previously specified tic
+ frequency or position {and labels} are retained.
+
+ Positions of the tics are calculated automatically by default or if the
+ `autofreq` option is given; otherwise they may be specified in either of
+ two forms:
+
+ The implicit <start>, <incr>, <end> form specifies that a series of tics will
+ be plotted on the axis between the values <start> and <end> with an increment
+ of <incr>. If <end> is not given, it is assumed to be infinity. The
+ increment may be negative. If neither <start> nor <end> is given, <start> is
+ assumed to be negative infinity, <end> is assumed to be positive infinity,
+ and the tics will be drawn at integral multiples of <incr>. If the axis is
+ logarithmic, the increment will be used as a multiplicative factor.
+
+ If you specify to a negative <start> or <incr> after a numerical value
+ (e.g., `rotate by <angle>` or `offset <offset>`), the parser fails because
+ it subtracts <start> or <incr> from that value. As a workaround, specify
+ `0-<start>` resp. `0-<incr>` in that case.
+
+ Example:
+ set xtics border offset 0,0.5 -5,1,5
+ Fails with 'invalid expression' at the last comma.
+ set xtics border offset 0,0.5 0-5,1,5
+ or
+ set xtics offset 0,0.5 border -5,1,5
+ Sets tics at the border, tics text with an offset of 0,0.5 characters, and
+ sets the start, increment, and end to -5, 1, and 5, as requested.
+
+ The `set grid` options 'front', 'back' and 'layerdefault' affect the drawing
+ order of the xtics, too.
+
+ Examples:
+
+ Make tics at 0, 0.5, 1, 1.5, ..., 9.5, 10.
+ set xtics 0,.5,10
+
+ Make tics at ..., -10, -5, 0, 5, 10, ...
+ set xtics 5
+
+ Make tics at 1, 100, 1e4, 1e6, 1e8.
+ set logscale x; set xtics 1,100,1e8
+
+ The explicit ("<label>" <pos> <level>, ...) form allows arbitrary tic
+ positions or non-numeric tic labels. In this form, the tics do not
+ need to be listed in numerical order. Each tic has a
+ position, optionally with a label. Note that the label is
+ a string enclosed by quotes. It may be a constant string, such as
+ "hello", may contain formatting information for converting the
+ position into its label, such as "%3f clients", or may be empty, "".
+ See `set format` for more information. If no string is given, the
+ default label (numerical) is used.
+
+ An explicit tic mark has a third parameter, the "level". The default
+ is level 0, a major tic. A level of 1 generates a minor tic. If the
+ level is specified, then the label must also be supplied.
+
+ Examples:
+ set xtics ("low" 0, "medium" 50, "high" 100)
+ set xtics (1,2,4,8,16,32,64,128,256,512,1024)
+ set ytics ("bottom" 0, "" 10, "top" 20)
+ set ytics ("bottom" 0, "" 10 1, "top" 20)
+
+ In the second example, all tics are labelled. In the third, only the end
+ tics are labelled. In the fourth, the unlabeled tic is a minor tic.
+
+ Normally if explicit tics are given, they are used instead of auto-generated
+ tics. Conversely if you specify `set xtics auto` or the like it will erase
+ any previously specified explicit tics. You can mix explicit and auto-
+ generated tics by using the keyword `add`, which must appear before
+ the tic style being added.
+
+ Example:
+ set xtics 0,.5,10
+ set xtics add ("Pi" 3.14159)
+
+ This will automatically generate tic marks every 0.5 along x, but will
+ also add an explicit labeled tic mark at pi.
+
+ However they are specified, tics will only be plotted when in range.
+
+ Format (or omission) of the tic labels is controlled by `set format`, unless
+ the explicit text of a label is included in the `set xtics ("<label>")` form.
+
+ Minor (unlabelled) tics can be added automatically by the `set mxtics`
+ command, or at explicit positions by the `set xtics ("" <pos> 1, ...)` form.
+?set xtics time_axis tics
+?xtics time_axis tics
+?time_axis tics
+ In case of timeseries data, axis tic position values must be given as quoted
+ dates or times according to the format `timefmt`. If the <start>, <incr>, <end>
+ form is used, <start> and <end> must be given according to `timefmt`, but
+ <incr> must be in seconds. Times will be written out according to the format
+ given on `set format`, however.
+
+ Examples:
+ set xdata time
+ set timefmt "%d/%m"
+ set xtics format "%b %d"
+ set xrange ["01/12":"06/12"]
+ set xtics "01/12", 172800, "05/12"
+
+ set xdata time
+ set timefmt "%d/%m"
+ set xtics format "%b %d"
+ set xrange ["01/12":"06/12"]
+ set xtics ("01/12", "" "03/12", "05/12")
+ Both of these will produce tics "Dec 1", "Dec 3", and "Dec 5", but in the
+ second example the tic at "Dec 3" will be unlabelled.
+?set xtics rangelimited
+?xtics rangelimited
+?rangelimited
+?range-frame
+ This option limits both the auto-generated axis tic labels and the
+ corresponding plot border to the range of values actually present in the data
+ that has been plotted. Note that this is independent of the current range
+ limits for the plot. For example, suppose that the data in "file.dat" all lies
+ in the range 2 < y < 4. Then the following commands will create a plot for
+ which the left-hand plot border (y axis) is drawn for only this portion of the
+ total y range, and only the axis tics in this region are generated.
+ I.e., the plot will be scaled to the full range on y, but there will be a gap
+ between 0 and 2 on the left border and another gap between 4 and 10. This
+ style is sometimes referred to as a `range-frame` graph.
+ set border 3
+ set yrange [0:10]
+ set ytics nomirror rangelimited
+ plot "file.dat"
+?commands set xyplane
+?commands show xyplane
+?set xyplane
+?show xyplane
+?xyplane
+ The `set xyplane` command adjusts the position at which the xy plane is drawn
+ in a 3D plot. The synonym "set ticslevel" is accepted for backwards
+ compatibility.
+
+ Syntax:
+ set xyplane at <zvalue>
+ set xyplane relative <frac>
+ set ticslevel <frac> # equivalent to set xyplane relative
+ show xyplane
+
+ The form `set xyplane relative <frac>` places the xy plane below the range in
+ Z, where the distance from the xy plane to Zmin is given as a fraction of the
+ total range in z. The default value is 0.5. Negative values are permitted,
+ but tic labels on the three axes may overlap. The older, deprecated, form
+ `set ticslevel` is retained for backwards compatibility.
+
+ To place the xy-plane at a position 'pos' on the z-axis, `ticslevel` may
+ be set equal to (pos - zmin) / (zmin - zmax). However, this position will
+ change if the z range is changed.
+
+ The alternative form `set xyplane at <zvalue>` fixes the placement of the
+ xy plane at a specific Z value regardless of the current z range. Thus to
+ force the x, y, and z axes to meet at a common origin one would specify
+ `set xyplane at 0`.
+
+ See also `set view`, and `set zeroaxis`.
+?commands set xzeroaxis
+?commands unset xzeroaxis
+?commands show xzeroaxis
+?set xzeroaxis
+?unset xzeroaxis
+?show xzeroaxis
+?xzeroaxis
+?noxzeroaxis
+ The `set xzeroaxis` command draws a line at y = 0. For details,
+ please see `set zeroaxis`.
+?commands set y2data
+?commands show y2data
+?set y2data
+?show y2data
+?y2data
+ The `set y2data` command sets y2 (right-hand) axis data to timeseries
+ (dates/times). Please see `set xdata`.
+?commands set y2dtics
+?commands unset y2dtics
+?set y2dtics
+?unset y2dtics
+?show y2dtics
+?y2dtics
+?noy2dtics
+ The `set y2dtics` command changes tics on the y2 (right-hand) axis to days of
+ the week. Please see `set xdtics` for details.
+?commands set y2label
+?commands show y2label
+?set y2label
+?show y2label
+?y2label
+ The `set y2label` command sets the label for the y2 (right-hand) axis.
+ Please see `set xlabel`.
+?commands set y2mtics
+?commands unset y2mtics
+?commands show y2mtics
+?set y2mtics
+?unset y2mtics
+?show y2mtics
+?y2mtics
+?noy2mtics
+ The `set y2mtics` command changes tics on the y2 (right-hand) axis to months
+ of the year. Please see `set xmtics` for details.
+?commands set y2range
+?commands show y2range
+?set y2range
+?show y2range
+?y2range
+ The `set y2range` command sets the vertical range that will be displayed on
+ the y2 (right-hand) axis. Please see `set xrange` for details.
+?commands set y2tics
+?commands unset y2tics
+?commands show y2tics
+?set y2tics
+?unset y2tics
+?show y2tics
+?y2tics
+?noy2tics
+ The `set y2tics` command controls major (labelled) tics on the y2 (right-hand)
+ axis. Please see `set xtics` for details.
+?commands set y2zeroaxis
+?commands unset y2zeroaxis
+?commands show y2zeroaxis
+?set y2zeroaxis
+?unset y2zeroaxis
+?show y2zeroaxis
+?y2zeroaxis
+?noy2zeroaxis
+ The `set y2zeroaxis` command draws a line at the origin of the y2 (right-hand)
+ axis (x2 = 0). For details, please see `set zeroaxis`.
+?commands set ydata
+?commands show ydata
+?set ydata
+?show ydata
+?ydata
+ The `set ydata` commands sets y-axis data to timeseries (dates/times).
+ Please see `set xdata`.
+?commands set ydtics
+?commands unset ydtics
+?commands show ydtics
+?set ydtics
+?unset ydtics
+?show ydtics
+?ydtics
+?noydtics
+ The `set ydtics` command changes tics on the y axis to days of the week.
+ Please see `set xdtics` for details.
+?commands set ylabel
+?commands show ylabel
+?set ylabel
+?show ylabel
+?ylabel
+ This command sets the label for the y axis. Please see `set xlabel`.
+?commands set ymtics
+?commands unset ymtics
+?commands show ymtics
+?set ymtics
+?unset ymtics
+?show ymtics
+?ymtics
+?noymtics
+ The `set ymtics` command changes tics on the y axis to months of the year.
+ Please see `set xmtics` for details.
+?commands set yrange
+?commands show yrange
+?set yrange
+?show yrange
+?yrange
+ The `set yrange` command sets the vertical range that will be displayed on
+ the y axis. Please see `set xrange` for details.
+?commands set ytics
+?commands unset ytics
+?commands show ytics
+?set ytics
+?unset ytics
+?show ytics
+?ytics
+?noytics
+ The `set ytics` command controls major (labelled) tics on the y axis.
+ Please see `set xtics` for details.
+?commands set yzeroaxis
+?commands unset yzeroaxis
+?commands show yzeroaxis
+?set yzeroaxis
+?unset yzeroaxis
+?show yzeroaxis
+?yzeroaxis
+?noyzeroaxis
+ The `set yzeroaxis` command draws a line at x = 0. For details,
+ please see `set zeroaxis`.
+?commands set zdata
+?commands show zdata
+?set zdata
+?show zdata
+?zdata
+ The `set zdata` command sets zaxis data to timeseries (dates/times).
+ Please see `set xdata`.
+?commands set zdtics
+?commands unset zdtics
+?commands show zdtics
+?set zdtics
+?unset zdtics
+?show zdtics
+?zdtics
+?nozdtics
+ The `set zdtics` command changes tics on the z axis to days of the week.
+ Please see `set xdtics` for details.
+?commands set zzeroaxis
+?commands unset zzeroaxis
+?commands show zzeroaxis
+?set zzeroaxis
+?unset zzeroaxis
+?show zzeroaxis
+?zzeroaxis
+?nozzeroaxis
+ The `set zzeroaxis` command draws a line through (x=0,y=0). This has no effect
+ on 2D plots, including splot with `set view map`. For details, please
+ see `set zeroaxis` and `set xyplane`.
+?commands set cbdata
+?commands show cbdata
+?set cbdata
+?show cbdata
+?cbdata
+ Set color box axis data to timeseries (dates/times). Please see `set xdata`.
+?commands set cbdtics
+?commands unset cbdtics
+?commands show cbdtics
+?set cbdtics
+?unset cbdtics
+?show cbdtics
+?cbdtics
+?nocbdtics
+ The `set cbdtics` command changes tics on the color box axis to days of the
+ week. Please see `set xdtics` for details.
+?commands set zero
+?commands show zero
+?set zero
+?show zero
+?zero
+ The `zero` value is the default threshold for values approaching 0.0.
+
+ Syntax:
+ set zero <expression>
+ show zero
+
+ `gnuplot` will not plot a point if its imaginary part is greater in magnitude
+ than the `zero` threshold. This threshold is also used in various other
+ parts of `gnuplot` as a (crude) numerical-error threshold. The default
+ `zero` value is 1e-8. `zero` values larger than 1e-3 (the reciprocal of the
+ number of pixels in a typical bitmap display) should probably be avoided, but
+ it is not unreasonable to set `zero` to 0.0.
+?commands set zeroaxis
+?commands unset zeroaxis
+?commands show zeroaxis
+?set zeroaxis
+?unset zeroaxis
+?show zeroaxis
+?zeroaxis
+ The x axis may be drawn by `set xzeroaxis` and removed by `unset xzeroaxis`.
+ Similar commands behave similarly for the y, x2, y2, and z axes.
+
+ Syntax:
+ set {x|x2|y|y2|z}zeroaxis { {linestyle | ls <line_style>}
+ | { linetype | lt <line_type>}
+ { linewidth | lw <line_width>}}
+ unset {x|x2|y|y2|z}zeroaxis
+ show {x|y|z}zeroaxis
+
+
+ By default, these options are off. The selected zero axis is drawn
+ with a line of type <line_type> and width <line_width> (if supported
+ by the terminal driver currently in use), or a user-defined style
+ <line_style>.
+
+ If no linetype is specified, any zero axes selected will be drawn
+ using the axis linetype (linetype 0).
+
+ `set zeroaxis` is equivalent to `set xzeroaxis; set yzeroaxis`.
+ Note that the z-axis must be set separately using `set zzeroaxis`.
+
+ Examples:
+
+ To simply have the y=0 axis drawn visibly:
+
+ set xzeroaxis
+
+ If you want a thick line in a different color or pattern, instead:
+
+ set xzeroaxis linetype 3 linewidth 2.5
+?commands set zlabel
+?commands show zlabel
+?set zlabel
+?show zlabel
+?zlabel
+ This command sets the label for the z axis. Please see `set xlabel`.
+?commands set zmtics
+?commands unset zmtics
+?commands show zmtics
+?set zmtics
+?unset zmtics
+?show zmtics
+?zmtics
+?nozmtics
+ The `set zmtics` command changes tics on the z axis to months of the year.
+ Please see `set xmtics` for details.
+?commands set zrange
+?commands show zrange
+?set zrange
+?show zrange
+?zrange
+ The `set zrange` command sets the range that will be displayed on the z axis.
+ The zrange is used only by `splot` and is ignored by `plot`. Please see
+ `set xrange` for details.
+?commands set ztics
+?commands unset ztics
+?commands show ztics
+?set ztics
+?unset ztics
+?show ztics
+?ztics
+?noztics
+ The `set ztics` command controls major (labelled) tics on the z axis.
+ Please see `set xtics` for details.
+?commands set cblabel
+?commands show cblabel
+?set cblabel
+?show cblabel
+?cblabel
+ This command sets the label for the color box axis. Please see `set xlabel`.
+?commands set cbmtics
+?commands unset cbmtics
+?commands show cbmtics
+?set cbmtics
+?unset cbmtics
+?show cbmtics
+?cbmtics
+?nocbmtics
+ The `set cbmtics` command changes tics on the color box axis to months of the
+ year. Please see `set xmtics` for details.
+?commands set cbrange
+?commands show cbrange
+?set cbrange
+?show cbrange
+?cbrange
+ The `set cbrange` command sets the range of values which are colored using
+ the current `palette` by styles `with pm3d`, `with image` and `with palette`.
+ Values outside of the color range use color of the nearest extreme.
+
+ If the cb-axis is autoscaled in `splot`, then the colorbox range is taken from
+ `zrange`. Points drawn in `splot ... pm3d|palette` can be filtered by using
+ different `zrange` and `cbrange`.
+
+ Please see `set xrange` for details on `set cbrange` syntax. See also
+ `set palette` and `set colorbox`.
+?commands set cbtics
+?commands unset cbtics
+?commands show cbtics
+?set cbtics
+?unset cbtics
+?show cbtics
+?cbtics
+?nocbtics
+ The `set cbtics` command controls major (labelled) tics on the color box axis.
+ Please see `set xtics` for details.
+?commands shell
+?shell
+ The `shell` command spawns an interactive shell. To return to `gnuplot`,
+ type `logout` if using VMS, `exit` or the END-OF-FILE character if using
+ Unix, or `exit` if using MS-DOS or OS/2.
+
+ There are two ways of spawning a shell command: using `system` command
+ or via `!` ($ if using VMS). The former command takes a string as a
+ parameter and thus it can be used anywhere among other gnuplot commands,
+ while the latter syntax requires to be the only command on the line. Control
+ will return immediately to `gnuplot` after this command is executed. For
+ example, in MS-DOS or OS/2,
+
+ ! dir
+ or
+ system "dir"
+
+ prints a directory listing and then returns to `gnuplot`.
+
+ Other examples of the former syntax:
+ system "date"; set time; plot "a.dat"
+ print=1; if (print) replot; set out; system "lpr x.ps"
+?commands splot
+?splot
+ `splot` is the command for drawing 3D plots (well, actually projections on
+ a 2D surface, but you knew that). It can create a plot from functions or
+ data read from files in a manner very similar to the `plot` command.
+ `splot` provides only a single x, y, and z axis; there is no equivalent to the
+ x2 and y2 secondary axes provided by `plot`.
+
+ See the `plot` command for many options available in both 2D and 3D plots.
+
+ Syntax:
+ splot {<ranges>}
+ {<iteration>}
+ <function> | "<datafile>" {datafile-modifiers}}
+ {<title-spec>} {with <style>}
+ {, {definitions{,}} <function> ...}
+
+ where either a <function> or the name of a data file enclosed in quotes is
+ supplied. The function can be a mathematical expression, or a triple of
+ mathematical expressions in parametric mode.
+
+ By default `splot` draws the xy plane completely below the plotted data.
+ The offset between the lowest ztic and the xy plane can be changed by `set
+ xyplane`. The orientation of a `splot` projection is controlled by
+ `set view`. See `set view` and `set xyplane` for more information.
+
+ The syntax for setting ranges on the `splot` command is the same as for
+ `plot`. In non-parametric mode, the order in which ranges must be given is
+ `xrange`, `yrange`, and `zrange`. In parametric mode, the order is `urange`,
+ `vrange`, `xrange`, `yrange`, and `zrange`.
+
+ The `title` option is the same as in `plot`. The operation of `with` is also
+ the same as in `plot`, except that the plotting styles available to `splot`
+ are limited to `lines`, `points`, `linespoints`, `dots`, and `impulses`; the
+ error-bar capabilities of `plot` are not available for `splot`.
+
+ The `datafile` options have more differences.
+
+ See also `show plot`.
+?commands splot datafile
+?splot datafile
+ `Splot`, like `plot`, can display from a file.
+
+ Syntax:
+ splot '<file_name>' {binary <binary list>}
+ {{nonuniform} matrix}
+ {index <index list>}
+ {every <every list>}
+ {using <using list>}
+
+ The special filenames `""` and `"-"` are permitted, as in `plot`.
+ See `special-filenames`.
+
+ In brief, `binary` and `matrix` indicate that the data are in a special
+ form, `index` selects which data sets in a multi-data-set file are to be
+ plotted, `every` specifies which datalines (subsets) within a single data
+ set are to be plotted, and `using` determines how the columns within a single
+ record are to be interpreted.
+
+ The options `index` and `every` behave the same way as with `plot`; `using`
+ does so also, except that the `using` list must provide three entries
+ instead of two.
+
+ The `plot` options `thru` and `smooth` are not available for `splot`, but
+ `cntrparam` and `dgrid3d` provide limited smoothing capabilities.
+
+ Data file organization is essentially the same as for `plot`, except that
+ each point is an (x,y,z) triple. If only a single value is provided, it
+ will be used for z, the datablock number will be used for y, and the index
+ of the data point in the datablock will be used for x. If two or four values
+ are provided, `gnuplot` uses the last value for calculating the color in
+ pm3d plots. Three values are interpreted as an (x,y,z) triple. Additional
+ values are generally used as errors, which can be used by `fit`.
+
+ Single blank records separate datablocks in a `splot` datafile; `splot`
+ treats datablocks as the equivalent of function y-isolines. No line will
+ join points separated by a blank record. If all datablocks contain the same
+ number of points, `gnuplot` will draw cross-isolines between datablocks,
+ connecting corresponding points. This is termed "grid data", and is required
+ for drawing a surface, for contouring (`set contour`) and hidden-line removal
+ (`set hidden3d`). See also `splot grid_data`.
+
+ It is no longer necessary to specify `parametric` mode for three-column
+ `splot`s.
+?commands plot datafile matrix
+?commands splot datafile matrix
+?plot datafile matrix binary
+?splot datafile matrix binary
+?plot binary matrix
+?splot binary matrix
+?plot matrix binary
+?splot matrix binary
+?matrix binary
+?binary matrix
+ Gnuplot can interpret matrix input in two different ways.
+ The first of these assumes a uniform grid of x and y coordinates, and assigns
+ each value in the input matrix to one element of this uniform grid.
+ This is the default for ascii data input, but not for binary input.
+ Example commands for plotting uniform matrix data:
+ splot 'file' matrix using 1:2:3 # ascii input
+ splot 'file' binary general using 1:2:3 # binary input
+
+ In a uniform grid matrix the z-values are read in a row at a time, i. e.,
+ z11 z12 z13 z14 ...
+ z21 z22 z23 z24 ...
+ z31 z32 z33 z34 ...
+ and so forth.
+
+ For ascii input, a blank line or comment line ends the matrix, and starts a new
+ surface mesh. You can select among the meshes inside a file by the `index`
+ option to the `splot` command, as usual.
+ The second interpretation assumes a non-uniform grid with explicit x and y
+ coordinates. The first row of input data contains the y coordinates;
+ the first column of input data contains the x coordinates. For binary input
+ data, the first element of the first row must contain the number of data
+ columns. (This number is ignored for ascii input). Both the coordinates and
+ the data values in a binary input are treated as single precision floats.
+ Example commands for plotting non-uniform matrix data:
+ splot 'file' nonuniform matrix using 1:2:3 # ascii input
+ splot 'file' binary matrix using 1:2:3 # binary input
+
+ Thus the data organization for non-uniform matrix input is
+
+ <N+1> <y0> <y1> <y2> ... <yN>
+ <x0> <z0,0> <z0,1> <z0,2> ... <z0,N>
+ <x1> <z1,0> <z1,1> <z1,2> ... <z1,N>
+ : : : : ... :
+
+ which is then converted into triplets:
+ <x0> <y0> <z0,0>
+ <x0> <y1> <z0,1>
+ <x0> <y2> <z0,2>
+ : : :
+ <x0> <yN> <z0,N>
+
+ <x1> <y0> <z1,0>
+ <x1> <y1> <z1,1>
+ : : :
+
+ These triplets are then converted into `gnuplot` iso-curves and then
+ `gnuplot` proceeds in the usual manner to do the rest of the plotting.
+
+ A collection of matrix and vector manipulation routines (in C) is provided
+ in `binary.c`. The routine to write binary data is
+
+ int fwrite_matrix(file,m,nrl,nrl,ncl,nch,row_title,column_title)
+
+ An example of using these routines is provided in the file `bf_test.c`, which
+ generates binary files for the demo file `demo/binary.dem`.
+
+ Usage in `plot`:
+ plot `a.dat` matrix
+ plot `a.dat` matrix using 1:3
+ plot 'a.gpbin' {matrix} binary using 1:3
+ will plot rows of the matrix, while using 2:3 will plot matrix columns, and
+ using 1:2 the point coordinates (rather useless). Applying the `every` option
+ you can specify explicit rows and columns.
+
+ Example -- rescale axes of a matrix in an ascii file:
+ splot `a.dat` matrix using (1+$1):(1+$2*10):3
+
+ Example -- plot the 3rd row of a matrix in an ascii file:
+ plot 'a.dat' matrix using 1:3 every 1:999:1:2
+ (rows are enumerated from 0, thus 2 instead of 3).
+
+ Gnuplot can read matrix binary files by use of the option `binary` appearing
+ without keyword qualifications unique to general binary, i.e., `array`,
+ `record`, `format`, or `filetype`. Other general binary keywords for
+ translation should also apply to matrix binary. (See `binary general` for
+ more details.)
+?commands splot datafile example
+?splot datafile example
+?splot example
+ A simple example of plotting a 3D data file is
+
+ splot 'datafile.dat'
+
+ where the file "datafile.dat" might contain:
+
+ # The valley of the Gnu.
+ 0 0 10
+ 0 1 10
+ 0 2 10
+
+ 1 0 10
+ 1 1 5
+ 1 2 10
+
+ 2 0 10
+ 2 1 1
+ 2 2 10
+
+ 3 0 10
+ 3 1 0
+ 3 2 10
+
+ Note that "datafile.dat" defines a 4 by 3 grid ( 4 rows of 3 points each ).
+ Rows (datablocks) are separated by blank records.
+
+ Note also that the x value is held constant within each dataline. If you
+ instead keep y constant, and plot with hidden-line removal enabled, you will
+ find that the surface is drawn 'inside-out'.
+
+ Actually for grid data it is not necessary to keep the x values constant
+ within a datablock, nor is it necessary to keep the same sequence of y
+ values. `gnuplot` requires only that the number of points be the same for
+ each datablock. However since the surface mesh, from which contours are
+ derived, connects sequentially corresponding points, the effect of an
+ irregular grid on a surface plot is unpredictable and should be examined
+ on a case-by-case basis.
+?commands splot grid_data
+?splot grid_data
+?grid_data
+ The 3D routines are designed for points in a grid format, with one sample,
+ datapoint, at each mesh intersection; the datapoints may originate from
+ either evaluating a function, see `set isosamples`, or reading a datafile,
+ see `splot datafile`. The term "isoline" is applied to the mesh lines for
+ both functions and data. Note that the mesh need not be rectangular in x
+ and y, as it may be parameterized in u and v, see `set isosamples`.
+
+ However, `gnuplot` does not require that format. In the case of functions,
+ 'samples' need not be equal to 'isosamples', i.e., not every x-isoline
+ sample need intersect a y-isoline. In the case of data files, if there
+ are an equal number of scattered data points in each datablock, then
+ "isolines" will connect the points in a datablock, and "cross-isolines"
+ will connect the corresponding points in each datablock to generate a
+ "surface". In either case, contour and hidden3d modes may give different
+ plots than if the points were in the intended format. Scattered data can be
+ converted to a {different} grid format with `set dgrid3d`.
+
+ The contour code tests for z intensity along a line between a point on a
+ y-isoline and the corresponding point in the next y-isoline. Thus a `splot`
+ contour of a surface with samples on the x-isolines that do not coincide with
+ a y-isoline intersection will ignore such samples. Try:
+ set xrange [-pi/2:pi/2]; set yrange [-pi/2:pi/2]
+ set style function lp
+ set contour
+ set isosamples 10,10; set samples 10,10;
+ splot cos(x)*cos(y)
+ set samples 4,10; replot
+ set samples 10,4; replot
+
+?commands splot surfaces
+?splot surfaces
+ `splot` can display a surface as a collection of points, or by connecting
+ those points. As with `plot`, the points may be read from a data file or
+ result from evaluation of a function at specified intervals, see
+ `set isosamples`. The surface may be approximated by connecting the points
+ with straight line segments, see `set surface`, in which case the surface
+ can be made opaque with `set hidden3d.` The orientation from which the 3d
+ surface is viewed can be changed with `set view`.
+
+ Additionally, for points in a grid format, `splot` can interpolate points
+ having a common amplitude (see `set contour`) and can then connect those
+ new points to display contour lines, either directly with straight-line
+ segments or smoothed lines (see `set cntrparam`). Functions are already
+ evaluated in a grid format, determined by `set isosamples` and `set samples`,
+ while file data must either be in a grid format, as described in `data-file`,
+ or be used to generate a grid (see `set dgrid3d`).
+
+ Contour lines may be displayed either on the surface or projected onto the
+ base. The base projections of the contour lines may be written to a
+ file, and then read with `plot`, to take advantage of `plot`'s additional
+ formatting capabilities.
+?commands stats
+?stats
+?statistics
+ Syntax:
+ stats 'filename' [using N[:M]] [name 'prefix'] [[no]output]]
+ This command prepares a statistical summary of the data in one or two columns
+ of a file. The using specifier is interpreted in the same way as for plot
+ commands. See `plot` for details on the `index`, `every`, and `using`
+ directives. Data points are filtered against both xrange and yrange before
+ analysis. See `set xrange`. The summary is printed to the screen by default.
+ Output can be redirected to a file by prior use of the command `set print`,
+ or suppressed altogether using the `nooutput` option.
+
+ In addition to printed output, the program stores the individual statistics
+ into three sets of variables.
+ The first set of variables reports how the data is laid out in the file:
+ STATS_records # total number of in-range data records
+ STATS_outofrange # number of records filtered out by range limits
+ STATS_invalid # number of invalid/incomplete/missing records
+ STATS_blank # number of blank lines in the file
+ STATS_blocks # number of indexable data blocks in the file
+
+ The second set reports properties of the in-range data from a single column.
+ If the corresponding axis is autoscaled (x-axis for the 1st column, y-axis
+ for the optional second column) then no range limits are applied. If two
+ columns are being analysed in a single `stats` command, the the suffix "_x"
+ or "_y" is appended to each variable name. I.e. STATS_min_x is the minimum
+ value found in the first column, while STATS_min_y is the minimum value found
+ in the second column.
+ STATS_min # minimum value of in-range data points
+ STATS_max # maximum value of in-range data points
+ STATS_index_min # index i for which data[i] == STATS_min
+ STATS_index_max # index i for which data[i] == STATS_max
+ STATS_lo_quartile # value of the lower (1st) quartile boundary
+ STATS_median # median value
+ STATS_up_quartile # value of the upper (3rd) quartile boundary
+ STATS_mean # mean value of in-range data points
+ STATS_stddev # standard deviation of the in-range data points
+ STATS_sum # sum
+ STATS_sumsq # sum of squares
+
+ The third set of variables is only relevant to analysis of two data columns.
+ STATS_correlation # correlation coefficient between x and y values
+ STATS_slope # A corresponding to a linear fit y = Ax + B
+ STATS_intercept # B corresponding to a linear fit y = Ax + B
+ STATS_sumxy # sum of x*y
+ STATS_pos_min_y # x coordinate of a point with minimum y value
+ STATS_pos_max_y # x coordinate of a point with maximum y value
+
+ It may be convenient to track the statistics from more than one file at the
+ same time. The `name` option causes the default prefix "STATS" to be replaced
+ by a user-specified string. For example, the mean value of column 2 data from
+ two different files could be compared by
+ stats "file1.dat" using 2 name "A"
+ stats "file2.dat" using 2 name "B"
+ if (A_mean < B_mean) {...}
+
+ The index reported in STATS_index_xxx corresponds to the value of pseudo-column
+ 0 ($0) in plot commands. I.e. the first point has index 0, the last point
+ has index N-1.
+
+ Data values are sorted to find the median and quartile boundaries.
+ If the total number of points N is odd, then the median value is taken as the
+ value of data point (N+1)/2. If N is even, then the median is reported as the
+ mean value of points N/2 and (N+2)/2. Equivalent treatment is used for the
+ quartile boundaries.
+
+ For an example of using the `stats` command to help annotate a subsequent plot,
+ see
+ stats.dem.
+
+ The current implementation does not allow analysis if either the X or Y axis is
+ set to log-scaling. This restriction may be removed in a later version.
+
+?commands system
+?system
+ `system "command"` executes "command" using the standard shell. See `shell`.
+ If called as a function, `system("command")` returns the resulting character
+ stream from stdout as a string. One optional trailing newline is ignored.
+
+ This can be used to import external functions into gnuplot scripts:
+
+ f(x) = real(system(sprintf("somecommand %f", x)))
+?commands test
+?test palette
+?test
+ This command graphically tests or presents terminal and palette capabilities.
+
+ Syntax:
+ test {terminal | palette [rgb|rbg|grb|gbr|brg|bgr]}
+
+ `test` or `test terminal` creates a display of line and point styles and other
+ useful things appropriate for and supported by the `terminal` you are just
+ using.
+
+ `test palette` plots profiles of R(z),G(z),B(z), where 0<=z<=1. These are the
+ RGB components of the current color `palette`. It also plots the apparent net
+ intensity as calculated using NTSC coefficients to map RGB onto a grayscale.
+ The optional parameter, a permutation of letters rgb, determines the sequence in
+ which the r,g,b profiles are drawn.
+?commands undefine
+?undefine
+ Clear one or more previously defined user variables. This is useful in order
+ to reset the state of a script containing an initialization test.
+
+ A variable name can contain the wildcard character `*` as last character. If the
+ wildcard character is found, all variables with names that begin with the prefix
+ preceding the wildcard will be removed. This is useful to remove several variables
+ sharing a common prefix. Note that the wildcard character is only allowed at the
+ end of the variable name! Specifying the wildcard character as sole argument to
+ `undefine` has no effect.
+
+ Example:
+
+ undefine foo foo1 foo2
+ if (!exists("foo")) load "initialize.gp"
+
+ bar = 1; bar1 = 2; bar2 = 3
+ undefine bar* # removes all three variables
+
+?commands unset
+?unset
+ Options set using the `set` command may be returned to their default state by
+ the corresponding `unset` command. The `unset` command may contain an optional
+ iteration clause. See `iteration`.
+
+ Examples:
+ set xtics mirror rotate by -45 0,10,100
+ ...
+ unset xtics
+
+ # Unset labels numbered between 100 and 200
+ unset for [i=100:200] label i
+?unset terminal
+ The default terminal that is active at the time of program entry depends on the
+ system platform, gnuplot build options, and the environmental variable GNUTERM.
+ Whatever this default may be, gnuplot saves it in the internal variable GNUTERM.
+ The `unset terminal` command restores this initial state. It is equivalent to
+ `set terminal GNUTERM`.
+?commands update
+?update
+ This command writes the current values of the fit parameters into the given
+ file, formatted as an initial-value file (as described in the `fit`section).
+ This is useful for saving the current values for later use or for restarting
+ a converged or stopped fit.
+
+ Syntax:
+ update <filename> {<filename>}
+
+ If a second filename is supplied, the updated values are written to this
+ file, and the original parameter file is left unmodified.
+
+ Otherwise, if the file already exists, `gnuplot` first renames it by
+ appending `.old` and then opens a new file. That is, "`update 'fred'`"
+ behaves the same as "`!rename fred fred.old; update 'fred.old' 'fred'`".
+ [On DOS and other systems that use the twelve-character "filename.ext"
+ naming convention, "ext" will be "`old`" and "filename" will be related
+ (hopefully recognizably) to the initial name. Renaming is not done at all
+ on VMS systems, since they use file-versioning.]
+
+ Please see `fit` for more information.
+?while
+?commands while
+ Syntax:
+ while (<expr>) {
+ <commands>
+ }
+ Execute a block of commands repeatedly so long as <expr> evaluates to
+ a non-zero value. This command cannot be mixed with old-style (un-bracketed)
+ if/else statements. See `if`.
+?complete list of terminals
+?terminal
+?term
+ Gnuplot supports a large number of output formats. These are selected by
+ choosing an appropriate terminal type, possibly with additional modifying
+ options. See `set terminal`.
+
+ This document may describe terminal types that are not available to you
+ because they were not configured or installed on your system. To see a list of
+ terminals available on a particular gnuplot installation, type 'set terminal'
+ with no modifiers.
+?commands set terminal gpic
+?set terminal gpic
+?set term gpic
+?terminal gpic
+?term gpic
+?gpic
+ The `gpic` terminal driver generates GPIC graphs in the Free Software
+ Foundations's "groff" package. The default size is 5 x 3 inches. The only
+ option is the origin, which defaults to (0,0).
+
+ Syntax:
+ set terminal gpic {<x> <y>}
+
+ where `x` and `y` are in inches.
+
+ A simple graph can be formatted using
+
+ groff -p -mpic -Tps file.pic > file.ps.
+
+ The output from pic can be pipe-lined into eqn, so it is possible to put
+ complex functions in a graph with the `set label` and `set {x/y}label`
+ commands. For instance,
+
+ set ylab '@space 0 int from 0 to x alpha ( t ) roman d t@'
+
+ will label the y axis with a nice integral if formatted with the command:
+
+ gpic filename.pic | geqn -d@@ -Tps | groff -m[macro-package] -Tps
+ > filename.ps
+
+ Figures made this way can be scaled to fit into a document. The pic language
+ is easy to understand, so the graphs can be edited by hand if need be. All
+ co-ordinates in the pic-file produced by `gnuplot` are given as x+gnuplotx
+ and y+gnuploty. By default x and y are given the value 0. If this line is
+ removed with an editor in a number of files, one can put several graphs in
+ one figure like this (default size is 5.0x3.0 inches):
+
+ .PS 8.0
+ x=0;y=3
+ copy "figa.pic"
+ x=5;y=3
+ copy "figb.pic"
+ x=0;y=0
+ copy "figc.pic"
+ x=5;y=0
+ copy "figd.pic"
+ .PE
+
+ This will produce an 8-inch-wide figure with four graphs in two rows on top
+ of each other.
+
+ One can also achieve the same thing by the command
+
+ set terminal gpic x y
+
+ for example, using
+
+ .PS 6.0
+ copy "trig.pic"
+ .PE
+?commands set terminal regis
+?set terminal regis
+?set term regis
+?terminal regis
+?term regis
+?regis
+ The `regis` terminal device generates output in the REGIS graphics language.
+ It has the option of using 4 (the default) or 16 colors.
+
+ Syntax:
+ set terminal regis {4 | 16}
+?commands set terminal tek410x
+?set terminal tek410x
+?set term tek410x
+?terminal tek410x
+?term tek410x
+?tek410x
+ The `tek410x` terminal driver supports the 410x and 420x family of Tektronix
+ terminals. It has no options.
+?commands set terminal tek40xx
+?set terminal tek40xx
+?set term tek40xx
+?terminal tek40xx
+?term tek40xx
+?tek40
+?commands set terminal vttek
+?set terminal vttek
+?set term vttek
+?terminal vttek
+?term vttek
+?vttek
+?commands set terminal xterm
+?set terminal xterm
+?set term xterm
+?terminal xterm
+?term xterm
+?xterm
+ This family of terminal drivers supports a variety of VT-like terminals.
+ `tek40xx` supports Tektronix 4010 and others as well as most TEK emulators.
+ `vttek` supports VT-like tek40xx terminal emulators.
+ The following are present only if selected when gnuplot is built:
+ `kc-tek40xx` supports MS-DOS Kermit Tek4010 terminal emulators in color;
+ `km-tek40xx` supports them in monochrome. `selanar` supports Selanar graphics.
+ `bitgraph` supports BBN Bitgraph terminals.
+ None have any options.
+?commands set terminal x11
+?set terminal x11
+?set term x11
+?terminal x11
+?term x11
+?x11
+?X11
+
+ Syntax:
+ set terminal x11 {<n> | window "<string>"}
+ {title "<string>"}
+ {{no}enhanced} {font <fontspec>}
+ {linewidth LW} {solid|dashed}
+ {{no}persist} {{no}raise} {{no}ctrlq}
+ {close}
+ {size XX,YY} {position XX,YY}
+ set terminal x11 {reset}
+
+ Multiple plot windows are supported: `set terminal x11 <n>` directs the
+ output to plot window number n. If n is not 0, the terminal number will be
+ appended to the window title (unless a title has been supplied manually)
+ and the icon will be labeled `Gnuplot <n>`. The active window may be
+ distinguished by a change in cursor (from default to crosshair).
+
+ The `x11` terminal can connect to X windows previously created by an outside
+ application via the option `window` followed by a string containing the
+ X ID for the window in hexadecimal format. Gnuplot uses that external X
+ window as a container since X does not allow for multiple clients selecting
+ the ButtonPress event. In this way, gnuplot's mouse features work within
+ the contained plot window.
+
+ set term x11 window "220001e"
+
+ The x11 terminal supports enhanced text mode (see `enhanced`), subject
+ to the available fonts. In order for font size commands embedded in text
+ to have any effect, the default x11 font must be scalable. Thus the first
+ example below will work as expected, but the second will not.
+
+ set term x11 enhanced font "arial,15"
+ set title '{/=20 Big} Medium {/=5 Small}'
+
+ set term x11 enhanced font "terminal-14"
+ set title '{/=20 Big} Medium {/=5 Small}'
+
+ Plot windows remain open even when the `gnuplot` driver is changed to a
+ different device. A plot window can be closed by pressing the letter q
+ while that window has input focus, or by choosing `close` from a window
+ manager menu. All plot windows can be closed by specifying `reset`, which
+ actually terminates the subprocess which maintains the windows (unless
+ `-persist` was specified). The `close` command can be used to close
+ individual plot windows by number. However, after a `reset`, those plot
+ windows left due to persist cannot be closed with the command `close`.
+ A `close` without a number closes the current active plot window.
+
+ The gnuplot outboard driver, gnuplot_x11, is searched in a default place
+ chosen when the program is compiled. You can override that by defining
+ the environment variable GNUPLOT_DRIVER_DIR to point to a different
+ location.
+
+ Plot windows will automatically be closed at the end of the session
+ unless the `-persist` option was given.
+
+ The options `persist` and `raise` are unset by default, which means that
+ the defaults (persist == no and raise == yes) or the command line options
+ -persist / -raise or the Xresources are taken. If [no]persist or
+ [no]raise are specified, they will override command line options and
+ Xresources. Setting one of these options takes place immediately, so
+ the behaviour of an already running driver can be modified. If the window
+ does not get raised, see discussion in `raise`.
+
+ The option `title "<title name>"` will supply the title name of the window
+ for the current plot window or plot window <n> if a number is given.
+ Where (or if) this title is shown depends on your X window manager.
+
+ The size option can be used to set the size of the plot window. The
+ size option will only apply to newly created windows.
+
+ The position option can be used to set the position of the plot window. The
+ position option will only apply to newly created windows.
+
+ The size or aspect ratio of a plot may be changed by resizing the `gnuplot`
+ window.
+
+ Linewidths and pointsizes may be changed from within `gnuplot` with
+ `set linestyle`.
+
+ For terminal type `x11`, `gnuplot` accepts (when initialized) the standard
+ X Toolkit options and resources such as geometry, font, and name from the
+ command line arguments or a configuration file. See the X(1) man page
+ (or its equivalent) for a description of such options.
+
+ A number of other `gnuplot` options are available for the `x11` terminal.
+ These may be specified either as command-line options when `gnuplot` is
+ invoked or as resources in the configuration file ".Xdefaults". They are
+ set upon initialization and cannot be altered during a `gnuplot` session.
+ (except `persist` and `raise`)
+?commands set terminal x11 x11_fonts
+?set terminal x11 x11_fonts
+?set term x11 x11_fonts
+?x11 x11_fonts
+?x11_fonts
+ Upon initial startup, the default font is taken from the X11 resources
+ as set in the system or user .Xdefaults file or on the command line.
+
+ Example:
+ gnuplot*font: lucidasans-bold-12
+ A new default font may be specified to the x11 driver from inside
+ gnuplot using
+ `set term x11 font "<fontspec>"`
+ The driver first queries the X-server for a font of the exact name given.
+ If this query fails, then it tries to interpret <fontspec> as
+ "<font>,<size>,<slant>,<weight>" and to construct a full X11 font name
+ of the form
+ -*-<font>-<weight>-<s>-*-*-<size>-*-*-*-*-*-<encoding>
+
+ <font> is the base name of the font (e.g. Times or Symbol)
+ <size> is the point size (defaults to 12 if not specified)
+ <s> is `i` if <slant>=="italic" `o` if <slant>=="oblique" `r` otherwise
+ <weight> is `medium` or `bold` if explicitly requested, otherwise `*`
+ <encoding> is set based on the current character set (see `set encoding`).
+ So `set term x11 font "arial,15,italic"` will be translated to
+ -*-arial-*-i-*-*-15-*-*-*-*-*-iso8859-1 (assuming default encoding).
+ The <size>, <slant>, and <weight> specifications are all optional.
+ If you do not specify <slant> or <weight> then you will get whatever font
+ variant the font server offers first.
+ You may set a default enconding via the corresponding X11 resource. E.g.
+ gnuplot*encoding: iso8859-15
+ The driver also recognizes some common PostScript font names and
+ replaces them with possible X11 or TrueType equivalents.
+ This same sequence is used to process font requests from `set label`.
+
+ If your gnuplot was built with configuration option --enable-x11-mbfonts,
+ you can specify multi-byte fonts by using the prefix "mbfont:" on the font
+ name. An additional font may be given, separated by a semicolon.
+ Since multi-byte font encodings are interpreted according to the locale
+ setting, you must make sure that the environmental variable LC_CTYPE is set
+ to some appropriate locale value such as ja_JP.eucJP, ko_KR.EUC, or zh_CN.EUC.
+
+ Example:
+ set term x11 font 'mbfont:kana14;k14'
+ # 'kana14' and 'k14' are Japanese X11 font aliases, and ';'
+ # is the separator of font names.
+ set term x11 font 'mbfont:fixed,16,r,medium'
+ # <font>,<size>,<slant>,<weight> form is also usable.
+ set title '(mb strings)' font 'mbfont:*-fixed-medium-r-normal--14-*'
+
+ The same syntax applies to the default font in Xresources settings,
+ for example,
+ gnuplot*font: \
+ mbfont:-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0
+
+ If gnuplot is built with --enable-x11-mbfonts, you can use two special
+ PostScript font names 'Ryumin-Light-*' and 'GothicBBB-Medium-*' (standard
+ Japanese PS fonts) without the prefix "mbfont:".
+
+?commands set terminal x11 command-line-options
+?set terminal x11 command-line-options
+?set term x11 command-line-options
+?x11 command-line-options
+?command-line-options
+ In addition to the X Toolkit options, the following options may be specified
+ on the command line when starting `gnuplot` or as resources in your
+ ".Xdefaults" file (note that `raise` and `persist` can be overridden
+ later by `set term x11 [no]raise [no]persist)`:
+ `-mono` forces monochrome rendering on color displays.
+ `-gray` requests grayscale rendering on grayscale or color displays.
+ (Grayscale displays receive monochrome rendering by default.)
+ `-clear` requests that the window be cleared momentarily before a
+ new plot is displayed.
+ `-tvtwm` requests that geometry specifications for position of the
+ window be made relative to the currently displayed portion
+ of the virtual root.
+ `-raise` raises plot window after each plot
+ `-noraise` does not raise plot window after each plot
+ `-noevents` does not process mouse and key events
+ `-ctrlq ` closes window on ctrl-q rather than q
+ `-persist` plot windows survive after main gnuplot program exits
+ The options are shown above in their command-line syntax. When entered as
+ resources in ".Xdefaults", they require a different syntax.
+
+ Example:
+ gnuplot*gray: on
+ gnuplot*ctrlq: on
+
+ `gnuplot` also provides a command line option (`-pointsize <v>`) and a
+ resource, `gnuplot*pointsize: <v>`, to control the size of points plotted
+ with the `points` plotting style. The value `v` is a real number (greater
+ than 0 and less than or equal to ten) used as a scaling factor for point
+ sizes. For example, `-pointsize 2` uses points twice the default size, and
+ `-pointsize 0.5` uses points half the normal size.
+
+ The `-noevents` switch disables all mouse and key event processing (except
+ for `q` and `<space>` for closing the window). This is useful for programs
+ which use the x11 driver independent of the gnuplot main program.
+
+ The `-ctrlq` switch changes the hot-key that closes a plot window from `q`
+ to `<ctrl>q`. This is useful is you are using the keystroke-capture feature
+ `pause mouse keystroke`, since it allows the character `q` to be captured
+ just as all other alphanumeric characters. The `-ctrlq` switch similarly
+ replaces the <space> hot-key with <ctrl><space> for the same reason.
+
+?commands set terminal x11 monochrome_options
+?set terminal x11 monochrome_options
+?set term x11 monochrome_options
+?x11 monochrome_options
+?monochrome_options
+ For monochrome displays, `gnuplot` does not honor foreground or background
+ colors. The default is black-on-white. `-rv` or `gnuplot*reverseVideo: on`
+ requests white-on-black.
+
+?commands set terminal x11 color_resources
+?set terminal x11 color_resources
+?set term x11 color_resources
+?x11 color_resources
+?color_resources
+ The X11 terminal honors the following resources (shown here with their
+ default values) or the greyscale resources. The values may be color names
+ as listed in the X11 rgb.txt file on your system, hexadecimal RGB color
+ specifications (see X11 documentation), or a color name followed by a comma
+ and an `intensity` value from 0 to 1. For example, `blue, 0.5` means a half
+ intensity blue.
+ gnuplot*background: white
+ gnuplot*textColor: black
+ gnuplot*borderColor: black
+ gnuplot*axisColor: black
+ gnuplot*line1Color: red
+ gnuplot*line2Color: green
+ gnuplot*line3Color: blue
+ gnuplot*line4Color: magenta
+ gnuplot*line5Color: cyan
+ gnuplot*line6Color: sienna
+ gnuplot*line7Color: orange
+ gnuplot*line8Color: coral
+
+ The command-line syntax for these is simple only for background,
+ which maps directly to the usual X11 toolkit option "-bg". All
+ others can only be set on the command line by use of the generic
+ "-xrm" resource override option
+
+ Examples:
+
+ gnuplot -background coral
+ to change the background color.
+
+ gnuplot -xrm 'gnuplot*line1Color:blue'
+ to override the first linetype color.
+
+?commands set terminal x11 grayscale_resources
+?set terminal x11 grayscale_resources
+?set term x11 grayscale_resources
+?x11 grayscale_resources
+?grayscale_resources
+ When `-gray` is selected, `gnuplot` honors the following resources for
+ grayscale or color displays (shown here with their default values). Note
+ that the default background is black.
+ gnuplot*background: black
+ gnuplot*textGray: white
+ gnuplot*borderGray: gray50
+ gnuplot*axisGray: gray50
+ gnuplot*line1Gray: gray100
+ gnuplot*line2Gray: gray60
+ gnuplot*line3Gray: gray80
+ gnuplot*line4Gray: gray40
+ gnuplot*line5Gray: gray90
+ gnuplot*line6Gray: gray50
+ gnuplot*line7Gray: gray70
+ gnuplot*line8Gray: gray30
+
+?commands set terminal x11 line_resources
+?set terminal x11 line_resources
+?set term x11 line_resources
+?x11 line_resources
+?line_resources
+ `gnuplot` honors the following resources for setting the width (in pixels) of
+ plot lines (shown here with their default values.) 0 or 1 means a minimal
+ width line of 1 pixel width. A value of 2 or 3 may improve the appearance of
+ some plots.
+ gnuplot*borderWidth: 2
+ gnuplot*axisWidth: 0
+ gnuplot*line1Width: 0
+ gnuplot*line2Width: 0
+ gnuplot*line3Width: 0
+ gnuplot*line4Width: 0
+ gnuplot*line5Width: 0
+ gnuplot*line6Width: 0
+ gnuplot*line7Width: 0
+ gnuplot*line8Width: 0
+
+ `gnuplot` honors the following resources for setting the dash style used for
+ plotting lines. 0 means a solid line. A two-digit number `jk` (`j` and `k`
+ are >= 1 and <= 9) means a dashed line with a repeated pattern of `j` pixels
+ on followed by `k` pixels off. For example, '16' is a dotted line with one
+ pixel on followed by six pixels off. More elaborate on/off patterns can be
+ specified with a four-digit value. For example, '4441' is four on, four off,
+ four on, one off. The default values shown below are for monochrome displays
+ or monochrome rendering on color or grayscale displays.
+ Color displays default to dashed:off
+ gnuplot*dashed: off
+ gnuplot*borderDashes: 0
+ gnuplot*axisDashes: 16
+ gnuplot*line1Dashes: 0
+ gnuplot*line2Dashes: 42
+ gnuplot*line3Dashes: 13
+ gnuplot*line4Dashes: 44
+ gnuplot*line5Dashes: 15
+ gnuplot*line6Dashes: 4441
+ gnuplot*line7Dashes: 42
+ gnuplot*line8Dashes: 13
+
+?commands set terminal x11 pm3d_resources
+?set terminal x11 pm3d_resources
+?set term x11 pm3d_resources
+?x11 pm3d_resources
+?pm3d_resources
+?x11 pm3d
+ Choosing the appropriate visual class and number of colors is a crucial
+ point in X11 applications and a bit awkward, since X11 supports six visual
+ types in different depths.
+
+ By default `gnuplot` uses the default visual of the screen. The number of
+ colors which can be allocated depends on the visual class chosen. On a
+ visual class with a depth > 12bit, gnuplot starts with a maximal number
+ of 0x200 colors. On a visual class with a depth > 8bit (but <= 12 bit)
+ the maximal number of colors is 0x100, on <= 8bit displays the maximum
+ number of colors is 240 (16 are left for line colors).
+
+ Gnuplot first starts to allocate the maximal number of colors as stated
+ above. If this fails, the number of colors is reduced by the factor 2
+ until gnuplot gets all colors which are requested. If dividing `maxcolors`
+ by 2 repeatedly results in a number which is smaller than `mincolors`
+ `gnuplot` tries to install a private colormap. In this case the window
+ manager is responsible for swapping colormaps when the pointer is moved
+ in and out the x11 driver's window.
+
+ The default for `mincolors` is maxcolors / (num_colormaps > 1 ? 2 : 8),
+ where num_colormaps is the number of colormaps which are currently used
+ by gnuplot (usually 1, if only one x11 window is open).
+
+ Some systems support multiple (different) visual classes together on one
+ screen. On these systems it might be necessary to force gnuplot to use a
+ specific visual class, e.g. the default visual might be 8bit PseudoColor
+ but the screen would also support 24bit TrueColor which would be the
+ preferred choice.
+
+ The information about an Xserver's capabilities can be obtained with the
+ program `xdpyinfo`. For the visual names below you can choose one of
+ StaticGray, GrayScale, StaticColor, PseudoColor, TrueColor, DirectColor.
+ If an Xserver supports a requested visual type at different depths,
+ `gnuplot` chooses the visual class with the highest depth (deepest).
+ If the requested visual class matches the default visual and multiple
+ classes of this type are supported, the default visual is preferred.
+
+ Example: on an 8bit PseudoColor visual you can force a private color map
+ by specifying `gnuplot*maxcolors: 240` and `gnuplot*mincolors: 240`.
+
+ gnuplot*maxcolors: <integer>
+ gnuplot*mincolors: <integer>
+ gnuplot*visual: <visual name>
+
+?commands set terminal x11 other_resources
+?set terminal x11 other_resources
+?set term x11 other_resources
+?x11 other_resources
+ By default the contents of the current plot window are exported to the X11
+ clipboard in response to X events in the window. Setting the resource
+ 'gnuplot*exportselection' to 'off' or 'false' will disable this.
+
+ By default text rotation is done using a method that is fast, but can
+ corrupt nearby colors depending on the background. If this is a problem,
+ you can set the resource 'gnuplot.fastrotate' to 'off'
+
+ gnuplot*exportselection: off
+ gnuplot*fastrotate: on
+ gnuplot*ctrlq: off
+?commands set terminal xlib
+?set terminal xlib
+?set term xlib
+?terminal xlib
+?term xlib
+?xlib
+ The `xlib` terminal driver supports the X11 Windows System. It generates
+ gnuplot_x11 commands, but sends them to the output file specified by
+ `set output '<filename>'`. `set term x11` is equivalent to
+ `set output "|gnuplot_x11 -noevents"; set term xlib`.
+ `xlib` takes the same set of options as `x11`.
+?commands set terminal canvas
+?set terminal canvas
+?set term canvas
+?terminal canvas
+?term canvas
+
+ The `canvas` terminal creates a set of javascript commands that draw onto the
+ HTML5 canvas element.
+ Syntax:
+ set terminal canvas {size <xsize>, <ysize>} {background <rgb_color>}
+ {font {<fontname>}{,<fontsize>}} | {fsize <fontsize>}
+ {{no}enhanced} {linewidth <lw>}
+ {rounded | butt}
+ {solid | dashed {dashlength <dl>}}
+ {standalone {mousing} | name '<funcname>'}
+ {jsdir 'URL/for/javascripts'}
+ {title '<some string>'}
+
+ where <xsize> and <ysize> set the size of the plot area in pixels.
+ The default size in standalone mode is 600 by 400 pixels.
+ The default font size is 10.
+
+ NB: Only one font is available, the ascii portion of Hershey simplex Roman
+ provided in the file canvastext.js. You can replace this with the file
+ canvasmath.js, which contains also UTF-8 encoded Hershey simplex Greek and
+ math symbols. For consistency with other terminals, it is also possible to
+ use `font "name,size"`. Currently the font `name` is ignored, but browser
+ support for named fonts is likely to arrive eventually.
+
+ The default `standalone` mode creates an html page containing javascript
+ code that renders the plot using the HTML 5 canvas element. The html page
+ links to two required javascript files 'canvastext.js' and 'gnuplot_common.js'.
+ An additional file 'gnuplot_dashedlines.js' is needed to support dashed lines.
+ By default these point to local files, on unix-like systems usually in
+ directory /usr/local/share/gnuplot/<version>/js. See installation notes for
+ other platforms. You can change this by using the `jsdir` option to specify
+ either a different local directory or a general URL. The latter is usually
+ appropriate if the plot is exported for viewing on remote client machines.
+
+ All plots produced by the canvas terminal are mouseable. The additional
+ keyword `mousing` causes the `standalone` mode to add a mouse-tracking box
+ underneath the plot. It also adds a link to a javascript file
+ 'gnuplot_mouse.js' and to a stylesheet for the mouse box 'gnuplot_mouse.css'
+ in the same local or URL directory as 'canvastext.js'.
+
+ The `name` option creates a file containing only javascript. Both the
+ javascript function it contains and the id of the canvas element that it
+ draws onto are taken from the following string parameter. The commands
+ set term canvas name 'fishplot'
+ set output 'fishplot.js'
+ will create a file containing a javascript function fishplot() that will
+ draw onto a canvas with id=fishplot. An html page that invokes this
+ javascript function must also load the canvastext.js function as described
+ above. A minimal html file to wrap the fishplot created above might be:
+
+ <html>
+ <head>
+ <script src="canvastext.js"></script>
+ <script src="gnuplot_common.js"></script>
+ </head>
+ <body onload="fishplot();">
+ <script src="fishplot.js"></script>
+ <canvas id="fishplot" width=600 height=400>
+ <div id="err_msg">No support for HTML 5 canvas element</div>
+ </canvas>
+ </body>
+ </html>
+
+ The individual plots drawn on this canvas will have names fishplot_plot_1,
+ fishplot_plot_2, and so on. These can be referenced by external javascript
+ routines, for example gnuplot.toggle_visibility("fishplot_plot_2").
+
+?commands set terminal cgm
+?set terminal cgm
+?set term cgm
+?terminal cgm
+?term cgm
+?cgm
+ The `cgm` terminal generates a Computer Graphics Metafile, Version 1.
+ This file format is a subset of the ANSI X3.122-1986 standard entitled
+ "Computer Graphics - Metafile for the Storage and Transfer of Picture
+ Description Information".
+
+ Syntax:
+ set terminal cgm {color | monochrome} {solid | dashed} {{no}rotate}
+ {<mode>} {width <plot_width>} {linewidth <line_width>}
+ {font "<fontname>,<fontsize>"}
+ {background <rgb_color>}
+ [deprecated] {<color0> <color1> <color2> ...}
+
+ `solid` draws all curves with solid lines, overriding any dashed patterns;
+ <mode> is `landscape`, `portrait`, or `default`;
+ <plot_width> is the assumed width of the plot in points;
+ <line_width> is the line width in points (default 1);
+ <fontname> is the name of a font (see list of fonts below)
+ <fontsize> is the size of the font in points (default 12).
+
+ The first six options can be in any order. Selecting `default` sets all
+ options to their default values.
+
+ The mechanism of setting line colors in the `set term` command is
+ deprecated. Instead you should set the background using a separate
+ keyword and set the line colors using `set linetype`.
+ The deprecated mechanism accepted colors of the form 'xrrggbb', where x is
+ the literal character 'x' and 'rrggbb' are the red, green and blue components
+ in hex. The first color was used for the background, subsequent colors are
+ assigned to successive line types.
+
+ Examples:
+ set terminal cgm landscape color rotate dashed width 432 \
+ linewidth 1 'Helvetica Bold' 12 # defaults
+ set terminal cgm linewidth 2 14 # wider lines & larger font
+ set terminal cgm portrait "Times Italic" 12
+ set terminal cgm color solid # no pesky dashes!
+?commands set terminal cgm font
+?set terminal cgm font
+?set term cgm font
+?cgm font
+ The first part of a Computer Graphics Metafile, the metafile description,
+ includes a font table. In the picture body, a font is designated by an
+ index into this table. By default, this terminal generates a table with
+ the following 35 fonts, plus six more with `italic` replaced by
+ `oblique`, or vice-versa (since at least the Microsoft Office and Corel
+ Draw CGM import filters treat `italic` and `oblique` as equivalent):
+ Helvetica
+ Helvetica Bold
+ Helvetica Oblique
+ Helvetica Bold Oblique
+ Times Roman
+ Times Bold
+ Times Italic
+ Times Bold Italic
+ Courier
+ Courier Bold
+ Courier Oblique
+ Courier Bold Oblique
+ Symbol
+ Hershey/Cartographic_Roman
+ Hershey/Cartographic_Greek
+ Hershey/Simplex_Roman
+ Hershey/Simplex_Greek
+ Hershey/Simplex_Script
+ Hershey/Complex_Roman
+ Hershey/Complex_Greek
+ Hershey/Complex_Script
+ Hershey/Complex_Italic
+ Hershey/Complex_Cyrillic
+ Hershey/Duplex_Roman
+ Hershey/Triplex_Roman
+ Hershey/Triplex_Italic
+ Hershey/Gothic_German
+ Hershey/Gothic_English
+ Hershey/Gothic_Italian
+ Hershey/Symbol_Set_1
+ Hershey/Symbol_Set_2
+ Hershey/Symbol_Math
+ ZapfDingbats
+ Script
+ 15
+ The first thirteen of these fonts are required for WebCGM. The
+ Microsoft Office CGM import filter implements the 13 standard fonts
+ listed above, and also 'ZapfDingbats' and 'Script'. However, the
+ script font may only be accessed under the name '15'. For more on
+ Microsoft import filter font substitutions, check its help file which
+ you may find here:
+ C:\Program Files\Microsoft Office\Office\Cgmimp32.hlp
+ and/or its configuration file, which you may find here:
+ C:\Program Files\Common Files\Microsoft Shared\Grphflt\Cgmimp32.cfg
+
+ In the `set term` command, you may specify a font name which does not
+ appear in the default font table. In that case, a new font table is
+ constructed with the specified font as its first entry. You must ensure
+ that the spelling, capitalization, and spacing of the name are
+ appropriate for the application that will read the CGM file. (Gnuplot
+ and any MIL-D-28003A compliant application ignore case in font names.)
+ If you need to add several new fonts, use several `set term` commands.
+
+ Example:
+ set terminal cgm 'Old English'
+ set terminal cgm 'Tengwar'
+ set terminal cgm 'Arabic'
+ set output 'myfile.cgm'
+ plot ...
+ set output
+
+ You cannot introduce a new font in a `set label` command.
+?commands set terminal cgm fontsize
+?set terminal cgm fontsize
+?set term cgm fontsize
+?cgm fontsize
+ Fonts are scaled assuming the page is 6 inches wide. If the `size`
+ command is used to change the aspect ratio of the page or the CGM file
+ is converted to a different width, the resulting font sizes will be
+ scaled up or down accordingly. To change the assumed width, use the
+ `width` option.
+?commands set terminal cgm linewidth
+?set terminal cgm linewidth
+?set term cgm linewidth
+?cgm linewidth
+ The `linewidth` option sets the width of lines in pt. The default width
+ is 1 pt. Scaling is affected by the actual width of the page, as
+ discussed under the `fontsize` and `width` options.
+?commands set terminal cgm rotate
+?set terminal cgm rotate
+?set term cgm rotate
+?cgm rotate
+ The `norotate` option may be used to disable text rotation. For
+ example, the CGM input filter for Word for Windows 6.0c can accept
+ rotated text, but the DRAW editor within Word cannot. If you edit a
+ graph (for example, to label a curve), all rotated text is restored to
+ horizontal. The Y axis label will then extend beyond the clip boundary.
+ With `norotate`, the Y axis label starts in a less attractive location,
+ but the page can be edited without damage. The `rotate` option confirms
+ the default behavior.
+?set terminal cgm solid
+?set term cgm solid
+?cgm solid
+ The `solid` option may be used to disable dashed line styles in the
+ plots. This is useful when color is enabled and the dashing of the
+ lines detracts from the appearance of the plot. The `dashed` option
+ confirms the default behavior, which gives a different dash pattern to
+ each line type.
+?commands set terminal cgm size
+?set terminal cgm size
+?set term cgm size
+?cgm size
+ Default size of a CGM plot is 32599 units wide and 23457 units high for
+ landscape, or 23457 units wide by 32599 units high for portrait.
+?commands set terminal cgm width
+?set terminal cgm width
+?set term cgm width
+?cgm width
+ All distances in the CGM file are in abstract units. The application
+ that reads the file determines the size of the final plot. By default,
+ the width of the final plot is assumed to be 6 inches (15.24 cm). This
+ distance is used to calculate the correct font size, and may be changed
+ with the `width` option. The keyword should be followed by the width in
+ points. (Here, a point is 1/72 inch, as in PostScript. This unit is
+ known as a "big point" in TeX.) Gnuplot `expressions` can be used to
+ convert from other units.
+
+ Example:
+ set terminal cgm width 432 # default
+ set terminal cgm width 6*72 # same as above
+ set terminal cgm width 10/2.54*72 # 10 cm wide
+?commands set terminal cgm nofontlist
+?set terminal cgm nofontlist
+?set term cgm nofontlist
+?cgm nofontlist
+?set terminal cgm winword6
+?set term cgm winword6
+?cgm winword6
+ The default font table includes the fonts recommended for WebCGM, which
+ are compatible with the Computer Graphics Metafile input filter for
+ Microsoft Office and Corel Draw. Another application might use
+ different fonts and/or different font names, which may not be
+ documented. The `nofontlist` (synonym `winword6`) option deletes the font
+ table from the CGM file. In this case, the reading application should
+ use a default table. Gnuplot will still use its own default font table
+ to select font indices. Thus, 'Helvetica' will give you an index of 1,
+ which should get you the first entry in your application's default font
+ table. 'Helvetica Bold' will give you its second entry, etc.
+
+?commands set terminal corel
+?set terminal corel
+?set term corel
+?terminal corel
+?term corel
+?corel
+ The `corel` terminal driver supports CorelDraw.
+
+ Syntax:
+ set terminal corel { default
+ | {monochrome | color
+ {"<font>" {<fontsize>
+ {<xsize> <ysize> {<linewidth> }}}}}
+
+ where the fontsize and linewidth are specified in points and the sizes in
+ inches. The defaults are monochrome, "SwitzerlandLight", 22, 8.2, 10 and 1.2.
+?commands set terminal dumb
+?set terminal dumb
+?set term dumb
+?terminal dumb
+?term dumb
+?dumb
+ The `dumb` terminal driver plots into a text block using ascii characters.
+ It has an optional size specification and a trailing linefeed flag.
+
+ Syntax:
+ set terminal dumb {size <xchars>,<ychars>} {[no]feed}
+ {[no]enhanced}
+
+ where <xchars> and <ychars> set the size of the text block. The default is
+ 79 by 24. The last newline is printed only if `feed` is enabled.
+
+ Example:
+ set term dumb size 60,15
+ plot [-5:6.5] sin(x) with impulse
+
+ 1 +-------------------------------------------------+
+ 0.8 +|||++ ++||||++ sin(x) +----+ |
+ 0.6 +|||||+ ++|||||||+ |
+ 0.4 +||||||+ ++|||||||||+ |
+ 0.2 +|||||||+ ++|||||||||||+ +|
+ 0 ++++++++++++++++++++++++++++++++++++++++++++++++++|
+ -0.2 + +|||||||||||+ +|||||||||||+ |
+ -0.4 + +|||||||||+ +|||||||||+ |
+ -0.6 + +|||||||+ +|||||||+ |
+ -0.8 + + ++||||+ + + ++||||+ + |
+ -1 +---+--------+--------+-------+--------+--------+-+
+ -4 -2 0 2 4 6
+?commands set terminal dxf
+?set terminal dxf
+?set term dxf
+?terminal dxf
+?term dxf
+?dxf
+ The `dxf` terminal driver creates pictures that can be imported into AutoCad
+ (Release 10.x). It has no options of its own, but some features of its plots
+ may be modified by other means. The default size is 120x80 AutoCad units,
+ which can be changed by `set size`. `dxf` uses seven colors (white, red,
+ yellow, green, cyan, blue and magenta), which can be changed only by
+ modifying the source file. If a black-and-white plotting device is used, the
+ colors are mapped to differing line thicknesses. See the description of the
+ AutoCad print/plot command.
+?commands set terminal emf
+?set terminal emf
+?set term emf
+?terminal emf
+?term emf
+?emf
+ The `emf` terminal generates an Enhanced Metafile Format file.
+ This file format is recognized by many Windows applications.
+
+ Syntax:
+ set terminal emf {color | monochrome} {solid | dashed}
+ {enhanced {noproportional}}
+ {rounded | butt}
+ {linewidth <LW>} {dashlength <DL>}
+ {size XX,YY} {background <rgb_color>}
+ {font "<fontname>{,<fontsize>}"}
+ {fontscale <scale>}
+
+ In `monochrome` mode successive line types cycle through dash patterns.
+ In `color` mode successive line types use successive colors, and only after
+ all 8 default colors are exhausted is the dash pattern incremented.
+ `solid` draws all curves with solid lines, overriding any dashed patterns;
+ `linewidth <factor>` multiplies all line widths by this factor.
+ `dashlength <factor>` is useful for thick lines.
+ <fontname> is the name of a font; and
+ `<fontsize>` is the size of the font in points.
+
+ The nominal size of the output image defaults to 1024x768 in arbitrary
+ units. You may specify a different nominal size using the `size` option.
+
+ Enhanced text mode tries to approximate proportional character spacing.
+ If you are using a monospaced font, or don't like the approximation, you
+ can turn off this correction using the `noproportional` option.
+
+ The default settings are `color solid font "Arial,12" size 1024,768`
+ Selecting `default` sets all options to their default values.
+
+ Examples:
+ set terminal emf 'Times Roman Italic, 12'
+ set terminal emf dashed # otherwise all lines are solid
+?commands set terminal fig
+?set terminal fig
+?set term fig
+?terminal fig
+?term fig
+?fig
+?xfig
+ The `fig` terminal device generates output in the Fig graphics language.
+
+ Syntax:
+ set terminal fig {monochrome | color}
+ {landscape | portrait}
+ {small | big | size <xsize> <ysize>}
+ {metric | inches}
+ {pointsmax <max_points>}
+ {solid | dashed}
+ {font "<fontname>{,<fontsize>}"}
+ {textnormal | {textspecial texthidden textrigid}}
+ {{thickness|linewidth} <units>}
+ {depth <layer>}
+ {version <number>}
+
+ `monochrome` and `color` determine whether the picture is black-and-white or
+ `color`. `small` and `big` produce a 5x3 or 8x5 inch graph in the default
+ `landscape` mode and 3x5 or 5x8 inches in `portrait` mode.
+ `size` sets (overrides) the size of the drawing
+ area to <xsize>*<ysize> in units of inches or centimeters depending on the
+ `inches` or `metric` setting in effect.
+ The latter settings is also used as default units for editing with "xfig".
+
+ `pointsmax <max_points>` sets the maximum number of points per polyline.
+
+ `solid` inhibits automatic usage of `dash`ed lines when solid linestyles are
+ used up, which otherwise occurs.
+
+ `font` sets the text font face to <fontname> and its size to <fontsize>
+ points. `textnormal` resets the text flags and selects postscript fonts,
+ `textspecial` sets the text flags for LaTeX specials, `texthidden` sets the
+ hidden flag and `textrigid` the rigid flag.
+
+ `depth` sets the default depth layer for all lines and text. The default
+ depth is 10 to leave room for adding material with "xfig" on top of the
+ plot.
+
+ `version` sets the format version of the generated fig output. Currently
+ only versions 3.1 and 3.2 are supported.
+
+ `thickness` sets the default line thickness, which is 1 if not specified.
+ Overriding the thickness can be achieved by adding a multiple of 100 to the
+ `linetype` value for a `plot` command. In a similar way the `depth`
+ of plot elements (with respect to the default depth) can be controlled by
+ adding a multiple of 1000 to <linetype>. The depth is then <layer> +
+ <linetype>/1000 and the thickness is (<linetype>%1000)/100 or, if that is
+ zero, the default line thickness. `linewidth` is a synonym for `thickness`.
+
+ Additional point-plot symbols are also available with the `fig` driver. The
+ symbols can be used through `pointtype` values % 100 above 50, with different
+ fill intensities controlled by <pointtype> % 5 and outlines in black (for
+ <pointtype> % 10 < 5) or in the current color. Available symbols are
+ 50 - 59: circles
+ 60 - 69: squares
+ 70 - 79: diamonds
+ 80 - 89: upwards triangles
+ 90 - 99: downwards triangles
+ The size of these symbols is linked to the font size. The depth of symbols
+ is by default one less than the depth for lines to achieve nice error bars.
+ If <pointtype> is above 1000, the depth is <layer> + <pointtype>/1000-1. If
+ <pointtype>%1000 is above 100, the fill color is (<pointtype>%1000)/100-1.
+
+ Available fill colors are (from 1 to 9): black, blue, green, cyan, red,
+ magenta, yellow, white and dark blue (in monochrome mode: black for 1 to 6
+ and white for 7 to 9).
+
+ See `plot with` for details of <linetype> and <pointtype>.
+
+ The `big` option is a substitute for the `bfig` terminal in earlier versions,
+ which is no longer supported.
+
+ Examples:
+ set terminal fig monochrome small pointsmax 1000 # defaults
+
+ plot 'file.dat' with points linetype 102 pointtype 759
+ would produce circles with a blue outline of width 1 and yellow fill color.
+
+ plot 'file.dat' using 1:2:3 with err linetype 1 pointtype 554
+ would produce errorbars with black lines and circles filled red. These
+ circles are one layer above the lines (at depth 9 by default).
+
+ To plot the error bars on top of the circles use
+ plot 'file.dat' using 1:2:3 with err linetype 1 pointtype 2554
+?commands set terminal hp2623a
+?set terminal hp2623a
+?set term hp2623a
+?terminal hp2623a
+?term hp2623a
+?hp2623a
+ The `hp2623a` terminal driver supports the Hewlett Packard HP2623A. It has
+ no options.
+?commands set terminal hp2648
+?set terminal hp2648
+?set term hp2648
+?terminal hp2648
+?term hp2648
+?hp2648
+ The `hp2648` terminal driver supports the Hewlett Packard HP2647 and HP2648.
+ It has no options.
+?commands set terminal hpgl
+?set terminal hpgl
+?set term hpgl
+?terminal hpgl
+?term hpgl
+?hpgl
+?commands set terminal pcl5
+?set terminal pcl5
+?set term pcl5
+?terminal pcl5
+?term pcl5
+?pcl5
+ The `hpgl` driver produces HPGL output for devices like the HP7475A plotter.
+ There are two options which can be set: the number of pens and `eject`,
+ which tells the plotter to eject a page when done. The default is to use 6
+ pens and not to eject the page when done.
+
+ The international character sets ISO-8859-1 and CP850 are recognized via
+ `set encoding iso_8859_1` or `set encoding cp850` (see `set encoding` for
+ details).
+
+ Syntax:
+ set terminal hpgl {<number_of_pens>} {eject}
+
+ The selection
+
+ set terminal hpgl 8 eject
+
+ is equivalent to the previous `hp7550` terminal, and the selection
+
+ set terminal hpgl 4
+
+ is equivalent to the previous `hp7580b` terminal.
+
+ The `pcl5` driver supports plotters such as the Hewlett-Packard Designjet
+ 750C, the Hewlett-Packard Laserjet III, and the Hewlett-Packard Laserjet IV.
+ It actually uses HPGL-2, but there is a name conflict among the terminal
+ devices. It has several options which must be specified in the order
+ indicated below:
+
+ Syntax:
+ set terminal pcl5 {mode <mode>} {<plotsize>}
+ {{color {<number_of_pens>}} | monochrome} {solid | dashed}
+ {font <font>} {size <fontsize>} {pspoints | nopspoints}
+
+ <mode> is `landscape` or `portrait`. <plotsize> is the physical
+ plotting size of the plot, which is one of the following: `letter` for
+ standard (8 1/2" X 11") displays, `legal` for (8 1/2" X 14") displays,
+ `noextended` for (36" X 48") displays (a letter size ratio) or,
+ `extended` for (36" X 55") displays (almost a legal size ratio).
+ `color` is for multi-pen (i.e. color) plots, and <number_of_pens> is
+ the number of pens (i.e. colors) used in color plots. `monochrome` is for
+ one (e.g. black) pen plots. `solid` draws all lines as solid lines, or
+ `dashed` will draw lines with different dashed and dotted line patterns.
+ <font> is `stick`, `univers`, `cg_times`, `zapf_dingbats`, `antique_olive`,
+ `arial`, `courier`, `garamond_antigua`, `letter_gothic`, `cg_omega`,
+ `albertus`, `times_new_roman`, `clarendon`, `coronet`, `marigold`,
+ `truetype_symbols`, or `wingdings`. <fontsize> is the font size in points.
+ The point type selection can be the standard default set by specifying
+ `nopspoints`, or the same set of point types found in the postscript terminal
+ by specifying `pspoints`.
+
+ Note that built-in support of some of these options is printer device
+ dependent. For instance, all the fonts are supposedly supported by the HP
+ Laserjet IV, but only a few (e.g. univers, stick) may be supported by the HP
+ Laserjet III and the Designjet 750C. Also, color obviously won't work on the
+ the laserjets since they are monochrome devices.
+
+ Defaults: landscape, noextended, color (6 pens), solid, univers, 12 point,
+ and nopspoints.
+
+ With `pcl5` international characters are handled by the printer; you just put
+ the appropriate 8-bit character codes into the text strings. You don't need
+ to bother with `set encoding`.
+
+ HPGL graphics can be imported by many software packages.
+?commands set terminal imagen
+?set terminal imagen
+?set term imagen
+?terminal imagen
+?term imagen
+?imagen
+ The `imagen` terminal driver supports Imagen laser printers. It is capable
+ of placing multiple graphs on a single page.
+
+ Syntax:
+ set terminal imagen {<fontsize>} {portrait | landscape}
+ {[<horiz>,<vert>]}
+
+ where `fontsize` defaults to 12 points and the layout defaults to `landscape`.
+ `<horiz>` and `<vert>` are the number of graphs in the horizontal and
+ vertical directions; these default to unity.
+
+ Example:
+ set terminal imagen portrait [2,3]
+
+ puts six graphs on the page in three rows of two in portrait orientation.
+?commands set terminal mif
+?set terminal mif
+?set term mif
+?terminal mif
+?term mif
+?mif
+ The `mif` terminal driver produces Frame Maker MIF format version 3.00. It
+ plots in MIF Frames with the size 15*10 cm, and plot primitives with the same
+ pen will be grouped in the same MIF group. Plot primitives in a `gnuplot`
+ page will be plotted in a MIF Frame, and several MIF Frames are collected in
+ one large MIF Frame. The MIF font used for text is "Times".
+
+ Several options may be set in the MIF 3.00 driver.
+
+ Syntax:
+ set terminal mif {color | colour | monochrome} {polyline | vectors}
+ {help | ?}
+
+ `colour` plots lines with line types >= 0 in colour (MIF sep. 2--7) and
+ `monochrome` plots all line types in black (MIF sep. 0).
+ `polyline` plots curves as continuous curves and `vectors` plots curves as
+ collections of vectors.
+ `help` and `?` print online help on standard error output---both print a
+ short description of the usage; `help` also lists the options.
+
+ Examples:
+ set term mif colour polylines # defaults
+ set term mif # defaults
+ set term mif vectors
+ set term mif help
+
+?commands set terminal epslatex
+?set terminal epslatex
+?set term epslatex
+?terminal epslatex
+?term epslatex
+?epslatex
+ The `epslatex` driver generates output for further processing by LaTeX.
+
+ Syntax:
+ set terminal epslatex {default}
+ set terminal epslatex {standalone | input}
+ {oldstyle | newstyle}
+ {level1 | leveldefault}
+ {color | colour | monochrome}
+ {background <rgbcolor> | nobackground}
+ {solid | dashed}
+ {dashlength | dl <DL>}
+ {linewidth | lw <LW>}
+ {rounded | butt}
+ {clip | noclip}
+ {palfuncparam <samples>{,<maxdeviation>}}
+ {size <XX>{unit},<YY>{unit}}
+ {header <header> | noheader}
+ {blacktext | colortext | colourtext}
+ {{font} "fontname{,fontsize}" {<fontsize>}}
+ {fontscale <scale>}
+
+ The epslatex terminal prints a plot as `terminal postscript eps`
+ but transfers the texts to LaTeX instead of including in the PostScript
+ code. Thus, many options are the same as in the `postscript terminal`.
+
+ The appearance of the epslatex terminal changed between versions 4.0 and 4.2
+ to reach better consistency with the postscript terminal:
+ The plot size has been changed from 5 x 3 inches to 5 x 3.5 inches;
+ the character width is now estimated to be 60% of the font size
+ while the old epslatex terminal used 50%; now, the larger number of
+ postscript linetypes and symbols are used. To reach an appearance that is
+ nearly identical to the old one specify the option `oldstyle`. (In fact
+ some small differences remain: the symbol sizes are slightly different, the
+ tics are half as large as in the old terminal which can be changed using
+ `set tics scale`, and the arrows have all features as in the postscript
+ terminal.)
+
+ If you see the error message
+ "Can't find PostScript prologue file ... "
+ Please see and follow the instructions in `postscript prologue`.
+
+ The option `color` enables color, while `monochrome` prefers black and white
+ drawing elements. Further, `monochrome` uses gray `palette` but it does not
+ change color of objects specified with an explicit `colorspec`.
+ `solid` draws all plots with solid lines, overriding any dashed patterns.
+ `dashlength` or `dl` scales the length of the dashed-line segments by <DL>,
+ which is a floating-point number greater than zero.
+ `linewidth` or `lw` scales all linewidths by <LW>.
+
+ By default the generated PostScript code uses language features that were
+ introduced in PostScript Level 2, notably filters and pattern-fill of
+ irregular objects such as filledcurves. PostScript Level 2 features are
+ conditionally protected so that PostScript Level 1 interpreters do not issue
+ errors but, rather, display a message or a PostScript Level 1 approximation.
+ The `level1` option substitutes PostScript Level 1 approximations of these
+ features and uses no PostScript Level 2 code. This may be required by some
+ old printers and old versions of Adobe Illustrator. The flag `level1` can be
+ toggled later by editing a single line in the PostScript output file to force
+ PostScript Level 1 interpretation. In the case of files containing level 2
+ code, the above features will not appear or will be replaced by a note when
+ this flag is set or when the interpreting program does not indicate that it
+ understands level 2 PostScript or higher.
+
+ `rounded` sets line caps and line joins to be rounded; `butt` is the
+ default, butt caps and mitered joins.
+
+ `clip` tells PostScript to clip all output to the bounding box;
+ `noclip` is the default.
+
+ `palfuncparam` controls how `set palette functions` are encoded as gradients
+ in the output. Analytic color component functions (set via
+ `set palette functions`) are encoded as linear interpolated gradients in the
+ postscript output: The color component functions are sampled at <samples>
+ points and all points are removed from this gradient which can be removed
+ without changing the resulting colors by more than <maxdeviation>. For
+ almost every useful palette you may safely leave the defaults of
+ <samples>=2000 and <maxdeviation>=0.003 untouched.
+
+ The default size for postscript output is 10 inches x 7 inches. The default
+ for eps output is 5 x 3.5 inches. The `size` option changes this to
+ whatever the user requests. By default the X and Y sizes are taken to be in
+ inches, but other units are possibly (currently only cm). The BoundingBox
+ of the plot is correctly adjusted to contain the resized image.
+ Screen coordinates always run from 0.0 to 1.0 along the full length of the
+ plot edges as specified by the `size` option.
+ NB: `this is a change from the previously recommended method of using the
+ set size command prior to setting the terminal type`. The old method left
+ the BoundingBox unchanged and screen coordinates did not correspond to the
+ actual limits of the plot.
+
+ `blacktext` forces all text to be written in black even in color mode;
+
+ The epslatex driver offers a special way of controlling text positioning:
+ (a) If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. (b) If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r,c),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+ See also the documentation for the `pslatex` terminal driver.
+ To create multiline labels, use \shortstack, for example
+ set ylabel '[r]{\shortstack{first line \\ second line}}'
+
+ The `back` option of `set label` commands is handled slightly different
+ than in other terminals. Labels using 'back' are printed behind all other
+ elements of the plot while labels using 'front' are printed above
+ everything else.
+
+ The driver produces two different files, one for the eps part of the figure
+ and one for the LaTeX part. The name of the LaTeX file is taken from the
+ `set output` command. The name of the eps file is derived by replacing
+ the file extension (normally `.tex`) with `.eps` instead. There is no
+ LaTeX output if no output file is given! Remember to close the
+ `output file` before next plot unless in `multiplot` mode.
+
+ In your LaTeX documents use '\input{filename}' to include the figure.
+ The `.eps` file is included by the command \includegraphics{...}, so you
+ must also include \usepackage{graphicx} in the LaTeX preamble. If you
+ want to use coloured text (option `textcolour`) you also have to include
+ \usepackage{color} in the LaTeX preamble.
+
+ Pdf files can be made from the eps file using 'epstopdf'. If the graphics
+ package is properly configured, the LaTeX files can also be processed by
+ pdflatex without changes, using the pdf files instead of the eps files.
+ The behaviour concerning font selection depends on the header mode.
+ In all cases, the given font size is used for the calculation of proper
+ spacing. When not using the `standalone` mode the actual LaTeX font and
+ font size at the point of inclusion is taken, so use LaTeX commands for
+ changing fonts. If you use e.g. 12pt as font size for your LaTeX
+ document, use '"" 12' as options. The font name is ignored. If using
+ `standalone` the given font and font size are used, see below for a
+ detailed description.
+
+ If text is printed coloured is controlled by the TeX booleans \ifGPcolor
+ and \ifGPblacktext. Only if \ifGPcolor is true and \ifGPblacktext is
+ false, text is printed coloured. You may either change them in the
+ generated TeX file or provide them globally in your TeX file, for example
+ by using
+ \newif\ifGPblacktext
+ \GPblacktexttrue
+ in the preamble of your document. The local assignment is only done if no
+ global value is given.
+
+ When using the epslatex terminal give the name of the TeX file in the
+ `set output` command including the file extension (normally ".tex").
+ The eps filename is generated by replacing the extension by ".eps".
+
+ If using the `standalone` mode a complete LaTeX header is added to the
+ LaTeX file; and "-inc" is added to the filename of the eps file.
+ The `standalone` mode generates a TeX file that produces
+ output with the correct size when using dvips, pdfTeX, or VTeX.
+ The default, `input`, generates a file that has to be included into a
+ LaTeX document using the \input command.
+
+ If a font other than "" or "default" is given it is interpreted as
+ LaTeX font name. It contains up to three parts, separated by a comma:
+ 'fontname,fontseries,fontshape'. If the default fontshape or fontseries
+ are requested, they can be omitted. Thus, the real syntax for the fontname
+ is '[fontname][,fontseries][,fontshape]'. The naming convention for all
+ parts is given by the LaTeX font scheme. The fontname is 3 to 4 characters
+ long and is built as follows: One character for the font vendor, two
+ characters for the name of the font, and optionally one additional
+ character for special fonts, e.g., 'j' for fonts with old-style numerals
+ or 'x' for expert fonts. The names of many fonts is described in
+ http://www.tug.org/fontname/fontname.pdf
+ For example, 'cmr' stands for Computer Modern Roman, 'ptm' for Times-Roman,
+ and 'phv' for Helvetica. The font series denotes the thickness of the
+ glyphs, in most cases 'm' for normal ("medium") and 'bx' or 'b' for bold
+ fonts. The font shape is 'n' for upright, 'it' for italics, 'sl' for
+ slanted, or 'sc' for small caps, in general. Some fonts may provide
+ different font series or shapes.
+
+ Examples:
+
+ Use Times-Roman boldface (with the same shape as in the surrounding text):
+ set terminal epslatex 'ptm,bx'
+ Use Helvetica, boldface, italics:
+ set terminal epslatex 'phv,bx,it'
+ Continue to use the surrounding font in slanted shape:
+ set terminal epslatex ',,sl'
+ Use small capitals:
+ set terminal epslatex ',,sc'
+
+ By this method, only text fonts are changed. If you also want to change
+ the math fonts you have to use the "gnuplot.cfg" file or the `header`
+ option, described below.
+
+ In standalone mode, the font size is taken from the given font size in the
+ `set terminal` command. To be able to use a specified font size, a file
+ "size<size>.clo" has to reside in the LaTeX search path. By default,
+ 10pt, 11pt, and 12pt are supported. If the package "extsizes" is
+ installed, 8pt, 9pt, 14pt, 17pt, and 20pt are added.
+
+ The `header` option takes a string as argument. This string is written
+ into the generated LaTeX file. If using the `standalone` mode, it is
+ written into the preamble, directly before the \begin{document} command.
+ In the `input` mode, it is placed directly after the \begingroup command
+ to ensure that all settings are local to the plot.
+
+ Examples:
+
+ Use T1 fontencoding, change the text and math font to Times-Roman as well
+ as the sans-serif font to Helvetica:
+ set terminal epslatex standalone header \
+ "\\usepackage[T1]{fontenc}\n\\usepackage{mathptmx}\n\\usepackage{helvet}"
+ Use a boldface font in the plot, not influencing the text outside the plot:
+ set terminal epslatex input header "\\bfseries"
+
+ If the file "gnuplot.cfg" is found by LaTeX it is input in the preamble
+ the LaTeX document, when using `standalone` mode. It can be used for
+ further settings, e.g., changing the document font to Times-Roman,
+ Helvetica, and Courier, including math fonts (handled by "mathptmx.sty"):
+ \usepackage{mathptmx}
+ \usepackage[scaled=0.92]{helvet}
+ \usepackage{courier}
+ The file "gnuplot.cfg" is loaded before the header information given
+ by the `header` command. Thus, you can use `header` to overwrite some of
+ settings performed using "gnuplot.cfg"
+
+?commands set terminal pslatex
+?set terminal pslatex
+?set term pslatex
+?terminal pslatex
+?term pslatex
+?pslatex
+?commands set terminal pstex
+?set terminal pstex
+?set term pstex
+?terminal pstex
+?term pstex
+?pstex
+ The `pslatex` driver generates output for further processing by LaTeX,
+ while the `pstex` driver generates output for further processing by
+ TeX. `pslatex` uses \specials understandable by dvips and xdvi. Figures
+ generated by `pstex` can be included in any plain-based format (including
+ LaTeX).
+
+ Syntax:
+ set terminal [pslatex | pstex] {default}
+ set terminal [pslatex | pstex]
+ {rotate | norotate}
+ {oldstyle | newstyle}
+ {auxfile | noauxfile}
+ {level1 | leveldefault}
+ {color | colour | monochrome}
+ {background <rgbcolor> | nobackground}
+ {solid | dashed}
+ {dashlength | dl <DL>}
+ {linewidth | lw <LW>}
+ {rounded | butt}
+ {clip | noclip}
+ {palfuncparam <samples>{,<maxdeviation>}}
+ {size <XX>{unit},<YY>{unit}}
+ {<font_size>}
+
+ If you see the error message
+ "Can't find PostScript prologue file ... "
+ Please see and follow the instructions in `postscript prologue`.
+
+ The option `color` enables color, while `monochrome` prefers black and white
+ drawing elements. Further, `monochrome` uses gray `palette` but it does not
+ change color of objects specified with an explicit `colorspec`.
+ `solid` draws all plots with solid lines, overriding any dashed patterns.
+ `dashlength` or `dl` scales the length of the dashed-line segments by <DL>,
+ which is a floating-point number greater than zero.
+ `linewidth` or `lw` scales all linewidths by <LW>.
+
+ By default the generated PostScript code uses language features that were
+ introduced in PostScript Level 2, notably filters and pattern-fill of
+ irregular objects such as filledcurves. PostScript Level 2 features are
+ conditionally protected so that PostScript Level 1 interpreters do not issue
+ errors but, rather, display a message or a PostScript Level 1 approximation.
+ The `level1` option substitutes PostScript Level 1 approximations of these
+ features and uses no PostScript Level 2 code. This may be required by some
+ old printers and old versions of Adobe Illustrator. The flag `level1` can be
+ toggled later by editing a single line in the PostScript output file to force
+ PostScript Level 1 interpretation. In the case of files containing level 2
+ code, the above features will not appear or will be replaced by a note when
+ this flag is set or when the interpreting program does not indicate that it
+ understands level 2 PostScript or higher.
+
+ `rounded` sets line caps and line joins to be rounded; `butt` is the
+ default, butt caps and mitered joins.
+
+ `clip` tells PostScript to clip all output to the bounding box;
+ `noclip` is the default.
+
+ `palfuncparam` controls how `set palette functions` are encoded as gradients
+ in the output. Analytic color component functions (set via
+ `set palette functions`) are encoded as linear interpolated gradients in the
+ postscript output: The color component functions are sampled at <samples>
+ points and all points are removed from this gradient which can be removed
+ without changing the resulting colors by more than <maxdeviation>. For
+ almost every useful palette you may safely leave the defaults of
+ <samples>=2000 and <maxdeviation>=0.003 untouched.
+
+ The default size for postscript output is 10 inches x 7 inches. The default
+ for eps output is 5 x 3.5 inches. The `size` option changes this to
+ whatever the user requests. By default the X and Y sizes are taken to be in
+ inches, but other units are possibly (currently only cm). The BoundingBox
+ of the plot is correctly adjusted to contain the resized image.
+ Screen coordinates always run from 0.0 to 1.0 along the full length of the
+ plot edges as specified by the `size` option.
+ NB: `this is a change from the previously recommended method of using the
+ set size command prior to setting the terminal type`. The old method left
+ the BoundingBox unchanged and screen coordinates did not correspond to the
+ actual limits of the plot.
+
+ if `rotate` is specified, the y-axis label is rotated.
+ <font_size> is the size (in pts) of the desired font.
+
+ If `auxfile` is specified, it directs the driver to put the PostScript
+ commands into an auxiliary file instead of directly into the LaTeX file.
+ This is useful if your pictures are large enough that dvips cannot handle
+ them. The name of the auxiliary PostScript file is derived from the name of
+ the TeX file given on the `set output` command; it is determined by replacing
+ the trailing `.tex` (actually just the final extent in the file name) with
+ `.ps` in the output file name, or, if the TeX file has no extension, `.ps`
+ is appended. The `.ps` is included into the `.tex` file by a
+ \special{psfile=...} command. Remember to close the `output file` before
+ next plot unless in `multiplot` mode.
+
+ Gnuplot versions prior to version 4.2 generated plots of the size
+ 5 x 3 inches using the ps(la)tex terminal while the current version generates
+ 5 x 3.5 inches to be consistent with the postscript eps terminal. In
+ addition, the character width is now estimated to be 60% of the font size
+ while the old epslatex terminal used 50%. To reach the old format specify
+ the option `oldstyle`.
+
+ The pslatex driver offers a special way of controlling text positioning:
+ (a) If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. (b) If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ The options not described here are identical to the `Postscript terminal`.
+ Look there if you want to know what they do.
+
+ Examples:
+ set term pslatex monochrome dashed rotate # set to defaults
+ To write the PostScript commands into the file "foo.ps":
+ set term pslatex auxfile
+ set output "foo.tex"; plot ...; set output
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+ set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+ set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+ set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+ set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}}'
+
+ Linewidths and pointsizes may be changed with `set style line`.
+?commands set terminal postscript
+?set terminal postscript
+?set term postscript
+?terminal postscript
+?term postscript
+?postscript
+ Several options may be set in the `postscript` driver.
+
+ Syntax:
+ set terminal postscript {default}
+ set terminal postscript {landscape | portrait | eps}
+ {enhanced | noenhanced}
+ {defaultplex | simplex | duplex}
+ {fontfile [add | delete] "<filename>"
+ | nofontfiles} {{no}adobeglyphnames}
+ {level1 | leveldefault}
+ {color | colour | monochrome}
+ {background <rgbcolor> | nobackground}
+ {solid | dashed}
+ {dashlength | dl <DL>}
+ {linewidth | lw <LW>}
+ {rounded | butt}
+ {clip | noclip}
+ {palfuncparam <samples>{,<maxdeviation>}}
+ {size <XX>{unit},<YY>{unit}}
+ {blacktext | colortext | colourtext}
+ {{font} "fontname{,fontsize}" {<fontsize>}}
+ {fontscale <scale>}
+ If you see the error message
+ "Can't find PostScript prologue file ... "
+ Please see and follow the instructions in `postscript prologue`.
+
+
+ `landscape` and `portrait` choose the plot orientation.
+ `eps` mode generates EPS (Encapsulated PostScript) output, which is just
+ regular PostScript with some additional lines that allow the file to be
+ imported into a variety of other applications. (The added lines are
+ PostScript comment lines, so the file may still be printed by itself.) To
+ get EPS output, use the `eps` mode and make only one plot per file. In `eps`
+ mode the whole plot, including the fonts, is reduced to half of the default
+ size.
+
+ `enhanced` enables enhanced text mode features (subscripts,
+ superscripts and mixed fonts). See `enhanced` for more information.
+ `blacktext` forces all text to be written in black even in color mode;
+
+ Duplexing in PostScript is the ability of the printer to print on both
+ sides of the same sheet of paper. With `defaultplex`, the default setting
+ of the printer is used; with `simplex` only one side is printed; `duplex`
+ prints on both sides (ignored if your printer can't do it).
+
+ `"<fontname>"` is the name of a valid PostScript font; and `<fontsize>` is
+ the size of the font in PostScript points.
+ In addition to the standard postscript fonts, an oblique version of the
+ Symbol font, useful for mathematics, is defined. It is called
+ "Symbol-Oblique".
+
+ `default` sets all options to their defaults: `landscape`, `monochrome`,
+ `dashed`, `dl 1.0`, `lw 1.0`, `defaultplex`, `noenhanced`, "Helvetica" and
+ 14pt. Default size of a PostScript plot is 10 inches wide and 7 inches high.
+ The option `color` enables color, while `monochrome` prefers black and white
+ drawing elements. Further, `monochrome` uses gray `palette` but it does not
+ change color of objects specified with an explicit `colorspec`.
+ `solid` draws all plots with solid lines, overriding any dashed patterns.
+ `dashlength` or `dl` scales the length of the dashed-line segments by <DL>,
+ which is a floating-point number greater than zero.
+ `linewidth` or `lw` scales all linewidths by <LW>.
+
+ By default the generated PostScript code uses language features that were
+ introduced in PostScript Level 2, notably filters and pattern-fill of
+ irregular objects such as filledcurves. PostScript Level 2 features are
+ conditionally protected so that PostScript Level 1 interpreters do not issue
+ errors but, rather, display a message or a PostScript Level 1 approximation.
+ The `level1` option substitutes PostScript Level 1 approximations of these
+ features and uses no PostScript Level 2 code. This may be required by some
+ old printers and old versions of Adobe Illustrator. The flag `level1` can be
+ toggled later by editing a single line in the PostScript output file to force
+ PostScript Level 1 interpretation. In the case of files containing level 2
+ code, the above features will not appear or will be replaced by a note when
+ this flag is set or when the interpreting program does not indicate that it
+ understands level 2 PostScript or higher.
+
+ `rounded` sets line caps and line joins to be rounded; `butt` is the
+ default, butt caps and mitered joins.
+
+ `clip` tells PostScript to clip all output to the bounding box;
+ `noclip` is the default.
+
+ `palfuncparam` controls how `set palette functions` are encoded as gradients
+ in the output. Analytic color component functions (set via
+ `set palette functions`) are encoded as linear interpolated gradients in the
+ postscript output: The color component functions are sampled at <samples>
+ points and all points are removed from this gradient which can be removed
+ without changing the resulting colors by more than <maxdeviation>. For
+ almost every useful palette you may safely leave the defaults of
+ <samples>=2000 and <maxdeviation>=0.003 untouched.
+
+ The default size for postscript output is 10 inches x 7 inches. The default
+ for eps output is 5 x 3.5 inches. The `size` option changes this to
+ whatever the user requests. By default the X and Y sizes are taken to be in
+ inches, but other units are possibly (currently only cm). The BoundingBox
+ of the plot is correctly adjusted to contain the resized image.
+ Screen coordinates always run from 0.0 to 1.0 along the full length of the
+ plot edges as specified by the `size` option.
+ NB: `this is a change from the previously recommended method of using the
+ set size command prior to setting the terminal type`. The old method left
+ the BoundingBox unchanged and screen coordinates did not correspond to the
+ actual limits of the plot.
+
+ Fonts listed by `fontfile` or `fontfile add` encapsulate the font
+ definitions of the listed font from a postscript Type 1 or TrueType font
+ file directly into the gnuplot output postscript file. Thus, the enclosed
+ font can be used in labels, titles, etc. See the section
+ `postscript fontfile` for more details. With `fontfile delete`, a fontfile
+ is deleted from the list of embedded files. `nofontfiles` cleans the list
+ of embedded fonts.
+
+ Examples:
+ set terminal postscript default # old postscript
+ set terminal postscript enhanced # old enhpost
+ set terminal postscript landscape 22 # old psbig
+ set terminal postscript eps 14 # old epsf1
+ set terminal postscript eps 22 # old epsf2
+ set size 0.7,1.4; set term post portrait color "Times-Roman" 14
+ set term post "VAGRoundedBT_Regular" 14 fontfile "bvrr8a.pfa"
+
+ Linewidths and pointsizes may be changed with `set style line`.
+
+ The `postscript` driver supports about 70 distinct pointtypes, selectable
+ through the `pointtype` option on `plot` and `set style line`.
+
+ Several possibly useful files about `gnuplot`'s PostScript are included
+ in the /docs/psdoc subdirectory of the `gnuplot` distribution and at the
+ distribution sites. These are "ps_symbols.gpi" (a `gnuplot` command file
+ that, when executed, creates the file "ps_symbols.ps" which shows all the
+ symbols available through the `postscript` terminal), "ps_guide.ps" (a
+ PostScript file that contains a summary of the enhanced syntax and a page
+ showing what the octal codes produce with text and symbol fonts),
+ "ps_file.doc" (a text file that contains a discussion of the organization
+ of a PostScript file written by `gnuplot`), and "ps_fontfile_doc.tex"
+ (a LaTeX file which contains a short documentation concerning the
+ encapsulation of LaTeX fonts with a glyph table of the math fonts).
+
+ A PostScript file is editable, so once `gnuplot` has created one, you are
+ free to modify it to your heart's desire. See the `editing postscript`
+ section for some hints.
+?commands set terminal postscript editing
+?set terminal postscript editing
+?set term postscript editing
+?terminal postscript editing
+?term postscript editing
+?editing_postscript
+?editing postscript
+ The PostScript language is a very complex language---far too complex to
+ describe in any detail in this document. Nevertheless there are some things
+ in a PostScript file written by `gnuplot` that can be changed without risk of
+ introducing fatal errors into the file.
+
+ For example, the PostScript statement "/Color true def" (written into the
+ file in response to the command `set terminal postscript color`), may be
+ altered in an obvious way to generate a black-and-white version of a plot.
+ Similarly line colors, text colors, line weights and symbol sizes can also be
+ altered in straight-forward ways. Text (titles and labels) can be edited to
+ correct misspellings or to change fonts. Anything can be repositioned, and
+ of course anything can be added or deleted, but modifications such as these
+ may require deeper knowledge of the PostScript language.
+
+ The organization of a PostScript file written by `gnuplot` is discussed in
+ the text file "ps_file.doc" in the docs/ps subdirectory of the gnuplot
+ source distribution.
+?commands set terminal postscript fontfile
+?set terminal postscript fontfile
+?set term postscript fontfile
+?terminal postscript fontfile
+?term postscript fontfile
+?postscript fontfile
+?fontfile
+ The `fontfile` or `fontfile add` option takes one file name as argument
+ and encapsulates this file into the postscript output in order to make
+ this font available for text elements (labels, tic marks, titles, etc.).
+ The `fontfile delete` option also takes one file name as argument. It
+ deletes this file name from the list of encapsulated files.
+
+ The postscript terminal understands some
+ font file formats: Type 1 fonts in ASCII file format (extension ".pfa"),
+ Type 1 fonts in binary file format (extension ".pfb"), and TrueType
+ fonts (extension ".ttf"). Pfa files are understood directly, pfb and ttf
+ files are converted on the fly if appropriate conversion tools are
+ installed (see below). You have to specify the full filename including the
+ extension. Each `fontfile` option takes exact one font file name. This
+ option can be used multiple times in order to include more than one font
+ file.
+
+ The font file is searched in the working directory and in all directories
+ listed in the fontpath which is determined by `set fontpath`.
+ In addition, the fontpath can be set using the environment variable
+ GNUPLOT_FONTPATH. If this is not set a system dependent default search
+ list is used. See `set fontpath` for more details.
+
+ For using the encapsulated font file you have to specify the font name
+ (which normally is not the same as the file name). When embedding a
+ font file by using the `fontfile` option in interactive mode, the
+ font name is printed on the screen. E.g.
+ Font file 'p052004l.pfb' contains the font 'URWPalladioL-Bold'. Location:
+ /usr/lib/X11/fonts/URW/p052004l.pfb
+
+ When using pfa or pfb fonts, you can also find it out by looking into the
+ font file. There is a line similar to "/FontName /URWPalladioL-Bold def".
+ The middle string without the slash is the fontname, here
+ "URWPalladioL-Bold".
+ For TrueType fonts, this is not so easy since the font name is stored in a
+ binary format. In addition, they often have spaces in the font names which
+ is not supported by Type 1 fonts (in which a TrueType is converted on the
+ fly). The font names are changed in order to eliminate the spaces in the
+ fontnames. The easiest way to find out which font name is generated for
+ use with gnuplot, start gnuplot in interactive mode and type in
+ "set terminal postscript fontfile '<filename.ttf>'".
+
+ For converting font files (either ttf or pfb) to pfa format, the conversion
+ tool has to read the font from a file and write it to standard output. If
+ the output cannot be written to standard output, on-the-fly conversion is
+ not possible.
+
+ For pfb files "pfbtops" is a tool which can do this. If this program
+ is installed on your system the on the fly conversion should work.
+ Just try to encapsulate a pfb file. If the compiled in program call does
+ not work correctly you can specify how this program is called by
+ defining the environment variable GNUPLOT_PFBTOPFA e.g. to
+ "pfbtops %s". The `%s` will be replaced by the font file name and thus
+ has to exist in the string.
+
+ If you don't want to do the conversion on the fly but get a pfa file of
+ the font you can use the tool "pfb2pfa" which is written in simple c
+ and should compile with any c compiler.
+ It is available from many ftp servers, e.g.
+ ftp://ftp.dante.de/tex-archive/fonts/utilities/ps2mf/
+ In fact, "pfbtopfa" and "pfb2ps" do the same job. "pfbtopfa" puts
+ the resulting pfa code into a file, whereas "pfbtops" writes it to
+ standard output.
+
+ TrueType fonts are converted into Type 1 pfa format, e.g.
+ by using the tool "ttf2pt1" which is available from
+ http://ttf2pt1.sourceforge.net/
+ If the builtin conversion does not
+ work, the conversion command can be changed by the environment variable
+ GNUPLOT_TTFTOPFA. For usage with ttf2pt1 it may be set to
+ "ttf2pt1 -a -e -W 0 %s - ". Here again, `%s` stands for the
+ file name.
+
+ For special purposes you also can use a pipe (if available for your
+ operating system). Therefore you start the file name definition with
+ the character "<" and append a program call. This program has
+ to write pfa data to standard output. Thus, a pfa file may be accessed
+ by `set fontfile "< cat garamond.pfa"`.
+
+ For example, including Type 1 font files can be used for including the
+ postscript output in LaTeX documents. The "european computer modern"
+ font (which is a variant of the "computer modern" font) is available
+ in pfb format from any CTAN server, e.g.
+ ftp://ftp.dante.de/tex-archive/fonts/ps-type1/cm-super/
+ For example, the file "sfrm1000.pfb" contains the normal upright fonts
+ with serifs in the design size 10pt (font name "SFRM1000").
+ The computer modern fonts, which are still necessary for mathematics,
+ are available from
+ ftp://ftp.dante.de/tex-archive/fonts/cm/ps-type1/bluesky
+ With these you can use any character available in TeX. However, the
+ computer modern fonts have a strange encoding. (This is why you should not
+ use cmr10.pfb for text, but sfrm1000.pfb instead.)
+ The usage of TeX fonts is shown in one of the demos.
+ The file "ps_fontfile_doc.tex" in the /docs/psdoc subdirectory of the
+ `gnuplot` source distribution contains a table with glyphs of the TeX
+ mathfonts.
+
+ If the font "CMEX10" is embedded (file "cmex10.pfb") gnuplot defines
+ the additional font "CMEX10-Baseline". It is shifted vertically in order
+ to fit better to the other glyphs (CMEX10 has its baseline at the top of
+ the symbols).
+?commands set terminal postscript prologue
+?set terminal postscript prologue
+?terminal postscript prologue
+?postscript prologue
+?prologue
+ Each PostScript output file includes a %%Prolog section and possibly some
+ additional user-defined sections containing, for example, character encodings.
+ These sections are copied from a set of PostScript prologue files that are
+ either compiled into the gnuplot executable or stored elsewhere on your
+ computer. A default directory where these files live is set at the time
+ gnuplot is built. However, you can override this default either by using the
+ gnuplot command `set psdir` or by defining an environment variable
+ GNUPLOT_PS_DIR. See `set psdir`.
+?commands set terminal postscript adobeglyphnames
+?set terminal postscript adobeglyphnames
+?terminal postscript adobeglyphnames
+?postscript adobeglyphnames
+?adobeglyphnames
+ This setting is only relevant to PostScript output with UTF-8 encoding.
+ It controls the names used to describe characters with Unicode entry points
+ higher than 0x00FF. That is, all characters outside of the Latin1 set.
+ In general unicode characters do not have a unique name; they have only a
+ unicode identification code. However, Adobe have a recommended scheme for
+ assigning names to certain ranges of characters (extended Latin, Greek, etc).
+ Some fonts use this scheme, others do not. By default, gnuplot will use
+ the Adobe glyph names. E.g. the lower case Greek letter alpha will be called
+ /alpha. If you specific `noadobeglyphnames` then instead gnuplot will use
+ /uni03B1 to describe this character. If you get this setting wrong, the
+ character may not be found even if it is present in the font.
+ It is probably always correct to use the default for Adobe fonts, but for
+ other fonts you may have to try both settings. See also `fontfile`.
+
+
+?commands set terminal qms
+?set terminal qms
+?set term qms
+?terminal qms
+?term qms
+?qms
+ The `qms` terminal driver supports the QMS/QUIC Laser printer, the Talaris
+ 1200 and others. It has no options.
+?commands set terminal svg
+?set terminal svg
+?set term svg
+?terminal svg
+?term svg
+?svg
+ This terminal produces files in the W3C Scalable Vector Graphics format.
+
+ Syntax:
+ set terminal svg {size <x>,<y> {|fixed|dynamic}}
+ {{no}enhanced}
+ {fname "<font>"} {fsize <fontsize>}
+ {mouse} {standalone | jsdir <dirname>}
+ {name <plotname>}
+ {font "<fontname>{,<fontsize>}"}
+ {fontfile <filename>}
+ {rounded|butt} {solid|dashed} {linewidth <lw>}
+ {background <rgb_color>}
+
+ where <x> and <y> are the size of the SVG plot to generate,
+ `dynamic` allows a svg-viewer to resize plot, whereas the default
+ setting, `fixed`, will request an absolute size.
+
+ `linewidth <w>` increases the width of all lines used in the figure
+ by a factor of <w>.
+
+ <font> is the name of the default font to use (default Arial) and
+ <fontsize> is the font size (in points, default 12). SVG viewing
+ programs may substitute other fonts when the file is displayed.
+
+ The svg terminal supports an enhanced text mode, which allows font
+ and other formatting commands to be embedded in labels and other text
+ strings. The enhanced text mode syntax is shared with other gnuplot
+ terminal types. See `enhanced` for more details.
+
+ The `mouse` option tells gnuplot to add support for mouse tracking and for
+ toggling individual plots on/off by clicking on the corresponding key entry.
+ By default this is done by including a link that points to a script in a
+ local directory, usually /usr/local/share/gnuplot/<version>/js.
+ You can change this by using the `jsdir` option to specify either a
+ different local directory or a general URL. The latter is usually
+ appropriate if you are embedding the svg into a web page.
+ Alternatively, the `standalone` option embeds the mousing code in the
+ svg document itself rather than linking to an external resource.
+
+ When an SVG file will be used in conjunction with external files,
+ e.g. if it embeds a PNG image or is referenced by javascript code
+ in a web page or embedding document, then a unique name is required
+ to avoid potential conflicting references to other SVG plots.
+ Use the `name` option to ensure uniqueness.
+
+ SVG allows you to embed fonts directly into an SVG document, or to
+ provide a hypertext link to the desired font. The `fontfile` option
+ specifies a local file which is copied into the <defs> section of the
+ resulting SVG output file. This file may either itself contain a font,
+ or may contain the records necessary to create a hypertext reference to
+ the desired font. Gnuplot will look for the requested file using the
+ directory list in the GNUPLOT_FONTPATH environmental variable.
+ NB: You must embed an svg font, not a TrueType or PostScript font.
+?commands set terminal tgif
+?set terminal tgif
+?set term tgif
+?terminal tgif
+?term tgif
+?tgif
+ Tgif is an X11-based drawing tool---it has nothing to do with GIF.
+
+ The `tgif` driver supports different pointsizes (with `set pointsize`),
+ different label fonts and font sizes (e.g. `set label "Hallo" at x,y font
+ "Helvetica,34"`) and multiple graphs on the page. The proportions of the
+ axes are not changed.
+
+ Syntax:
+ set terminal tgif {portrait | landscape | default} {<[x,y]>}
+ {monochrome | color}
+ {{linewidth | lw} <LW>}
+ {solid | dashed}
+ {font "<fontname>{,<fontsize>}"}
+
+ where <[x,y]> specifies the number of graphs in the x and y directions on the
+ page, `color` enables color, `linewidth` scales all linewidths by <LW>,
+ "<fontname>" is the name of a valid PostScript font, and <fontsize>
+ specifies the size of the PostScript font.
+ `defaults` sets all options to their defaults: `portrait`, `[1,1]`, `color`,
+ `linwidth 1.0`, `dashed`, `"Helvetica,18"`.
+
+ The `solid` option is usually prefered if lines are colored, as they often
+ are in the editor. Hardcopy will be black-and-white, so `dashed` should be
+ chosen for that.
+
+ Multiplot is implemented in two different ways.
+
+ The first multiplot implementation is the standard gnuplot multiplot feature:
+
+ set terminal tgif
+ set output "file.obj"
+ set multiplot
+ set origin x01,y01
+ set size xs,ys
+ plot ...
+ ...
+ set origin x02,y02
+ plot ...
+ unset multiplot
+
+ See `set multiplot` for further information.
+
+ The second version is the [x,y] option for the driver itself. The advantage
+ of this implementation is that everything is scaled and placed automatically
+ without the need for setting origins and sizes; the graphs keep their natural
+ x/y proportions of 3/2 (or whatever is fixed by `set size`).
+
+ If both multiplot methods are selected, the standard method is chosen and a
+ warning message is given.
+
+ Examples of single plots (or standard multiplot):
+ set terminal tgif # defaults
+ set terminal tgif "Times-Roman,24"
+ set terminal tgif landscape
+ set terminal tgif landscape solid
+
+ Examples using the built-in multiplot mechanism:
+ set terminal tgif portrait [2,4] # portrait; 2 plots in the x-
+ # and 4 in the y-direction
+ set terminal tgif [1,2] # portrait; 1 plot in the x-
+ # and 2 in the y-direction
+ set terminal tgif landscape [3,3] # landscape; 3 plots in both
+ # directions
+?commands set terminal tkcanvas
+?set terminal tkcanvas
+?set term tkcanvas
+?terminal tkcanvas
+?term tkcanvas
+?tkcanvas
+ This terminal driver generates Tk canvas widget commands based on Tcl/Tk
+ (default) or Perl. To use it, rebuild `gnuplot` (after uncommenting or
+ inserting the appropriate line in "term.h"), then
+
+ gnuplot> set term tkcanvas {perltk} {interactive}
+ gnuplot> set output 'plot.file'
+
+ After invoking "wish", execute the following sequence of Tcl/Tk commands:
+
+ % source plot.file
+ % canvas .c
+ % pack .c
+ % gnuplot .c
+
+ Or, for Perl/Tk use a program like this:
+
+ use Tk;
+ my $top = MainWindow->new;
+ my $c = $top->Canvas->pack;
+ my $gnuplot = do "plot.pl";
+ $gnuplot->($c);
+ MainLoop;
+
+ The code generated by `gnuplot` creates a procedure called "gnuplot"
+ that takes the name of a canvas as its argument. When the procedure is
+ called, it clears the canvas, finds the size of the canvas and draws the plot
+ in it, scaled to fit.
+
+ For 2-dimensional plotting (`plot`) two additional procedures are defined:
+ "gnuplot_plotarea" will return a list containing the borders of the plotting
+ area "xleft, xright, ytop, ybot" in canvas screen coordinates, while the ranges
+ of the two axes "x1min, x1max, y1min, y1max, x2min, x2max, y2min, y2max" in plot
+ coordinates can be obtained calling "gnuplot_axisranges".
+ If the "interactive" option is specified, mouse clicking on a line segment
+ will print the coordinates of its midpoint to stdout. Advanced actions
+ can happen instead if the user supplies a procedure named
+ "user_gnuplot_coordinates", which takes the following arguments:
+ "win id x1s y1s x2s y2s x1e y1e x2e y2e x1m y1m x2m y2m",
+ the name of the canvas and the id of the line segment followed by the
+ coordinates of its start and end point in the two possible axis ranges; the
+ coordinates of the midpoint are only filled for logarithmic axes.
+
+ The current version of `tkcanvas` supports neither `multiplot` nor `replot`.
+?commands set terminal emtex
+?set terminal emtex
+?set term emtex
+?terminal emtex
+?term emtex
+?emtex
+?commands set terminal latex
+?set terminal latex
+?set term latex
+?terminal latex
+?term latex
+?latex
+ Syntax:
+ set terminal {latex | emtex} {default | {courier|roman} {<fontsize>}}
+ {size <XX>{unit}, <YY>{unit}} {rotate | norotate}
+
+ By default the plot will inherit font settings from the embedding document.
+ You have the option of forcing either Courier (cmtt) or Roman (cmr) fonts
+ instead. In this case you may also specify a fontsize.
+ Unless your driver is capable of building fonts at any size (e.g. dvips),
+ stick to the standard 10, 11 and 12 point sizes.
+
+ METAFONT users beware: METAFONT does not like odd sizes.
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally and
+ vertically. If the text string begins with '[', you need to follow this with
+ a position specification (up to two out of t,b,l,r), ']{', the text itself,
+ and finally '}'. The text itself may be anything LaTeX can typeset as an
+ LR-box. '\rule{}{}'s may help for best positioning.
+
+ Points, among other things, are drawn using the LaTeX commands "\Diamond" and
+ "\Box". These commands no longer belong to the LaTeX2e core; they are included
+ in the latexsym package, which is part of the base distribution and thus part
+ of any LaTeX implementation. Please do not forget to use this package.
+ Other point types use symbols from the amssymb package.
+
+ The default size for the plot is 5 inches by 3 inches. The `size` option
+ changes this to whatever the user requests. By default the X and Y sizes
+ are taken to be in inches, but other units are possible (currently only cm).
+
+ If 'rotate' is specified, rotated text, especially a rotated y-axis label,
+ is possible (the packages graphics or graphicx are needed). The 'stacked'
+ y-axis label mechanism is then deactivated.
+
+ Examples:
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+ set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+ set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+ set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+ set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}}'
+?commands set terminal eepic
+?set terminal eepic
+?set term eepic
+?terminal eepic
+?term eepic
+?eepic
+ The `eepic` terminal driver supports the extended LaTeX picture environment.
+ It is an alternative to the `latex` driver.
+
+ The output of this terminal is intended for use with the "eepic.sty" macro
+ package for LaTeX. To use it, you need "eepic.sty", "epic.sty" and a
+ printer driver that supports the "tpic" \specials. If your printer driver
+ doesn't support those \specials, "eepicemu.sty" will enable you to use some
+ of them.
+ dvips and dvipdfm do support the "tpic" \specials.
+
+ Syntax:
+ set terminal eepic {default} {color|dashed} {rotate} {size XX,YY}
+ {small|tiny|<fontsize>}
+
+ Options:
+ You can give options in any order you wish.
+ 'color' causes gnuplot to produce \color{...} commands so that the graphs are
+ colored. Using this option, you must include \usepackage{color} in the preambel
+ of your latex document.
+ 'dashed' will allow dashed line types; without this option, only solid lines
+ with varying thickness will be used.
+ 'dashed' and 'color' are mutually exclusive; if 'color' is specified, then
+ 'dashed' will be ignored.
+ 'rotate' will enable true rotated text (by 90 degrees). Otherwise, rotated text
+ will be typeset with letters stacked above each other. If you use this option
+ you must include \usepackage{graphicx} in the preamble.
+ 'small' will use \scriptsize symbols as point markers (Probably does not work
+ with TeX, only LaTeX2e). Default is to use the default math size.
+ 'tiny' uses \scriptscriptstyle symbols.
+ 'default' resets all options to their defaults = no color, no dashed lines,
+ pseudo-rotated (stacked) text, large point symbols.
+ <fontsize> is a number which specifies the font size inside the picture
+ environment; the unit is pt (points), i.e., 10 pt equals approx. 3.5 mm.
+ If fontsize is not specified, then all text inside the picture will be set
+ in \footnotesize.
+
+ Notes:
+ Remember to escape the # character (or other chars meaningful to (La-)TeX)
+ by \\ (2 backslashes).
+ It seems that dashed lines become solid lines when the vertices of a plot
+ are too close. (I do not know if that is a general problem with the tpic
+ specials, or if it is caused by a bug in eepic.sty or dvips/dvipdfm.)
+ The default size of an eepic plot is 5x3 inches. You can change this using
+ the `size` terminal option.
+ Points, among other things, are drawn using the LaTeX commands "\Diamond",
+ "\Box", etc. These commands no longer belong to the LaTeX2e core; they are
+ included in the latexsym package, which is part of the base distribution and
+ thus part of any LaTeX implementation. Please do not forget to use this package.
+ Instead of latexsym, you can also include the amssymb package.
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally and
+ vertically. If the text string begins with '[', you need to follow this with
+ a position specification (up to two out of t,b,l,r), ']{', the text itself,
+ and finally '}'. The text itself may be anything LaTeX can typeset as an
+ LR-box. '\rule{}{}'s may help for best positioning.
+
+ Examples:
+ set term eepic
+ output graphs as eepic macros inside a picture environment;
+ \input the resulting file in your LaTeX document.
+ set term eepic color tiny rotate 8
+ eepic macros with \color macros, \scripscriptsize point markers,
+ true rotated text, and all text set with 8pt.
+
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+ set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+ set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+ set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+ set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}}'
+?commands set terminal tpic
+?set terminal tpic
+?set term tpic
+?terminal tpic
+?term tpic
+?tpic
+ The `tpic` terminal driver supports the LaTeX picture environment with tpic
+ \specials. It is an alternative to the `latex` and `eepic` terminal drivers.
+ Options are the point size, line width, and dot-dash interval.
+
+ Syntax:
+ set terminal tpic <pointsize> <linewidth> <interval>
+
+ where `pointsize` and `linewidth` are integers in milli-inches and `interval`
+ is a float in inches. If a non-positive value is specified, the default is
+ chosen: pointsize = 40, linewidth = 6, interval = 0.1.
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. --- If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ Examples:
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+ set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+ set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+ set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+ set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}}'
+?commands set terminal pstricks
+?set terminal pstricks
+?set term pstricks
+?terminal pstricks
+?term pstricks
+?pstricks
+ The `pstricks` driver is intended for use with the "pstricks.sty" macro
+ package for LaTeX. It is an alternative to the `eepic` and `latex` drivers.
+ You need "pstricks.sty", and, of course, a printer that understands
+ PostScript, or a converter such as Ghostscript.
+
+ PSTricks is available via anonymous ftp from the /pub directory at
+ Princeton.edu. This driver definitely does not come close to using the full
+ capability of the PSTricks package.
+
+ Syntax:
+ set terminal pstricks {hacktext | nohacktext} {unit | nounit}
+
+ The first option invokes an ugly hack that gives nicer numbers; the second
+ has to do with plot scaling. The defaults are `hacktext` and `nounit`.
+?commands set terminal texdraw
+?set terminal texdraw
+?set term texdraw
+?terminal texdraw
+?term texdraw
+?texdraw
+ The `texdraw` terminal driver supports the LaTeX texdraw environment. It is
+ intended for use with "texdraw.sty" and "texdraw.tex" in the texdraw package.
+
+ Points, among other things, are drawn using the LaTeX commands "\Diamond" and
+ "\Box". These commands no longer belong to the LaTeX2e core; they are included
+ in the latexsym package, which is part of the base distribution and thus part
+ of any LaTeX implementation. Please do not forget to use this package.
+
+ It has no options.
+?commands set terminal mf
+?set terminal mf
+?set term mf
+?terminal mf
+?term mf
+?mf
+?metafont
+ The `mf` terminal driver creates an input file to the METAFONT program. Thus a
+ figure may be used in the TeX document in the same way as is a character.
+
+ To use a picture in a document, the METAFONT program must be run with the
+ output file from `gnuplot` as input. Thus, the user needs a basic knowledge
+ of the font creating process and the procedure for including a new font in a
+ document. However, if the METAFONT program is set up properly at the local
+ site, an unexperienced user could perform the operation without much trouble.
+
+ The text support is based on a METAFONT character set. Currently the
+ Computer Modern Roman font set is input, but the user is in principal free to
+ choose whatever fonts he or she needs. The METAFONT source files for the
+ chosen font must be available. Each character is stored in a separate
+ picture variable in METAFONT. These variables may be manipulated (rotated,
+ scaled etc.) when characters are needed. The drawback is the interpretation
+ time in the METAFONT program. On some machines (i.e. PC) the limited amount
+ of memory available may also cause problems if too many pictures are stored.
+
+ The `mf` terminal has no options.
+?commands set terminal mf detailed
+?set terminal mf detailed
+?set term mf detailed
+?mf detailed
+?metafont detailed
+
+ - Set your terminal to METAFONT:
+ set terminal mf
+ - Select an output-file, e.g.:
+ set output "myfigures.mf"
+ - Create your pictures. Each picture will generate a separate character. Its
+ default size will be 5*3 inches. You can change the size by saying `set size
+ 0.5,0.5` or whatever fraction of the default size you want to have.
+
+ - Quit `gnuplot`.
+
+ - Generate a TFM and GF file by running METAFONT on the output of `gnuplot`.
+ Since the picture is quite large (5*3 in), you will have to use a version of
+ METAFONT that has a value of at least 150000 for memmax. On Unix systems
+ these are conventionally installed under the name bigmf. For the following
+ assume that the command virmf stands for a big version of METAFONT. For
+ example:
+
+ - Invoke METAFONT:
+ virmf '&plain'
+ - Select the output device: At the METAFONT prompt ('*') type:
+ \mode:=CanonCX; % or whatever printer you use
+ - Optionally select a magnification:
+ mag:=1; % or whatever you wish
+ - Input the `gnuplot`-file:
+ input myfigures.mf
+ On a typical Unix machine there will usually be a script called "mf" that
+ executes virmf '&plain', so you probably can substitute mf for virmf &plain.
+ This will generate two files: mfput.tfm and mfput.$$$gf (where $$$ indicates
+ the resolution of your device). The above can be conveniently achieved by
+ typing everything on the command line, e.g.:
+ virmf '&plain' '\mode:=CanonCX; mag:=1; input myfigures.mf'
+ In this case the output files will be named myfigures.tfm and
+ myfigures.300gf.
+
+ - Generate a PK file from the GF file using gftopk:
+ gftopk myfigures.300gf myfigures.300pk
+ The name of the output file for gftopk depends on the DVI driver you use.
+ Ask your local TeX administrator about the naming conventions. Next, either
+ install the TFM and PK files in the appropriate directories, or set your
+ environment variables properly. Usually this involves setting TEXFONTS to
+ include the current directory and doing the same thing for the environment
+ variable that your DVI driver uses (no standard name here...). This step is
+ necessary so that TeX will find the font metric file and your DVI driver will
+ find the PK file.
+
+ - To include your pictures in your document you have to tell TeX the font:
+ \font\gnufigs=myfigures
+ Each picture you made is stored in a single character. The first picture is
+ character 0, the second is character 1, and so on... After doing the above
+ step, you can use the pictures just like any other characters. Therefore, to
+ place pictures 1 and 2 centered in your document, all you have to do is:
+ \centerline{\gnufigs\char0}
+ \centerline{\gnufigs\char1}
+ in plain TeX. For LaTeX you can, of course, use the picture environment and
+ place the picture wherever you wish by using the \makebox and \put macros.
+
+ This conversion saves you a lot of time once you have generated the font;
+ TeX handles the pictures as characters and uses minimal time to place them,
+ and the documents you make change more often than the pictures do. It also
+ saves a lot of TeX memory. One last advantage of using the METAFONT driver
+ is that the DVI file really remains device independent, because no \special
+ commands are used as in the eepic and tpic drivers.
+?commands set terminal mpost
+?set terminal mp
+?set term mp
+?terminal mp
+?term mp
+?mp
+?metapost
+
+ The `mp` driver produces output intended to be input to the Metapost program.
+ Running Metapost on the file creates EPS files containing the plots. By
+ default, Metapost passes all text through TeX. This has the advantage of
+ allowing essentially any TeX symbols in titles and labels.
+
+ Syntax:
+ set term mp {color | colour | monochrome}
+ {solid | dashed}
+ {notex | tex | latex}
+ {magnification <magsize>}
+ {psnfss | psnfss-version7 | nopsnfss}
+ {prologues <value>}
+ {a4paper}
+ {amstex}
+ {"<fontname> {,<fontsize>}"}
+
+ The option `color` causes lines to be drawn in color (on a printer or display
+ that supports it), `monochrome` (or nothing) selects black lines. The option
+ `solid` draws solid lines, while `dashed` (or nothing) selects lines with
+ different patterns of dashes. If `solid` is selected but `color` is not,
+ nearly all lines will be identical. This may occasionally be useful, so it is
+ allowed.
+
+ The option `notex` bypasses TeX entirely, therefore no TeX code can be used in
+ labels under this option. This is intended for use on old plot files or files
+ that make frequent use of common characters like `$` and `%` that require
+ special handling in TeX.
+
+ The option `tex` sets the terminal to output its text for TeX to process.
+
+ The option `latex` sets the terminal to output its text for processing by
+ LaTeX. This allows things like \frac for fractions which LaTeX knows about
+ but TeX does not. Note that you must set the environment variable TEX to the
+ name of your LaTeX executable (normally latex) if you use this option or use
+ `mpost --tex=<name of LaTeX executable> ...`. Otherwise metapost will try and
+ use TeX to process the text and it won't work.
+
+ Changing font sizes in TeX has no effect on the size of mathematics, and there
+ is no foolproof way to make such a change, except by globally setting a
+ magnification factor. This is the purpose of the `magnification` option. It
+ must be followed by a scaling factor. All text (NOT the graphs) will be scaled
+ by this factor. Use this if you have math that you want at some size other
+ than the default 10pt. Unfortunately, all math will be the same size, but see
+ the discussion below on editing the MP output. `mag` will also work under
+ `notex` but there seems no point in using it as the font size option (below)
+ works as well.
+
+ The option `psnfss` uses postscript fonts in combination with LaTeX. Since
+ this option only makes sense, if LaTeX is being used, the `latex` option is selected
+ automatically. This option includes the following packages for LaTeX:
+ inputenc(latin1), fontenc(T1), mathptmx, helvet(scaled=09.2), courier, latexsym
+ and textcomp.
+
+ The option `psnfss-version7` uses also postscript fonts in LaTeX (option `latex`
+ is also automatically selected), but uses the following packages with LaTeX:
+ inputenc(latin1), fontenc(T1), times, mathptmx, helvet and courier.
+
+ The option `nopsnfss` is the default and uses the standard font (cmr10 if not
+ otherwise specified).
+
+ The option `prologues` takes a value as an additional argument and adds the line
+ `prologues:=<value>` to the metapost file. If a value of `2` is specified metapost
+ uses postscript fonts to generate the eps-file, so that the result can be viewed
+ using e.g. ghostscript. Normally the output of metapost uses TeX fonts and therefore
+ has to be included in a (La)TeX file before you can look at it.
+
+ The option `noprologues` is the default. No additional line specifying the prologue
+ will be added.
+
+ The option `a4paper` adds a `[a4paper]` to the documentclass. Normally letter paper
+ is used (default). Since this option is only used in case of LaTeX, the `latex` option
+ is selected automatically.
+
+ The option `amstex` automatically selects the `latex` option and includes the following
+ LaTeX packages: amsfonts, amsmath(intlimits). By default these packages are not
+ included.
+
+ A name in quotes selects the font that will be used when no explicit font is
+ given in a `set label` or `set title`. A name recognized by TeX (a TFM file
+ exists) must be used. The default is "cmr10" unless `notex` is selected,
+ then it is "pcrr8r" (Courier). Even under `notex`, a TFM file is needed by
+ Metapost. The file `pcrr8r.tfm` is the name given to Courier in LaTeX's psnfss
+ package. If you change the font from the `notex` default, choose a font that
+ matches the ASCII encoding at least in the range 32-126. `cmtt10` almost
+ works, but it has a nonblank character in position 32 (space).
+
+ The size can be any number between 5.0 and 99.99. If it is omitted, 10.0 is
+ used. It is advisable to use `magstep` sizes: 10 times an integer or
+ half-integer power of 1.2, rounded to two decimals, because those are the most
+ available sizes of fonts in TeX systems.
+
+ All the options are optional. If font information is given, it must be at the
+ end, with size (if present) last. The size is needed to select a size for the
+ font, even if the font name includes size information. For example,
+ `set term mp "cmtt12"` selects cmtt12 shrunk to the default size 10. This
+ is probably not what you want or you would have used cmtt10.
+
+ The following common ascii characters need special treatment in TeX:
+ $, &, #, %, _; |, <, >; ^, ~, \, {, and }
+ The five characters $, #, &, _, and % can simply be escaped, e.g., `\$`.
+ The three characters <, >, and | can be wrapped in math mode, e.g., `$<$`.
+ The remainder require some TeX work-arounds. Any good book on TeX will give
+ some guidance.
+
+ If you type your labels inside double quotes, backslashes in TeX code need to
+ be escaped (doubled). Using single quotes will avoid having to do this, but
+ then you cannot use `\n` for line breaks. As of this writing, version 3.7 of
+ gnuplot processes titles given in a `plot` command differently than in other
+ places, and backslashes in TeX commands need to be doubled regardless of the
+ style of quotes.
+
+ Metapost pictures are typically used in TeX documents. Metapost deals with
+ fonts pretty much the same way TeX does, which is different from most other
+ document preparation programs. If the picture is included in a LaTeX document
+ using the graphics package, or in a plainTeX document via epsf.tex, and then
+ converted to PostScript with dvips (or other dvi-to-ps converter), the text in
+ the plot will usually be handled correctly. However, the text may not appear
+ if you send the Metapost output as-is to a PostScript interpreter.
+
+?commands set terminal mp detailed
+?set terminal mp detailed
+?set term mp detailed
+?mp detailed
+?metapost detailed
+
+ - Set your terminal to Metapost, e.g.:
+ set terminal mp mono "cmtt12" 12
+
+ - Select an output-file, e.g.:
+ set output "figure.mp"
+
+ - Create your pictures. Each plot (or multiplot group) will generate a
+ separate Metapost beginfig...endfig group. Its default size will be 5 by 3
+ inches. You can change the size by saying `set size 0.5,0.5` or whatever
+ fraction of the default size you want to have.
+
+ - Quit gnuplot.
+
+ - Generate EPS files by running Metapost on the output of gnuplot:
+ mpost figure.mp OR mp figure.mp
+ The name of the Metapost program depends on the system, typically `mpost` for
+ a Unix machine and `mp` on many others. Metapost will generate one EPS file
+ for each picture.
+
+ - To include your pictures in your document you can use the graphics package
+ in LaTeX or epsf.tex in plainTeX:
+ \usepackage{graphics} % LaTeX
+ \input epsf.tex % plainTeX
+ If you use a driver other than dvips for converting TeX DVI output to PS, you
+ may need to add the following line in your LaTeX document:
+ \DeclareGraphicsRule{*}{eps}{*}{}
+ Each picture you made is in a separate file. The first picture is in, e.g.,
+ figure.0, the second in figure.1, and so on.... To place the third picture in
+ your document, for example, all you have to do is:
+ \includegraphics{figure.2} % LaTeX
+ \epsfbox{figure.2} % plainTeX
+
+ The advantage, if any, of the mp terminal over a postscript terminal is
+ editable output. Considerable effort went into making this output as clean as
+ possible. For those knowledgeable in the Metapost language, the default line
+ types and colors can be changed by editing the arrays `lt[]` and `col[]`.
+ The choice of solid vs dashed lines, and color vs black lines can be change by
+ changing the values assigned to the booleans `dashedlines` and `colorlines`.
+ If the default `tex` option was in effect, global changes to the text of
+ labels can be achieved by editing the `vebatimtex...etex` block. In
+ particular, a LaTeX preamble can be added if desired, and then LaTeX's
+ built-in size changing commands can be used for maximum flexibility. Be sure
+ to set the appropriate MP configuration variable to force Metapost to run
+ LaTeX instead of plainTeX.
+?commands set terminal context
+?set terminal context
+?terminal context
+?set term context
+?term context
+?context
+ ConTeXt is a macro package for TeX, highly integrated with Metapost
+ (for drawing figures) and intended for creation of high-quality PDF documents.
+ The terminal outputs Metafun source, which can be edited manually,
+ but you should be able to configure most things from outside.
+
+ For an average user of ConTeXt + gnuplot module it's recommended to refer to
+ `Using ConTeXt` rather than reading this page
+ or to read the manual of the gnuplot module for ConTeXt.
+
+ The `context` terminal supports the following options:
+
+ Syntax:
+ set term context {default}
+ {defaultsize | size <scale> | size <xsize>{in|cm}, <ysize>{in|cm}}
+ {input | standalone}
+ {timestamp | notimestamp}
+ {noheader | header "<header>"}
+ {color | colour | monochrome}
+ {rounded | mitered | beveled} {round | butt | squared}
+ {dashed | solid} {dashlength | dl <dl>}
+ {linewidth | lw <lw>}
+ {fontscale <fontscale>}
+ {mppoints | texpoints}
+ {inlineimages | externalimages}
+ {defaultfont | font "{<fontname>}{,<fontsize>}"}
+
+ In non-standalone (`input`) graphic only parameters `size` to select graphic
+ size, `fontscale` to scale all the labels for a factor <fontscale>
+ and font size, make sense, the rest is silently
+ ignored and should be configured in the .tex file which inputs the graphic.
+ It's highly recommended to set the proper fontsize if document font differs from
+ 12pt, so that gnuplot will know how much space to reserve for labels.
+
+ `default` resets all the options to their default values.
+
+ `defaultsize` sets the plot size to 5in,3in.
+ `size` <scale> sets the plot size to <scale> times <default value>.
+ If two arguments are given (separated with ','), the first one sets
+ the horizontal size and the second one the vertical size.
+ Size may be given without units (in which case it means relative to the default
+ value), with inches ('in') or centimeters ('cm').
+
+ `input` (default) creates a graphic that can be included into another ConTeXt
+ document.
+ `standalone` adds some lines, so that the document might be compiled as-is.
+ You might also want to add `header` in that case.
+
+ Use `header` for any additional settings/definitions/macros
+ that you might want to include in a standalone graphic. `noheader` is the default.
+
+ `notimestamp` prevents printing creation time in comments
+ (if version control is used, one may prefer not to commit new version when only date changes).
+
+ `color` to make color plots is the default, but `monochrome` doesn't do anything special yet.
+ If you have any good ideas how the behaviour should differ to suit the monochrome printers better,
+ your suggestions are welcome.
+
+ `rounded` (default), `mitered` and `beveled` control the shape of line joins.
+ `round` (default), `butt` and `squared` control the shape of line caps.
+ See PostScript or PDF Reference Manual for explanation. For wild-behaving functions
+ and thick lines
+ it is better to use `rounded` and `round` to prevent sharp corners in line joins.
+ (Some general support for this should be added to Gnuplot, so that the same options
+ could be set for each line (style) separately).
+
+ `dashed` (default) uses different dash patterns for different line types,
+ `solid` draws all plots with solid lines.
+
+ `dashlength` or `dl` scales the length of the dashed-line segments by <dl>.
+ `linewidth` or `lw` scales all linewidths by <lw>.
+ (lw 1 stands for 0.5bp, which is the default line width when drawing with Metapost.)
+ `fontscale` scales text labels for factor <fontscale> relative to default document font.
+
+ `mppoints` uses predefined point shapes, drawn in Metapost.
+ `texpoints` uses easily configurable set of symbols, defined with ConTeXt
+ in the following way:
+ \defineconversion[my own points][+,{\ss x},\mathematics{\circ}]
+ \setupGNUPLOTterminal[context][points=tex,pointset=my own points]
+
+ `inlineimages` writes binary images to a string and only works in ConTeXt MKIV.
+ `externalimages` writes PNG files to disk and also works with ConTeXt MKII.
+ Gnuplot needs to have support for PNG images built in for this to work.
+
+ With `font` you can set font name and size in standalone graphics.
+ In non-standalone (`input`) mode only the font size is important
+ to reserve enough space for text labels.
+ The command
+ set term context font "myfont,ss,10"
+ will result in
+ \setupbodyfont[myfont,ss,10pt]
+ If you additionaly set `fontscale` to 0.8 for example,
+ then the resulting font will be 8pt big and
+ set label ... font "myfont,12"
+ will come out as 9.6pt.
+
+ It is your own responsibility to provide proper typescripts (and header),
+ otherwise switching the font will have no effect.
+ For a standard font in ConTeXt MKII (pdfTeX) you could use:
+ set terminal context standalone header '\usetypescript[iwona][ec]' \
+ font "iwona,ss,11"
+ Please take a look into ConTeXt documentation, wiki or mailing list (archives)
+ for any up-to-date information about font usage.
+
+ Examples:
+ set terminal context size 10cm, 5cm # 10cm, 5cm
+ set terminal context size 4in, 3in # 4in, 3in
+ For standalone (whole-page) plots with labels in UTF-8 encoding:
+ set terminal context standalone header '\enableregime[utf-8]'
+
+ You need gnuplot module for ConTeXt
+ http://ctan.org/pkg/context-gnuplot
+ and a recent version of ConTeXt.
+ If you want to call gnuplot on-the-fly, you also need write18 enabled.
+ In most TeX distributions this can be set with shell_escape=t in texmf.cnf.
+
+ See
+ http://wiki.contextgarden.net/Gnuplot
+ for details about this terminal and for more exhaustive help & examples.
+
+ The easiest way to make plots in ConTeXt documents is
+ \usemodule[gnuplot]
+ \starttext
+ \title{How to draw nice plots with {\sc gnuplot}?}
+ \startGNUPLOTscript[sin]
+ set format y "%.1f"
+ plot sin(x) t '$\sin(x)$'
+ \stopGNUPLOTscript
+ \useGNUPLOTgraphic[sin]
+ \stoptext
+ This will run gnuplot automatically and include the resulting figure in the document.
+?bugs
+ Please e-mail bug reports to the gnuplot-bugs mailing list or
+ upload the report to the gnuplot web site on SourceForge.
+ Please give complete information on the version of gnuplot you are using
+ and, if possible, a test script that demonstrates the bug.
+ See `seeking-assistance`.
+
+ It is not possible to use in-line data (e.g. plot '-' ...) inside the curly
+ brackets of a `do` or `while` loop.
+
+ The layout and positioning of the plot key is inaccurate whenever superscripts,
+ subscripts, or explicit fonts are used in the key text. (Fixed in 4.7)
+
+ Floating point exceptions (floating point number too large/small, divide by
+ zero, etc.) may occasionally be generated by user defined functions. Some of
+ the demos in particular may cause numbers to exceed the floating point range.
+ Whether the system ignores such exceptions (in which case `gnuplot` labels
+ the corresponding point as undefined) or aborts `gnuplot` depends on the
+ compiler/runtime environment.
+
+ The gamma, bessel, and erf functions do not work for complex arguments.
+
+ Coordinates specified as "time" wrap at 24 hours.
+
+ The 'nohidden3d' option that is supposed to exempt individual plots from the
+ global property 'set hidden3d' does not work for parametric curves.
+
+ X11 terminal: It is difficult to select UTF-8 fonts. The program does not
+ track the true aspect ratio of the x11 terminal window. In order for commands
+ such as "set size ratio" to work, the x11 window must itself have equal height
+ and width. Only one color palette at a time is active for any given x11 plot
+ window. This means that multiplots whose constituent plots use different
+ palettes will not display correctly in x11.
+
+ Qt terminal: If the local qt environment does not support "opengl" as a
+ rendering mode then display of polygons and surfaces can be very slow.
+
+?bugs external_libraries
+ External library GD (used by PNG/JPEG/GIF drivers):
+ Versions of libgd through 2.0.33 contain various bugs in mapping the characters
+ of Adobe's Symbol font. Also it is possible to trigger a library segfault if
+ an anti-aliased line crosses an upper corner of the canvas.
+
+ External library PDFlib (used by PDF driver):
+ Gnuplot can be linked against libpdf versions 4, 5, or 6. However, these
+ versions differ in their handling of piped I/O. Therefore gnuplot scripts
+ using piped output to PDF may work only for some versions of PDFlib.
+
+ External library svgalib (used by linux and vgagl driver):
+ Requires gnuplot to be suid root (bad!) and has many bugs that are specific
+ to the video card or graphics driver used in X11.
+
+ Internationalization (locale settings):
+ Gnuplot uses the C runtime library routine setlocale() to control
+ locale-specific formatting of input and output number, times, and date strings.
+ The locales available, and the level of support for locale features such as
+ "thousands' grouping separator", depend on the internationalization support
+ provided by your individual machine.
--- /dev/null
+###
+### Gnuplot version 4.6 intialization file
+### This file is loaded by gnuplot at the start of each run.
+### It is provided as a template, with all commands commented out.
+### Uncomment and customize lines for local use.
+### Any commands placed here will affect all users.
+### To customize gnuplot's initial state for an individual user,
+### place commands in a private file ~/.gnuplot instead.
+
+###
+### Language initialization
+###
+# set locale
+# set encoding locale
+
+###
+### Default line colors and repeat cycle
+###
+# set linetype 1 lc rgb "dark-violet" lw 1
+# set linetype 2 lc rgb "#009e73" lw 1
+# set linetype 3 lc rgb "#56b4e9" lw 1
+# set linetype 4 lc rgb "#e69f00" lw 1
+# set linetype 5 lc rgb "#f0e442" lw 1
+# set linetype 6 lc rgb "#0072b2" lw 1
+# set linetype 7 lc rgb "#e51e10" lw 1
+# set linetype 8 lc rgb "black" lw 1
+# set linetype cycle 8
+
+###
+### Initialize the default loadpath for shared gnuplot scripts and data.
+### Please confirm that this path is correct before uncommented the line below.
+###
+# set loadpath /usr/local/share/gnuplot/4.6/
+
+###
+### Some commonly used functions that are not built in
+###
+# sinc(x) = sin(x)/x
+
+###
+### Other preferences
+###
+# set clip two
+
--- /dev/null
+ Notes on using the gnuplot canvas terminal driver to create web pages
+ =====================================================================
+
+
+1) Using UTF-8 characters in your plots
+
+I expect that eventually web browsers will learn to draw text onto the HTML
+canvas element using their native font-handling code. But until then we
+have to refer to an external character drawing library.
+
+The gnuplot package includes two versions of a script to draw characters on
+the canvas. The first one, canvastext.js, was written by Jim Studt. It only
+knows about the 7-bit ascii characters. The second one, canvasmath.js, is
+an expanded version of Jim Studt's script that I wrote to handle UTF8.
+It contains glyphs for the first two unicode code pages (latin-1), the greek
+alphabet, and select math and physics symbols. You can use this to replace
+canvastext.js if you like, or refer to it explicitly in plots that need
+non-ascii characters.
+
+
+2) Browser dependencies
+
+As of this time (May 2009) the HTML canvas element is supported by the
+latest versions of Opera, Safari, Firefox, and Konqueror. However, each
+of these has quirks.
+
+For instance, only Firefox makes it easy to click and drag with the middle
+or right mouse buttons; the other browsers try to pop up various menus instead.
+We try to override this, but it doesn't always work.
+
+Conversely, Opera and Safari make it easy to use hot keys ('e' for refresh,
+'r' to toggle the ruler, etc), but I have not managed to get this to work
+in Firefox.
+
+If you run into problems, please try several browsers before concluding that it
+is a gnuplot problem. If you figure out a work-around for one of these browser
+quirks, please tell me so that we can try to incorporate into gnuplot output.
+
+
+3) Creating a basic web page with a single mouseable plot
+
+The canvas terminal driver itself will create a basic html document containing
+a mousable plot. The command options to do this are
+ set term canvas standalone mousing jsdir "http://myserver"
+ set output 'myplot.html'
+This document contains
+ - a reference to style sheet gnuplot_mouse.css
+ - a reference to support script gnuplot_mouse.js
+ - a javascript function named 'gnuplot_canvas'
+ - a canvas element named 'gnuplot_canvas' that will be drawn in by the
+ javascript function of the same name
+ - an html table containing the readout for mouse coordinates, as well
+ as clickable icons for additional mousing operations
+The *.css and *.js references point back to whatever source URL you specified
+in the jsdir option to the 'set term' command. For example:
+<link type="text/css" href="http://myserver/gnuplot_mouse.css" rel="stylesheet">
+In order for viewers to use your plot document, they must be able to access the
+*.css and *.js files via the URL embedded in the document.
+
+
+4) Creating a web page with multiple mouseable plots
+
+In order to embed multiple plots in a single document, you must
+provide your own html framework. You can use the one created by the canvas
+driver in standalone mode as a starting point, including the references to
+gnuplot_mouse.css and gnuplot_mouse.js. However, instead of a single
+javascript routine named gnuplot_canvas() that always draws the same plot,
+you must provide a wrapper routine with the same name that connects the
+mousing code to whichever plot is currently active. Here is an example:
+- create the individual plots as separate javascript files
+ set term canvas name 'plot1'
+ set output 'plot1.js'
+ plot something
+ set term canvas name 'plot2'
+ set output 'plot2.js'
+ plot something_else
+- create your html wrapper, including a script block such as the one below.
+ You must use these specific variable names, as they are referenced by the
+ javascript code produced by the canvas terminal.
+ <script type="text/javascript">
+ var canvas, ctx;
+ var grid_lines = true;
+ var zoomed = false;
+ var active_plot_name = "gnuplot_canvas";
+ var active_plot = dummyplot;
+ function dummyplot() {};
+ function gnuplot_canvas( plot ) { active_plot(); };
+ </script>
+- add one or more mousing output tables. As a model, you can use either the one
+ in a standalone plot or the file .../demo/html/mousebox.template.
+ The table id and text span ids in the "mousebox" table must match the ones
+ by your individual plots in order for mousing readout to work.
+- each of the individual plots in the document should be explicitly called when
+ the document is loaded. For example, for each plot there could be a block
+ of html similar to the following:
+ <canvas id="plot1" width="600" height="400" tabindex="0"></canvas>
+ <script src="plot1.js"></script>
+ <script>
+ if (window.attachEvent) {window.attachEvent('onload', plot1);}
+ else if (window.addEventListener) {window.addEventListener('load', plot1, false);}
+ </script>
+ Alternatively, the onload attributes could be set in the html <BODY> element
+
+
+
+ - Ethan A Merritt (sfeam@users.sourceforge.net)
+ May 2009
+
--- /dev/null
+/*
+ * $Id: canvasmath.js,v 1.6.4.1 2012/11/15 20:30:03 sfeam Exp $
+ */
+// The canvastext.js code was released to the public domain by Jim Studt, 2007.
+// He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
+// Mar 2009 Ethan A Merritt (EAM) Modify code to work in non-ascii environments.
+// Add Latin-1, Hershey simplex Greek, and math symbols with unicode indexing.
+// Apr 2012 Ethan A Merritt Composite widths, tab, newline
+// Nov 2012 Ethan A Merritt Additional UTF8 mathematical operators
+//
+var CanvasTextFunctions = { };
+
+CanvasTextFunctions.letters = {
+ ' ': { width: 16, points: [] },
+ '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
+ '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
+ '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
+ '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
+ '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
+ '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
+ ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
+ '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
+ '+': { width: 20, points: [[10,15],[10,3],[-1,-1],[4,9],[16,9]] },
+ ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '-': { width: 20, points: [[4,9],[16,9]] },
+ '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '/': { width: 20, points: [[19,25],[1,-7]] },
+ '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
+ '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
+ '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
+ '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
+ '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
+ '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
+ '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
+ '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
+ ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
+ '=': { width: 24, points: [[3,12],[20,12],[-1,-1],[3,6],[20,6]] },
+ '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
+ '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
+ '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
+ 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
+ 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
+ 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
+ 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
+ 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
+ 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
+ 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
+ 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
+ 'I': { width: 8, points: [[4,21],[4,0]] },
+ 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
+ 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
+ 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
+ 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
+ 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
+ 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
+ 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
+ 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
+ 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
+ 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
+ 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
+ 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
+ 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
+ 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
+ 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
+ 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
+ '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
+ '\\': { width: 14, points: [[0,21],[14,-3]] },
+ ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
+ '^': { width: 16, points: [[5,15],[8,19],[11,15],[-1,-1],[2,12],[8,18],[14,12]] },
+ '_': { width: 16, points: [[0,-2],[16,-2]] },
+ '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
+ 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
+ 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
+ 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
+ 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
+ 'l': { width: 8, points: [[4,21],[4,0]] },
+ 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
+ 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
+ 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
+ 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
+ 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
+ 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
+ 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
+ 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
+ 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
+ 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
+ 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
+ '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
+ '|': { width: 8, points: [[4,25],[4,-7]] },
+ '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
+ '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] },
+
+// latin-1 as diacritical + base character
+
+192: { width: 0, points: [[4,28],[10,24],[-99,'A']] },
+193: { width: 0, points: [[8,24],[14,28],[-99,'A']] },
+194: { width: 0, points: [[5,24],[9,27],[13,24],[-99,'A']] },
+195: { width: 0, points: [[4,24],[5,26],[6,27],[8,27], [10,24],[12,24],[13,25],[14,27],[-99,'A']] },
+196: { width: 0, points: [[6,25],[6,26],[7,26],[7,25],[-1,-1],[12,25],[12,26],[13,26],[13,25],[-99,'A']] },
+197: { width: 0, points: [[8,27],[6,25],[6,23],[8,21],[10,21],[12,23],[12,25],[10,27],[8,27],[-99,'A']]},
+198: { width: 11, points: [[3,0],[14,21],[-1,-1],[7,8],[14,8],[-99,'E']] },
+199: { width: 0, points: [[10,0],[10,-3],[11,-3],[12,-4],[12,-6],[11,-7],[8,-7],[-99,'C']] },
+200: { width: 0, points: [[8,28],[14,24],[-99,'E']] },
+201: { width: 0, points: [[6,24],[12,28],[-99,'E']] },
+202: { width: 0, points: [[5,24],[9,27],[13,24],[-99,'E']] },
+203: { width: 0, points: [[6,25],[6,26],[7,26],[7,25],[-1,-1],[12,25],[12,26],[13,26],[13,25],[-99,'E']] },
+204: { width: 0, points: [[-99,'I']] },
+205: { width: 0, points: [[-99,'I']] },
+206: { width: 0, points: [[-99,'I']] },
+207: { width: 0, points: [[-99,'I']] },
+209: { width: 0, points: [[6,24],[7,26],[8,27],[10,27], [12,24],[14,24],[15,25],[16,27],[-99,'N']] },
+210: { width: 0, points: [[8,28],[14,24],[-99,'O']] },
+211: { width: 0, points: [[6,24],[12,28],[-99,'O']] },
+212: { width: 0, points: [[7,24],[11,27],[15,24],[-99,'O']] },
+213: { width: 0, points: [[6,24],[7,26],[8,27],[10,27], [12,24],[14,24],[15,25],[16,27],[-99,'O']] },
+214: { width: 0, points: [[8,25],[8,26],[9,26],[9,25],[-1,-1],[14,25],[14,26],[15,26],[15,25],[-99,'O']] },
+216: { width: 0, points: [[3,0],[19,21],[-99,'O']] },
+217: { width: 0, points: [[8,28],[14,24],[-99,'U']] },
+218: { width: 0, points: [[6,24],[12,28],[-99,'U']] },
+219: { width: 0, points: [[7,24],[11,27],[15,24],[-99,'U']] },
+220: { width: 0, points: [[8,25],[8,26],[9,26],[9,25],[-1,-1],[14,25],[14,26],[15,26],[15,25],[-99,'U']] },
+224: { width: 0, points: [[8,21],[14,17],[-99,'a']] },
+225: { width: 0, points: [[6,17],[12,21],[-99,'a']] },
+226: { width: 0, points: [[5,17],[9,20],[13,17],[-99,'a']] },
+227: { width: 0, points: [[4,17],[5,19],[6,20],[8,20], [10,17],[12,17],[13,18],[14,20],[-99,'a']] },
+228: { width: 0, points: [[6,18],[6,19],[7,19],[7,18],[-1,-1],[12,18],[12,19],[13,19],[13,18],[-99,'a']] },
+229: { width: 0, points: [[9,21],[7,19],[7,18],[9,16],[10,16],[12,18],[12,19],[10,21],[8,21],[-99,'a']] },
+231: { width: 0, points: [[10,0],[10,-3],[11,-3],[12,-4],[12,-6],[11,-7],[8,-7],[-99,'c']] },
+232: { width: 0, points: [[8,21],[14,17],[-99,'e']] },
+233: { width: 0, points: [[6,17],[12,21],[-99,'e']] },
+234: { width: 0, points: [[5,17],[9,20],[13,17],[-99,'e']] },
+235: { width: 0, points: [[6,18],[6,19],[7,19],[7,18],[-1,-1],[12,18],[12,19],[13,19],[13,18],[-99,'e']] },
+236: { width: 8, points: [[4,14],[4,0],[-1,-1],[1,21],[4,18]] },
+237: { width: 8, points: [[4,14],[4,0],[-1,-1],[7,21],[4,18]] },
+238: { width: 8, points: [[4,14],[4,0],[-1,-1],[1,17],[4,20],[7,17]] },
+239: { width: 10, points: [[5,14],[5,0],[-1,-1],[2,18],[2,19],[3,19],[3,18],[-1,-1],[7,18],[7,19],[8,19],[8,18]] },
+241: { width: 0, points: [[5,17],[6,19],[7,20],[9,20], [11,17],[13,17],[14,18],[15,20],[-99,'n']] },
+242: { width: 0, points: [[8,21],[14,17],[-99,'o']] },
+243: { width: 0, points: [[6,17],[12,21],[-99,'o']] },
+244: { width: 0, points: [[5,17],[9,20],[13,17],[-99,'o']] },
+245: { width: 0, points: [[4,17],[5,19],[6,20],[8,20], [10,17],[12,17],[13,18],[14,20],[-99,'o']] },
+246: { width: 0, points: [[6,18],[6,19],[7,19],[7,18],[-1,-1],[12,18],[12,19],[13,19],[13,18],[-99,'o']] },
+247: { width: 20, points: [[4,9],[16,9],[-1,-1],[10,14],[10,13],[11,13],[11,14],[-1,-1],[10,4],[10,5],[11,5],[11,4]] },
+248: { width: 0, points: [[3,0],[17,14],[-99,'o']] },
+249: { width: 0, points: [[8,21],[14,17],[-99,'u']] },
+250: { width: 0, points: [[6,17],[12,21],[-99,'u']] },
+251: { width: 0, points: [[5,17],[9,20],[13,17],[-99,'u']] },
+252: { width: 0, points: [[6,18],[6,19],[7,19],[7,18],[-1,-1],[12,18],[12,19],[13,19],[13,18],[-99,'u']] },
+253: { width: 0, points: [[12,21],[6,17],[-99,'y']] },
+255: { width: 0, points: [[6,18],[6,19],[7,19],[7,18],[-1,-1],[12,18],[12,19],[13,19],[13,18],[-99,'y']] },
+
+// Hershey simplex greek font
+
+913: { width: 18, points: [[9,22],[1,1],[-1,-1],[9,22],[17,1],[-1,-1],[4,8],[14,8]] },
+914: { width: 21, points: [[4,22],[4,1],[-1,-1],[4,22],[13,22],[16,21],[17,20],[18,18],[18,16],[17,14],[16,13],[13,12],[-1,-1],[4,12],[13,12],[16,11],[17,10],[18,8],[18,5],[17,3],[16,2],[13,1],[4,1]] },
+915: { width: 17, points: [[4,22],[4,1],[-1,-1],[4,22],[16,22]] },
+916: { width: 18, points: [[9,22],[1,1],[-1,-1],[9,22],[17,1],[-1,-1],[1,1],[17,1]] },
+917: { width: 19, points: [[4,22],[4,1],[-1,-1],[4,22],[17,22],[-1,-1],[4,12],[12,12],[-1,-1],[4,1],[17,1]] },
+918: { width: 20, points: [[17,22],[3,1],[-1,-1],[3,22],[17,22],[-1,-1],[3,1],[17,1]] },
+919: { width: 22, points: [[4,22],[4,1],[-1,-1],[18,22],[18,1],[-1,-1],[4,12],[18,12]] },
+920: { width: 22, points: [[9,22],[7,21],[5,19],[4,17],[3,14],[3,9],[4,6],[5,4],[7,2],[9,1],[13,1],[15,2],[17,4],[18,6],[19,9],[19,14],[18,17],[17,19],[15,21],[13,22],[9,22],[-1,-1],[8,12],[14,12]] },
+921: { width: 8, points: [[4,22],[4,1]] },
+922: { width: 21, points: [[4,22],[4,1],[-1,-1],[18,22],[4,8],[-1,-1],[9,13],[18,1]] },
+923: { width: 18, points: [[9,22],[1,1],[-1,-1],[9,22],[17,1]] },
+924: { width: 24, points: [[4,22],[4,1],[-1,-1],[4,22],[12,1],[-1,-1],[20,22],[12,1],[-1,-1],[20,22],[20,1]] },
+925: { width: 22, points: [[4,22],[4,1],[-1,-1],[4,22],[18,1],[-1,-1],[18,22],[18,1]] },
+926: { width: 18, points: [[2,22],[16,22],[-1,-1],[6,12],[12,12],[-1,-1],[2,1],[16,1]] },
+927: { width: 22, points: [[9,22],[7,21],[5,19],[4,17],[3,14],[3,9],[4,6],[5,4],[7,2],[9,1],[13,1],[15,2],[17,4],[18,6],[19,9],[19,14],[18,17],[17,19],[15,21],[13,22],[9,22]] },
+928: { width: 22, points: [[4,22],[4,1],[-1,-1],[18,22],[18,1],[-1,-1],[4,22],[18,22]] },
+929: { width: 21, points: [[4,22],[4,1],[-1,-1],[4,22],[13,22],[16,21],[17,20],[18,18],[18,15],[17,13],[16,12],[13,11],[4,11]] },
+931: { width: 18, points: [[2,22],[9,12],[2,1],[-1,-1],[2,22],[16,22],[-1,-1],[2,1],[16,1]] },
+932: { width: 16, points: [[8,22],[8,1],[-1,-1],[1,22],[15,22]] },
+933: { width: 18, points: [[2,17],[2,19],[3,21],[4,22],[6,22],[7,21],[8,19],[9,15],[9,1],[-1,-1],[16,17],[16,19],[15,21],[14,22],[12,22],[11,21],[10,19],[9,15]] },
+934: { width: 20, points: [[10,22],[10,1],[-1,-1],[8,17],[5,16],[4,15],[3,13],[3,10],[4,8],[5,7],[8,6],[12,6],[15,7],[16,8],[17,10],[17,13],[16,15],[15,16],[12,17],[8,17]] },
+935: { width: 20, points: [[3,22],[17,1],[-1,-1],[3,1],[17,22]] },
+936: { width: 22, points: [[11,22],[11,1],[-1,-1],[2,16],[3,16],[4,15],[5,11],[6,9],[7,8],[10,7],[12,7],[15,8],[16,9],[17,11],[18,15],[19,16],[20,16]] },
+937: { width: 20, points: [[3,1],[7,1],[4,8],[3,12],[3,16],[4,19],[6,21],[9,22],[11,22],[14,21],[16,19],[17,16],[17,12],[16,8],[13,1],[17,1]] },
+945: { width: 21, points: [[9,15],[7,14],[5,12],[4,10],[3,7],[3,4],[4,2],[6,1],[8,1],[10,2],[13,5],[15,8],[17,12],[18,15],[-1,-1],[9,15],[11,15],[12,14],[13,12],[15,4],[16,2],[17,1],[18,1]] },
+946: { width: 19, points: [[12,22],[10,21],[8,19],[6,15],[5,12],[4,8],[3,2],[2,-6],[-1,-1],[12,22],[14,22],[16,20],[16,17],[15,15],[14,14],[12,13],[9,13],[-1,-1],[9,13],[11,12],[13,10],[14,8],[14,5],[13,3],[12,2],[10,1],[8,1],[6,2],[5,3],[4,6]] },
+947: { width: 19, points: [[1,12],[3,14],[5,15],[6,15],[8,14],[9,13],[10,10],[10,6],[9,1],[-1,-1],[17,15],[16,12],[15,10],[9,1],[7,-3],[6,-6]] },
+948: { width: 18, points: [[11,15],[8,15],[6,14],[4,12],[3,9],[3,6],[4,3],[5,2],[7,1],[9,1],[11,2],[13,4],[14,7],[14,10],[13,13],[11,15],[9,17],[8,19],[8,21],[9,22],[11,22],[13,21],[15,19]] },
+949: { width: 16, points: [[13,13],[12,14],[10,15],[7,15],[5,14],[5,12],[6,10],[9,9],[-1,-1],[9,9],[5,8],[3,6],[3,4],[4,2],[6,1],[9,1],[11,2],[13,4]] },
+950: { width: 15, points: [[10,22],[8,21],[7,20],[7,19],[8,18],[11,17],[14,17],[-1,-1],[14,17],[10,15],[7,13],[4,10],[3,7],[3,5],[4,3],[6,1],[9,-1],[10,-3],[10,-5],[9,-6],[7,-6],[6,-4]] },
+951: { width: 20, points: [[1,11],[2,13],[4,15],[6,15],[7,14],[7,12],[6,8],[4,1],[-1,-1],[6,8],[8,12],[10,14],[12,15],[14,15],[16,13],[16,10],[15,5],[12,-6]] },
+952: { width: 17, points: [[10,22],[8,21],[6,18],[5,16],[4,13],[3,8],[3,4],[4,2],[5,1],[7,1],[9,2],[11,5],[12,7],[13,10],[14,15],[14,19],[13,21],[12,22],[10,22],[-1,-1],[4,12],[13,12]] },
+953: { width: 11, points: [[6,15],[4,8],[3,4],[3,2],[4,1],[6,1],[8,3],[9,5]] },
+954: { width: 18, points: [[6,15],[2,1],[-1,-1],[16,14],[15,15],[14,15],[12,14],[8,10],[6,9],[5,9],[-1,-1],[5,9],[7,8],[8,7],[10,2],[11,1],[12,1],[13,2]] },
+955: { width: 16, points: [[1,22],[3,22],[5,21],[6,20],[14,1],[-1,-1],[8,15],[2,1]] },
+956: { width: 21, points: [[7,15],[1,-6],[-1,-1],[6,11],[5,6],[5,3],[7,1],[9,1],[11,2],[13,4],[15,8],[-1,-1],[17,15],[15,8],[14,4],[14,2],[15,1],[17,1],[19,3],[20,5]] },
+957: { width: 18, points: [[3,15],[6,15],[5,9],[4,4],[3,1],[-1,-1],[16,15],[15,12],[14,10],[12,7],[9,4],[6,2],[3,1]] },
+958: { width: 16, points: [[10,22],[8,21],[7,20],[7,19],[8,18],[11,17],[14,17],[-1,-1],[11,17],[8,16],[6,15],[5,13],[5,11],[7,9],[10,8],[12,8],[-1,-1],[10,8],[6,7],[4,6],[3,4],[3,2],[5,0],[9,-2],[10,-3],[10,-5],[8,-6],[6,-6]] },
+959: { width: 17, points: [[8,15],[6,14],[4,12],[3,9],[3,6],[4,3],[5,2],[7,1],[9,1],[11,2],[13,4],[14,7],[14,10],[13,13],[12,14],[10,15],[8,15]] },
+960: { width: 18, points: [[6,15],[2,1],[-1,-1],[16,14],[15,15],[14,15],[12,14],[8,10],[6,9],[5,9],[-1,-1],[5,9],[7,8],[8,7],[10,2],[11,1],[12,1],[13,2]] },
+960: { width: 22, points: [[9,15],[5,1],[-1,-1],[14,15],[15,9],[16,4],[17,1],[-1,-1],[2,12],[4,14],[7,15],[20,15]] },
+961: { width: 18, points: [[4,9],[4,6],[5,3],[6,2],[8,1],[10,1],[12,2],[14,4],[15,7],[15,10],[14,13],[13,14],[11,15],[9,15],[7,14],[5,12],[4,9],[0,-6]] },
+962: { width: 18, points: [[15,13],[14,14],[11,15],[8,15],[5,14],[4,13],[3,11],[3,9],[4,7],[6,5],[10,2],[11,0],[11,-2],[10,-3],[8,-3]] },
+963: { width: 18, points: [[3,15],[6,15],[5,9],[4,4],[3,1],[-1,-1],[16,15],[15,12],[14,10],[12,7],[9,4],[6,2],[3,1]] },
+963: { width: 20, points: [[18,15],[8,15],[6,14],[4,12],[3,9],[3,6],[4,3],[5,2],[7,1],[9,1],[11,2],[13,4],[14,7],[14,10],[13,13],[12,14],[10,15]] },
+964: { width: 20, points: [[11,15],[8,1],[-1,-1],[2,12],[4,14],[7,15],[18,15]] },
+965: { width: 20, points: [[1,11],[2,13],[4,15],[6,15],[7,14],[7,12],[5,6],[5,3],[7,1],[9,1],[12,2],[14,4],[16,8],[17,12],[17,15]] },
+966: { width: 22, points: [[8,14],[6,13],[4,11],[3,8],[3,5],[4,3],[5,2],[7,1],[10,1],[13,2],[16,4],[18,7],[19,10],[19,13],[17,15],[15,15],[13,13],[11,9],[9,4],[6,-6]] },
+967: { width: 18, points: [[2,15],[4,15],[6,13],[12,-4],[14,-6],[16,-6],[-1,-1],[17,15],[16,13],[14,10],[4,-1],[2,-4],[1,-6]] },
+968: { width: 23, points: [[16,22],[8,-6],[-1,-1],[1,11],[2,13],[4,15],[6,15],[7,14],[7,12],[6,7],[6,4],[7,2],[9,1],[11,1],[14,2],[16,4],[18,7],[20,12],[21,15]] },
+969: { width: 23, points: [[8,15],[6,14],[4,11],[3,8],[3,5],[4,2],[5,1],[7,1],[9,2],[11,5],[-1,-1],[12,9],[11,5],[12,2],[13,1],[15,1],[17,2],[19,5],[20,8],[20,11],[19,14],[18,15]] },
+977: { width: 21, points: [[1,11],[2,13],[4,15],[6,15],[7,14],[7,12],[6,7],[6,4],[7,2],[8,1],[10,1],[12,2],[14,5],[15,7],[16,10],[17,15],[17,18],[16,21],[14,22],[12,22],[11,20],[11,18],[12,15],[14,12],[16,10],[19,8]] },
+981: { width: 20, points: [[14,22],[6,-6],[-1,-1],[9,15],[6,14],[4,12],[3,9],[3,6],[4,4],[6,2],[9,1],[11,1],[14,2],[16,4],[17,7],[17,10],[16,12],[14,14],[11,15],[9,15]] },
+982: { width: 23, points: [[9,14],[6,13],[4,11],[3,8],[3,5],[4,2],[5,1],[7,1],[9,2],[11,5],[-1,-1],[12,9],[11,5],[12,2],[13,1],[15,1],[17,2],[19,5],[20,8],[20,11],[19,14],[18,15],[-1,-1],[2,14],[4,15],[20,15]] },
+986: { width: 18, points: [[15,13],[14,14],[11,15],[8,15],[5,14],[4,13],[3,11],[3,9],[4,7],[6,5],[10,2],[11,0],[11,-2],[10,-3],[8,-3]] },
+
+// Hershey math symbols
+
+8501: { width: 20, points: [[3,19],[4,17],[16,5],[17,3],[17,1],[-1,-1],[4,16],[16,4],[-1,-1],[3,19],[3,17],[4,15],[16,3],[17,1],[-1,-1],[8,12],[4,8],[3,6],[3,4],[4,2],[3,1],[-1,-1],[3,6],[5,2],[-1,-1],[4,8],[4,6],[5,4],[5,2],[3,1],[-1,-1],[11,9],[16,14],[-1,-1],[14,19],[14,16],[15,14],[17,14],[17,16],[15,17],[14,19],[-1,-1],[14,19],[15,16],[17,14]] },
+8592: { width: 26, points: [[7,12],[4,10],[7,8],[-1,-1],[10,15],[5,10],[10,5],[-1,-1],[5,10],[22,10]] },
+8593: { width: 16, points: [[6,16],[8,19],[10,16],[-1,-1],[3,13],[8,18],[13,13],[-1,-1],[8,18],[8,1]] },
+8594: { width: 26, points: [[19,12],[22,10],[19,8],[-1,-1],[16,15],[21,10],[16,5],[-1,-1],[4,10],[21,10]] },
+8595: { width: 16, points: [[6,4],[8,1],[10,4],[-1,-1],[3,7],[8,2],[13,7],[-1,-1],[8,19],[8,2]] },
+8706: { width: 19, points: [[15,10],[14,13],[13,14],[11,15],[9,15],[6,14],[4,11],[3,8],[3,5],[4,3],[5,2],[7,1],[9,1],[12,2],[14,4],[15,7],[16,12],[16,17],[15,20],[14,21],[12,22],[9,22],[7,21],[6,20],[6,19],[7,19],[7,20],[-1,-1],[9,15],[7,14],[5,11],[4,8],[4,4],[5,2],[-1,-1],[9,1],[11,2],[13,4],[14,7],[15,12],[15,17],[14,20],[12,22]] },
+8710: { width: 20, points: [[2,1],[10,22],[-1,-1],[17,1],[10,20],[-1,-1],[18,1],[10,22],[-1,-1],[2,1],[18,1],[-1,-1],[3,2],[17,2]] },
+8711: { width: 20, points: [[2,22],[10,1],[-1,-1],[3,22],[10,3],[-1,-1],[18,22],[10,1],[-1,-1],[2,22],[18,22],[-1,-1],[3,21],[17,21]] },
+8712: { width: 24, points: [[20,18],[13,18],[9,17],[7,16],[5,14],[4,11],[4,9],[5,6],[7,4],[9,3],[13,2],[20,2],[-1,-1],[4,10],[16,10]] },
+8713: { width: 24, points: [[20,18],[13,18],[9,17],[7,16],[5,14],[4,11],[4,9],[5,6],[7,4],[9,3],[13,2],[20,2],[-1,-1],[4,10],[16,10],[-1,-1],[18,19],[6,1]] },
+8719: { width: 34, points: [[7,26],[7,-6],[-1,-1],[8,26],[8,-6],[-1,-1],[26,26],[26,-6],[-1,-1],[27,26],[27,-6],[-1,-1],[3,26],[31,26],[-1,-1],[3,-6],[12,-6],[-1,-1],[22,-6],[31,-6]] },
+8721: { width: 31, points: [[5,26],[15,12],[4,-6],[-1,-1],[4,26],[14,12],[-1,-1],[3,26],[14,11],[-1,-1],[3,26],[26,26],[28,19],[25,26],[-1,-1],[5,-5],[26,-5],[-1,-1],[4,-6],[26,-6],[28,1],[25,-6]] },
+8728: { width: 16, points: [[7,13],[5,11],[5,9],[7,7],[9,7],[11,9],[11,11],[9,13],[7,13]] },
+8729: { width: 16, points: [[7,13],[5,11],[5,9],[7,7],[9,7],[11,9],[11,11],[9,13],[7,13],[-1,-1],[7,12],[6,11],[6,9],[7,8],[9,8],[10,9],[10,11],[9,12],[7,12],[-1,-1],[8,11],[7,10],[8,9],[9,10],[8,11]] },
+8730: { width: 22, points: [[3,15],[7,15],[13,3],[-1,-1],[6,15],[13,1],[-1,-1],[22,26],[13,1]] },
+8733: { width: 25, points: [[21,5],[19,5],[17,6],[15,8],[12,12],[11,13],[9,14],[7,14],[5,13],[4,11],[4,9],[5,7],[7,6],[9,6],[11,7],[12,8],[15,12],[17,14],[19,15],[21,15]] },
+8734: { width: 25, points: [[22,9],[21,7],[19,6],[17,6],[15,7],[14,8],[11,12],[10,13],[8,14],[6,14],[4,13],[3,11],[3,9],[4,7],[6,6],[8,6],[10,7],[11,8],[14,12],[15,13],[17,14],[19,14],[21,13],[22,11],[22,9]] },
+8745: { width: 24, points: [[4,2],[4,9],[5,13],[6,15],[8,17],[11,18],[13,18],[16,17],[18,15],[19,13],[20,9],[20,2]] },
+8746: { width: 24, points: [[4,18],[4,11],[5,7],[6,5],[8,3],[11,2],[13,2],[16,3],[18,5],[19,7],[20,11],[20,18]] },
+8747: { width: 24, points: [[21,25],[20,24],[21,23],[22,24],[22,25],[21,26],[19,26],[17,25],[15,23],[14,21],[13,18],[12,14],[10,2],[9,-2],[8,-4],[-1,-1],[16,24],[15,22],[14,18],[12,6],[11,2],[10,-1],[9,-3],[7,-5],[5,-6],[3,-6],[2,-5],[2,-4],[3,-3],[4,-4],[3,-5]] },
+8771: { width: 24, points: [[3,10],[3,11],[4,13],[6,14],[8,14],[10,13],[14,11],[16,10],[18,10],[20,11],[22,13],[22,14],[-1,-1],[3,6],[22,6]] },
+8776: { width: 24, points: [[3,10],[3,11],[4,13],[6,14],[8,14],[10,13],[14,11],[16,10],[18,10],[20,11],[22,13],[22,14],[-1,-1],[3,4],[3,5],[4,7],[6,8],[8,8],[10,7],[14,5],[16,4],[18,4],[20,5],[22,7],[22,8]] },
+8800: { width: 24, points: [[18,19],[6,1],[-1,-1],[3,12],[20,12],[-1,-1],[3,6],[20,6]] },
+8804: { width: 24, points: [[20,4],[4,11],[20,18],[-1,-1],[4,0],[20,0]] },
+8805: { width: 24, points: [[4,4],[20,11],[4,18],[-1,-1],[4,0],[20,0]] },
+8834: { width: 24, points: [[20,18],[13,18],[9,17],[7,16],[5,14],[4,11],[4,9],[5,6],[7,4],[9,3],[13,2],[20,2]] },
+8835: { width: 24, points: [[4,18],[11,18],[15,17],[17,16],[19,14],[20,11],[20,9],[19,6],[17,4],[15,3],[11,2],[4,2]] },
+8838: { width: 24, points: [[20,20],[13,20],[9,19],[7,18],[5,16],[4,13],[4,11],[5,8],[7,6],[9,5],[13,4],[20,4],[-1,-1],[4,0],[20,0]] },
+8839: { width: 24, points: [[4,20],[11,20],[15,19],[17,18],[19,16],[20,13],[20,11],[19,8],[17,6],[15,5],[11,4],[4,4],[-1,-1],[4,0],[20,0]] },
+8853: { width: 20, points: [[9,17],[6,16],[4,14],[3,11],[3,9],[4,6],[6,4],[9,3],[11,3],[14,4],[16,6],[17,9],[17,11],[16,14],[14,16],[11,17],[9,17],[-1,-1],[5,10],[15,10],[-1,-1],[10,5],[10,15]] },
+8855: { width: 20, points: [[9,17],[6,16],[4,14],[3,11],[3,9],[4,6],[6,4],[9,3],[11,3],[14,4],[16,6],[17,9],[17,11],[16,14],[14,16],[11,17],[9,17],[-1,-1],[6,6],[14,14],[-1,-1],[14,6],[6,14]] },
+8857: { width: 20, points: [[9,17],[6,16],[4,14],[3,11],[3,9],[4,6],[6,4],[9,3],[11,3],[14,4],[16,6],[17,9],[17,11],[16,14],[14,16],[11,17],[9,17],[-1,-1],[10,11],[9,10],[10,9],[11,10],[10,11]] },
+9737: { width: 27, points: [[12,22],[9,21],[6,19],[4,16],[3,13],[3,10],[4,7],[6,4],[9,2],[12,1],[15,1],[18,2],[21,4],[23,7],[24,10],[24,13],[23,16],[21,19],[18,21],[15,22],[12,22],[-1,-1],[13,13],[12,12],[12,11],[13,10],[14,10],[15,11],[15,12],[14,13],[13,13],[-1,-1],[13,12],[13,11],[14,11],[14,12],[13,12]] },
+
+// Miscellaneous glyphs (EAM)
+
+176: { width: 14, points: [[6,22],[4,21],[3,19],[3,17],[4,15],[6,14],[8,14],[10,15],[11,17],[11,19],[10,21],[8,22],[6,22]] },
+177: { width: 20, points: [[10,15],[10,5],[-1,-1],[4,10],[16,10],[-1,-1],[4,2],[16,2]] },
+181: { width: 0, points: [[-99,956]] },
+183: { width: 10, points: [[5,11],[4,10],[5,9],[6,10],[5,11]] },
+188: { width: 23, points: [[4,0],[16,20],[-1,-1],[2,18],[4,20],[4,10],[-1,-1],[21,3],[12,3],[17,12],[18,12],[18,-1]] },
+189: { width: 23, points: [[4,0],[16,20],[-1,-1],[2,18],[4,20],[4,10],[-1,-1],[14,8],[16,10],[18,10],[20,8],[20,6],[14,1],[14,0],[21,0]] },
+215: { width: 20, points: [[4,16],[16,4],[-1,-1],[4,4],[16,16]] },
+402: { width: 15, points: [[15,21],[14,20],[15,19],[16,20],[16,21],[15,22],[13,22],[11,21],[10,20],[9,18],[8,15],[5,1],[4,-3],[3,-5],[-1,-1],[13,22],[11,20],[10,18],[9,14],[7,5],[6,1],[5,-2],[4,-4],[3,-5],[1,-6],[-1,-6],[-2,-5],[-2,-4],[-1,-3],[0,-4],[-1,-5],[-1,-1],[4,15],[14,15]] },
+8242: { width: 8, points: [[5,24],[3,16],[-1,-1],[3,16],[6,24]] },
+8243: { width: 11, points: [[4,24],[2,16],[-1,-1],[2,16],[5,24],[-1,-1],[9,24],[7,16],[-1,-1],[7,16],[10,24]] },
+8463: { width: 21, points: [[9,22],[3,1],[-1,-1],[5,7],[7,11],[9,13],[11,14],[13,14],[15,14],[16,12],[16,10],[14,5],[14,2],[15,1],[19,3],[-1,-1],[7,21],[9,22],[-1,-1],[4,15],[14,20]] },
+8491: { width: 0, points: [[-99,197]] },
+8495: { width: 18, points: [[4,6],[8,7],[11,8],[14,10],[15,12],[14,14],[12,15],[9,15],[6,14],[4,11],[3,8],[3,5],[4,3],[5,2],[7,1],[9,1],[12,2],[14,4],[-1,-1],[9,15],[7,14],[5,11],[4,8],[4,4],[5,2]] },
+
+// Used to indicate missing glyph
+129: { width: 18, points: [[2,-2],[2,21],[16,21],[16,-2],[2,-2]] }
+};
+
+
+CanvasTextFunctions.letter = function (ch)
+{
+ glyph = CanvasTextFunctions.letters[ch];
+
+ // EAM - Draw an empty box for undefined glyphs
+ if (glyph == undefined)
+ glyph = CanvasTextFunctions.letters[129];
+
+ return glyph;
+}
+
+CanvasTextFunctions.ascent = function( font, size)
+{
+ return size;
+}
+
+CanvasTextFunctions.descent = function( font, size)
+{
+ return 7.0*size/25.0;
+}
+
+CanvasTextFunctions.measure = function( font, size, str)
+{
+ var total = 0;
+ var len = str.length;
+
+ for ( i = 0; i < len; i++) {
+ var index = str.charAt(i);
+ // EAM deal with non-ascii characaters
+ if (index > '~')
+ index = str.charCodeAt(i);
+
+ var c = CanvasTextFunctions.letter(index);
+ if (!c) break;
+ total += c.width * size / 25.0;
+ if (c.width == 0) {
+ for ( j = 0; j < c.points.length; j++) {
+ var a = c.points[j];
+ if (a[0] == -99)
+ total += CanvasTextFunctions.letter(a[1]).width * size / 25.0;
+ }
+ }
+ }
+ return total;
+}
+
+CanvasTextFunctions.draw = function(ctx,font,size,x,y,str)
+{
+ var total = 0;
+ var len = str.length;
+ var mag = size / 25.0;
+ var composite = 0;
+ var xorig = x;
+
+ ctx.save();
+ ctx.lineCap = "round";
+ ctx.lineWidth = 2.0 * mag;
+
+ for (var i = 0; i < len; i++) {
+ var index = str.charAt(i);
+
+ // EAM tab and newline
+ if (index == ' ') {
+ var tabstop = 48 * mag;
+ x = tabstop * Math.ceil(x/tabstop);
+ continue;
+ } else if (index < ' ') {
+ x = xorig; y += size;
+ continue;
+ }
+ // EAM deal with non-ascii characaters
+ if (index > '~')
+ index = str.charCodeAt(i);
+
+ // EAM allow composing characters
+ if (composite != 0) {
+ index = composite;
+ composite = 0;
+ }
+
+ var c = CanvasTextFunctions.letter(index);
+ if ( !c) continue;
+
+ ctx.beginPath();
+
+ var penUp = 1;
+ var needStroke = 0;
+ for (var j = 0; j < c.points.length; j++) {
+ var a = c.points[j];
+ if ( a[0] == -1 && a[1] == -1) {
+ penUp = 1;
+ continue;
+ }
+ if ( a[0] == -99 ) {
+ composite = a[1];
+ i--;
+ break;
+ }
+ if ( penUp) {
+ ctx.moveTo( x + a[0]*mag, y - a[1]*mag);
+ penUp = false;
+ } else {
+ ctx.lineTo( x + a[0]*mag, y - a[1]*mag);
+ }
+ }
+ ctx.stroke();
+ x += c.width*mag;
+ }
+ ctx.restore();
+ return total;
+}
+
+CanvasTextFunctions.enable = function( ctx)
+{
+ ctx.drawText = function(font,size,x,y,text) { return CanvasTextFunctions.draw( ctx, font,size,x,y,text); };
+ ctx.measureText = function(font,size,text) { return CanvasTextFunctions.measure( font,size,text); };
+ ctx.fontAscent = function(font,size) { return CanvasTextFunctions.ascent(font,size); }
+ ctx.fontDescent = function(font,size) { return CanvasTextFunctions.descent(font,size); }
+
+ ctx.drawTextRight = function(font,size,x,y,text) {
+ var w = CanvasTextFunctions.measure(font,size,text);
+ return CanvasTextFunctions.draw( ctx, font,size,x-w,y,text);
+ };
+ ctx.drawTextCenter = function(font,size,x,y,text) {
+ var w = CanvasTextFunctions.measure(font,size,text);
+ return CanvasTextFunctions.draw( ctx, font,size,x-w/2,y,text);
+ };
+}
+
--- /dev/null
+/*
+ * $Id: canvastext.js,v 1.3 2009/02/22 19:14:05 sfeam Exp $
+ */
+// The canvastext.js code was released to the public domain by Jim Studt, 2007.
+// He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
+// Feb 2009 Ethan A Merritt (EAM) Modify code to work in non-ascii environments.
+//
+var CanvasTextFunctions = { };
+
+CanvasTextFunctions.letters = {
+ ' ': { width: 16, points: [] },
+ '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
+ '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
+ '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
+ '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
+ '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
+ '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
+ ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
+ '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
+ '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
+ ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '-': { width: 26, points: [[4,9],[22,9]] },
+ '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ '/': { width: 22, points: [[20,25],[2,-7]] },
+ '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
+ '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
+ '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
+ '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
+ '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
+ '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
+ '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
+ '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
+ '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
+ ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
+ ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
+ '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
+ '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
+ '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
+ '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
+ '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
+ 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
+ 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
+ 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
+ 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
+ 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
+ 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
+ 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
+ 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
+ 'I': { width: 8, points: [[4,21],[4,0]] },
+ 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
+ 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
+ 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
+ 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
+ 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
+ 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
+ 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
+ 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
+ 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
+ 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
+ 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
+ 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
+ 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
+ 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
+ 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
+ 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
+ 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
+ '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
+ '\\': { width: 14, points: [[0,21],[14,-3]] },
+ ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
+ '^': { width: 16, points: [[5,15],[8,19],[11,15],[-1,-1],[2,12],[8,18],[14,12]] },
+ '_': { width: 16, points: [[0,-2],[16,-2]] },
+ '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
+ 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
+ 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
+ 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
+ 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
+ 'l': { width: 8, points: [[4,21],[4,0]] },
+ 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
+ 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
+ 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
+ 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
+ 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
+ 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
+ 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
+ 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
+ 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
+ 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
+ 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
+ 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
+ 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
+ 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
+ '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
+ '|': { width: 8, points: [[4,25],[4,-7]] },
+ '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
+ '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] },
+
+// Miscellaneous glyphs (EAM)
+129: { width: 18, points: [[2,-2],[2,21],[16,21],[16,-2],[2,-2]] },
+176: { width: 8, points: [[3,22],[1,20],[1,18],[3,16],[5,16],[7,18],[7,20],[5,22],[3,22]]},
+197: { width: 18, points: [[9,18],[1,0],[-1,-1],[9,18],[17,0],[-1,-1],[4,7],[14,7],[-1,-1], [8,22],[6,20],[6,18],[8,16],[10,16],[12,18],[12,20],[10,22],[8,22]]},
+215: { width: 26, points: [[6,17],[20,3],[-1,-1],[6,3],[20,17]] }
+};
+
+CanvasTextFunctions.letter = function (ch)
+{
+ glyph = CanvasTextFunctions.letters[ch];
+
+ // EAM - Draw an empty box for undefined glyphs
+ if (glyph == undefined)
+ glyph = CanvasTextFunctions.letters[129];
+
+ return glyph;
+}
+
+CanvasTextFunctions.ascent = function( font, size)
+{
+ return size;
+}
+
+CanvasTextFunctions.descent = function( font, size)
+{
+ return 7.0*size/25.0;
+}
+
+CanvasTextFunctions.measure = function( font, size, str)
+{
+ var total = 0;
+ var len = str.length;
+
+ for ( i = 0; i < len; i++) {
+ var index = str.charAt(i);
+ // EAM deal with non-ascii characaters
+ if (index > '~')
+ index = str.charCodeAt(i);
+
+ var c = CanvasTextFunctions.letter(index);
+ if (c) total += c.width * size / 25.0;
+ }
+ return total;
+}
+
+CanvasTextFunctions.draw = function(ctx,font,size,x,y,str)
+{
+ var total = 0;
+ var len = str.length;
+ var mag = size / 25.0;
+
+ ctx.save();
+ ctx.lineCap = "round";
+ ctx.lineWidth = 2.0 * mag;
+
+ for ( i = 0; i < len; i++) {
+ var index = str.charAt(i);
+ // EAM deal with non-ascii characaters
+ if (index > '~')
+ index = str.charCodeAt(i);
+
+ var c = CanvasTextFunctions.letter(index);
+ if ( !c) continue;
+
+ ctx.beginPath();
+
+ var penUp = 1;
+ var needStroke = 0;
+ for ( j = 0; j < c.points.length; j++) {
+ var a = c.points[j];
+ if ( a[0] == -1 && a[1] == -1) {
+ penUp = 1;
+ continue;
+ }
+ if ( penUp) {
+ ctx.moveTo( x + a[0]*mag, y - a[1]*mag);
+ penUp = false;
+ } else {
+ ctx.lineTo( x + a[0]*mag, y - a[1]*mag);
+ }
+ }
+ ctx.stroke();
+ x += c.width*mag;
+ }
+ ctx.restore();
+ return total;
+}
+
+CanvasTextFunctions.enable = function( ctx)
+{
+ ctx.drawText = function(font,size,x,y,text) { return CanvasTextFunctions.draw( ctx, font,size,x,y,text); };
+ ctx.measureText = function(font,size,text) { return CanvasTextFunctions.measure( font,size,text); };
+ ctx.fontAscent = function(font,size) { return CanvasTextFunctions.ascent(font,size); }
+ ctx.fontDescent = function(font,size) { return CanvasTextFunctions.descent(font,size); }
+
+ ctx.drawTextRight = function(font,size,x,y,text) {
+ var w = CanvasTextFunctions.measure(font,size,text);
+ return CanvasTextFunctions.draw( ctx, font,size,x-w,y,text);
+ };
+ ctx.drawTextCenter = function(font,size,x,y,text) {
+ var w = CanvasTextFunctions.measure(font,size,text);
+ return CanvasTextFunctions.draw( ctx, font,size,x-w/2,y,text);
+ };
+}
+
--- /dev/null
+/*
+ * $Id: gnuplot_common.js,v 1.9 2011/10/01 04:10:48 sfeam Exp $
+ */
+// Shared routines for gnuplot's HTML5 canvas terminal driver.
+
+var gnuplot = { };
+
+gnuplot.common_version = "30 September 2011";
+
+gnuplot.L = function (x,y) {
+ if (gnuplot.zoomed) {
+ zoom = gnuplot.zoomXY(x/10.0,y/10.0);
+ ctx.lineTo(zoom.x,zoom.y);
+ } else
+ ctx.lineTo(x/10.0,y/10.0);
+}
+gnuplot.M = function (x,y) {
+ if (gnuplot.zoomed) {
+ zoom = gnuplot.zoomXY(x/10.0,y/10.0);
+ ctx.moveTo(zoom.x,zoom.y);
+ } else
+ ctx.moveTo(x/10.0,y/10.0);
+}
+gnuplot.R = function (x,y,w,h) {
+ if (gnuplot.zoomed) {
+ var dx, dy, dw, dh;
+ zoom = gnuplot.zoomXY(x/10.0,y/10.0);
+ if (zoom.x >= gnuplot.plot_xmax) return;
+ if (zoom.y >= gnuplot.plot_ybot) return;
+ dx = zoom.x; dy = zoom.y;
+ zoom = gnuplot.zoomXY((x+w)/10.,(y+h)/10.);
+ if (zoom.xraw <= gnuplot.plot_xmin) return;
+ if (zoom.yraw <= gnuplot.plot_ytop) return;
+ dw = zoom.x - dx; dh = zoom.y -dy;
+ ctx.fillRect(dx, dy, dw, dh);
+ } else
+ ctx.fillRect(x/10.0, y/10.0, w/10.0, h/10.0);
+}
+gnuplot.T = function (x,y,fontsize,justify,string) {
+ xx = x/10.0; yy = y/10.0;
+ if (gnuplot.zoomed) {
+ zoom = gnuplot.zoomXY(xx,yy);
+ if (zoom.clip) return;
+ xx = zoom.x; yy = zoom.y;
+ if (gnuplot.plot_xmin < xx && xx < gnuplot.plot_xmax && gnuplot.plot_ybot > yy && yy > gnuplot.plot_ytop)
+ if ((typeof(gnuplot.zoom_text) != "undefined") && (gnuplot.zoom_text == true))
+ fontsize = Math.sqrt(gnuplot.zoomW(fontsize)*gnuplot.zoomH(fontsize));
+ }
+ if (justify=="") ctx.drawText("sans", fontsize, xx, yy, string);
+ else if (justify=="Right") ctx.drawTextRight("sans", fontsize, xx, yy, string);
+ else if (justify=="Center") ctx.drawTextCenter("sans", fontsize, xx, yy, string);
+}
+gnuplot.TR = function (x,y,angle,fontsize,justify,string) {
+ xx = x/10.0; yy = y/10.0;
+ if (gnuplot.zoomed) {
+ zoom = gnuplot.zoomXY(xx,yy);
+ if (zoom.clip) return;
+ xx = zoom.x; yy = zoom.y;
+ if (gnuplot.plot_xmin < xx && xx < gnuplot.plot_xmax && gnuplot.plot_ybot > yy && yy > gnuplot.plot_ytop)
+ if ((typeof(gnuplot.zoom_text) != "undefined") && (gnuplot.zoom_text == true))
+ fontsize = Math.sqrt(gnuplot.zoomW(fontsize)*gnuplot.zoomH(fontsize));
+ }
+ ctx.save();
+ ctx.translate(xx,yy);
+ ctx.rotate(angle * Math.PI / 180);
+ if (justify=="") ctx.drawText("sans", fontsize, 0, 0, string);
+ else if (justify=="Right") ctx.drawTextRight("sans", fontsize, 0, 0, string);
+ else if (justify=="Center") ctx.drawTextCenter("sans", fontsize, 0, 0, string);
+ ctx.restore();
+}
+gnuplot.bp = function (x,y) // begin polygon
+ { ctx.beginPath(); gnuplot.M(x,y); }
+gnuplot.cfp = function () // close and fill polygon
+ { ctx.closePath(); ctx.fill(); }
+gnuplot.cfsp = function () // close and fill polygon with stroke color
+ { ctx.closePath(); ctx.fillStyle = ctx.strokeStyle; ctx.stroke(); ctx.fill(); }
+gnuplot.Dot = function (x,y) {
+ xx = x; yy = y;
+ if (gnuplot.zoomed) {zoom = gnuplot.zoomXY(xx,yy); xx = zoom.x; yy = zoom.y; if (zoom.clip) return;}
+ ctx.strokeRect(xx,yy,0.5,0.5);
+}
+gnuplot.Pt = function (N,x,y,w) {
+ xx = x; yy = y;
+ if (gnuplot.zoomed) {zoom = gnuplot.zoomXY(xx,yy); xx = zoom.x; yy = zoom.y; if (zoom.clip) return;}
+ if (w==0) return;
+ switch (N)
+ {
+ case 0:
+ ctx.beginPath();
+ ctx.moveTo(xx-w,yy); ctx.lineTo(xx+w,yy);
+ ctx.moveTo(xx,yy-w); ctx.lineTo(xx,yy+w);
+ ctx.stroke();
+ break;
+ case 1:
+ ww = w * 3/4;
+ ctx.beginPath();
+ ctx.moveTo(xx-ww,yy-ww); ctx.lineTo(xx+ww,yy+ww);
+ ctx.moveTo(xx+ww,yy-ww); ctx.lineTo(xx-ww,yy+ww);
+ ctx.stroke();
+ break;
+ case 2:
+ gnuplot.Pt(0,x,y,w); gnuplot.Pt(1,x,y,w);
+ break;
+ case 3:
+ ctx.strokeRect(xx-w/2,yy-w/2,w,w);
+ break;
+ case 4:
+ ctx.save(); ctx.strokeRect(xx-w/2,yy-w/2,w,w); ctx.restore();
+ ctx.fillRect(xx-w/2,yy-w/2,w,w);
+ break;
+ case 5:
+ ctx.beginPath(); ctx.arc(xx,yy,w/2,0,Math.PI*2,true); ctx.stroke();
+ break;
+ default:
+ case 6:
+ ctx.beginPath(); ctx.arc(xx,yy,w/2,0,Math.PI*2,true); ctx.fill();
+ break;
+ case 7:
+ ctx.beginPath();
+ ctx.moveTo(xx,yy-w); ctx.lineTo(xx-w,yy+w/2); ctx.lineTo(xx+w,yy+w/2);
+ ctx.closePath();
+ ctx.stroke();
+ break;
+ case 8:
+ ctx.beginPath();
+ ctx.moveTo(xx,yy-w); ctx.lineTo(xx-w,yy+w/2); ctx.lineTo(xx+w,yy+w/2);
+ ctx.closePath();
+ ctx.fill();
+ break;
+ }
+}
+
+// Zoomable image
+gnuplot.ZI = function (image, m, n, x1, y1, x2, y2) {
+ if (gnuplot.zoomed) {
+ var sx, sy, sw, sh, dx, dy, dw, dh;
+
+ zoom = gnuplot.zoomXY(x1/10.0,y1/10.0);
+ if (zoom.x >= gnuplot.plot_xmax) return;
+ if (zoom.y >= gnuplot.plot_ybot) return;
+ x1raw = zoom.xraw; y1raw = zoom.yraw;
+ dx = zoom.x; dy = zoom.y;
+
+ zoom = gnuplot.zoomXY((x2)/10.,(y2)/10.);
+ if (zoom.xraw <= gnuplot.plot_xmin) return;
+ if (zoom.yraw <= gnuplot.plot_ytop) return;
+ x2raw = zoom.xraw; y2raw = zoom.yraw;
+ dw = zoom.x - dx; dh = zoom.y - dy;
+
+ // FIXME: This is sometimes flaky. Needs integer truncation?
+ sx = 0; sy = 0; sw = m; sh = n;
+ if (x1raw < dx) sx = m * (dx - x1raw) / (x2raw - x1raw);
+ if (y1raw < dy) sy = n * (dy - y1raw) / (y2raw - y1raw);
+ if (x2raw > zoom.x)
+ sw = m * (1. - ((x2raw - zoom.x) / (x2raw - x1raw)));
+ if (y2raw > zoom.y)
+ sh = n * (1. - ((y2raw - zoom.y) / (y2raw - y1raw)));
+ sw = sw - sx; sh = sh - sy;
+
+ ctx.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);
+} else
+ ctx.drawImage(image, x1/10.0, y1/10.0, (x2-x1)/10.0, (y2-y1)/10.0);
+}
+
+// These methods are place holders that are loaded by gnuplot_dashedlines.js
+
+gnuplot.dashtype = function (dt) {} ;
+gnuplot.dashstart = function (x,y) {gnuplot.M(x,y);} ;
+gnuplot.dashstep = function (x,y) {gnuplot.L(x,y);} ;
+gnuplot.pattern = [];
--- /dev/null
+/*
+ * $Id: gnuplot_dashedlines.js,v 1.2 2010/11/26 23:39:16 sfeam Exp $
+ */
+/*
+ * Ethan Merritt November 2010
+ * Add a dashed line method to gnuplot's HTML5 canvas toolset.
+ * To start a path use DS(x0,y0) instead of M(x0,y0)
+ * To draw line segments use DL(x,y) instead of L(x,y)
+ * Finish as usual with ctx.stroke(); ctx.closePath();
+ */
+
+gnuplot.solid = [];
+gnuplot.dashpattern1 = gnuplot.solid;
+gnuplot.dashpattern2 = [ 0.5, 1.0 ];
+gnuplot.dashpattern3 = [ .12, .25, .37, .50, .62, .75, .87, 1.0 ];
+gnuplot.dashpattern4 = [ 0.50, 0.70, 0.80, 1.0 ];
+gnuplot.dashpattern5 = [ 0.30, 0.50, 0.60, 0.75, 0.85, 1.0 ];
+
+gnuplot.dashlength = 200.; // length of one complete pattern
+gnuplot.dashfraction = 0; // how far in the pattern we got last time
+gnuplot.dash_x = 0;
+gnuplot.dash_y = 0;
+
+gnuplot.dashtype = function(dt) {
+ gnuplot.pattern = dt;
+}
+
+gnuplot.dashstart = function(x,y) {
+ gnuplot.dash_x = x;
+ gnuplot.dash_y = y;
+ gnuplot.dashfraction = 0;
+ gnuplot.M(x,y);
+}
+
+gnuplot.dashstep = function(x,y) {
+ var delx = x - gnuplot.dash_x;
+ var dely = y - gnuplot.dash_y;
+ var stride = Math.sqrt(delx*delx + dely*dely) / gnuplot.dashlength;
+ var this_step;
+
+ if (gnuplot.pattern.length == 0) {gnuplot.L(x,y); return;}
+
+ while (stride > 0) {
+ // Find which piece of the pattern we are in
+ for (i=0; gnuplot.pattern[i] <= gnuplot.dashfraction; i++);
+
+ this_step = gnuplot.pattern[i] - gnuplot.dashfraction;
+ if (stride > this_step) {
+ new_x = gnuplot.dash_x + delx*this_step/stride;
+ new_y = gnuplot.dash_y + dely*this_step/stride;
+ stride = stride - this_step;
+ gnuplot.dashfraction = gnuplot.pattern[i];
+ delx = x - new_x;
+ dely = y - new_y;
+ } else {
+ new_x = x;
+ new_y = y;
+ gnuplot.dashfraction = gnuplot.dashfraction + stride;
+ stride = 0;
+ }
+ if (i%2==0) gnuplot.L(new_x,new_y);
+ else gnuplot.M(new_x,new_y);
+
+ gnuplot.dash_x = new_x;
+ gnuplot.dash_y = new_y;
+ if (gnuplot.dashfraction >= 1.0) gnuplot.dashfraction = 0;
+ }
+}
--- /dev/null
+canvas { border:0; background-color: white; }
+td.mousebox { vertical-align: top; }
+td.mbh { height: 16pt; }
+td.mb0 { text-align: left; font-size: smaller; width: 20px; padding-left: 15px;
+ color:#000; background-color: #EEE}
+td.mb1 { text-align: left; font-size: smaller; width: 80px; padding-left: 15px;
+ color:#070; background-color: #EEE}
+td.icon { width: 16px; height: 16px; font-size: 14px; text-align: right;
+ background-color: #EEE}
+td.blank { height: 16px; font-size: 12pt; text-align: right;
+ background-color: #EEE}
+.icon-image { float:right; margin: 0 0 0 0; }
+.noborder { border: 0; vertical-align: text-top; }
+table.mbleft { border-collapse: collapse; border: 0; margin-left: auto; margin-right: auto; }
+table.mbright { border-collapse: collapse; border: 0; margin-left: 0; margin-right: auto; }
+table.mbunder { border-collapse: collapse; border: 0; margin-left: auto; margin-right: auto; }
+table.plot { border-collapse: collapse; border: 0; margin-left: auto; margin-right: auto; }
+table.mousebox { border-collapse: collapse; margin-left: 0; margin-right: 10px; border: 0; }
+div.gnuplot { background-color: white; }
--- /dev/null
+/*
+ * $Id: gnuplot_mouse.js,v 1.16 2011/09/04 02:05:25 sfeam Exp $
+ */
+ gnuplot.mouse_version = "03 September 2011";
+
+// Mousing code for use with gnuplot's 'canvas' terminal driver.
+// The functions defined here assume that the javascript plot produced by
+// gnuplot initializes the plot boundary and scaling parameters.
+
+ gnuplot.mousex = 0;
+ gnuplot.mousey = 0;
+ gnuplot.plotx = 0;
+ gnuplot.ploty = 0;
+ gnuplot.scaled_x = 0;
+ gnuplot.scaled_y = 0;
+
+// These will be initialized by the gnuplot canvas-drawing function
+ gnuplot.plot_xmin = 0;
+ gnuplot.plot_xmax = 0;
+ gnuplot.plot_ybot = 0;
+ gnuplot.plot_ytop = 0;
+ gnuplot.plot_width = 0
+ gnuplot.plot_height = 0
+ gnuplot.plot_term_ymax = 0;
+ gnuplot.plot_axis_xmin = 0;
+ gnuplot.plot_axis_xmax = 0;
+ gnuplot.plot_axis_width = 0;
+ gnuplot.plot_axis_height = 0;
+ gnuplot.plot_axis_ymin = 0;
+ gnuplot.plot_axis_ymax = 0;
+ gnuplot.plot_axis_x2min = "none";
+ gnuplot.plot_axis_y2min = "none";
+ gnuplot.plot_logaxis_x = 0;
+ gnuplot.plot_logaxis_y = 0;
+ gnuplot.grid_lines = true;
+ gnuplot.zoom_text = false;
+
+// These are the equivalent parameters while zooming
+ gnuplot.zoom_axis_xmin = 0;
+ gnuplot.zoom_axis_xmax = 0;
+ gnuplot.zoom_axis_ymin = 0;
+ gnuplot.zoom_axis_ymax = 0;
+ gnuplot.zoom_axis_x2min = 0;
+ gnuplot.zoom_axis_x2max = 0;
+ gnuplot.zoom_axis_y2min = 0;
+ gnuplot.zoom_axis_y2max = 0;
+ gnuplot.zoom_axis_width = 0;
+ gnuplot.zoom_axis_height = 0;
+ gnuplot.zoom_temp_xmin = 0;
+ gnuplot.zoom_temp_ymin = 0;
+ gnuplot.zoom_temp_x2min = 0;
+ gnuplot.zoom_temp_y2min = 0;
+ gnuplot.zoom_in_progress = false;
+
+ gnuplot.full_canvas_image = null;
+ gnuplot.axisdate = new Date();
+
+gnuplot.init = function ()
+{
+ if (document.getElementById("gnuplot_canvas"))
+ document.getElementById("gnuplot_canvas").onmousemove = gnuplot.mouse_update;
+ if (document.getElementById("gnuplot_canvas"))
+ document.getElementById("gnuplot_canvas").onmouseup = gnuplot.zoom_in;
+ if (document.getElementById("gnuplot_canvas"))
+ document.getElementById("gnuplot_canvas").onmousedown = gnuplot.saveclick;
+ if (document.getElementById("gnuplot_canvas"))
+ document.getElementById("gnuplot_canvas").onkeydown = gnuplot.do_hotkey;
+ if (document.getElementById("gnuplot_grid_icon"))
+ document.getElementById("gnuplot_grid_icon").onmouseup = gnuplot.toggle_grid;
+ if (document.getElementById("gnuplot_textzoom_icon"))
+ document.getElementById("gnuplot_textzoom_icon").onmouseup = gnuplot.toggle_zoom_text;
+ if (document.getElementById("gnuplot_rezoom_icon"))
+ document.getElementById("gnuplot_rezoom_icon").onmouseup = gnuplot.rezoom;
+ if (document.getElementById("gnuplot_unzoom_icon"))
+ document.getElementById("gnuplot_unzoom_icon").onmouseup = gnuplot.unzoom;
+ gnuplot.mouse_update();
+}
+
+gnuplot.getMouseCoordsWithinTarget = function(event)
+{
+ var coords = { x: 0, y: 0};
+
+ if(!event) // then we're in a non-DOM (probably IE) browser
+ {
+ event = window.event;
+ if (event) {
+ coords.x = event.offsetX;
+ coords.y = event.offsetY;
+ }
+ }
+ else // we assume DOM modeled javascript
+ {
+ var Element = event.target ;
+ var CalculatedTotalOffsetLeft = 0;
+ var CalculatedTotalOffsetTop = 0 ;
+
+ while (Element.offsetParent)
+ {
+ CalculatedTotalOffsetLeft += Element.offsetLeft ;
+ CalculatedTotalOffsetTop += Element.offsetTop ;
+ Element = Element.offsetParent ;
+ }
+
+ coords.x = event.pageX - CalculatedTotalOffsetLeft ;
+ coords.y = event.pageY - CalculatedTotalOffsetTop ;
+ }
+
+ gnuplot.mousex = coords.x;
+ gnuplot.mousey = coords.y;
+}
+
+
+gnuplot.mouse_update = function(e)
+{
+ gnuplot.getMouseCoordsWithinTarget(e);
+
+ gnuplot.plotx = gnuplot.mousex - gnuplot.plot_xmin;
+ gnuplot.ploty = -(gnuplot.mousey - gnuplot.plot_ybot);
+
+ // Limit tracking to the interior of the plot
+ if (gnuplot.plotx < 0 || gnuplot.ploty < 0) return;
+ if (gnuplot.mousex > gnuplot.plot_xmax || gnuplot.mousey < gnuplot.plot_ytop) return;
+
+ var axis_xmin = (gnuplot.zoomed) ? gnuplot.zoom_axis_xmin : gnuplot.plot_axis_xmin;
+ var axis_xmax = (gnuplot.zoomed) ? gnuplot.zoom_axis_xmax : gnuplot.plot_axis_xmax;
+ var axis_ymin = (gnuplot.zoomed) ? gnuplot.zoom_axis_ymin : gnuplot.plot_axis_ymin;
+ var axis_ymax = (gnuplot.zoomed) ? gnuplot.zoom_axis_ymax : gnuplot.plot_axis_ymax;
+
+ if (gnuplot.plot_logaxis_x != 0) {
+ x = Math.log(axis_xmax) - Math.log(axis_xmin);
+ x = x * (gnuplot.plotx / (gnuplot.plot_xmax-gnuplot.plot_xmin)) + Math.log(axis_xmin);
+ x = Math.exp(x);
+ } else {
+ x = axis_xmin + (gnuplot.plotx / (gnuplot.plot_xmax-gnuplot.plot_xmin)) * (axis_xmax - axis_xmin);
+ }
+
+ if (gnuplot.plot_logaxis_y != 0) {
+ y = Math.log(axis_ymax) - Math.log(axis_ymin);
+ y = y * (-gnuplot.ploty / (gnuplot.plot_ytop-gnuplot.plot_ybot)) + Math.log(axis_ymin);
+ y = Math.exp(y);
+ } else {
+ y = axis_ymin - (gnuplot.ploty / (gnuplot.plot_ytop-gnuplot.plot_ybot)) * (axis_ymax - axis_ymin);
+ }
+
+ if (gnuplot.plot_axis_x2min != "none") {
+ gnuplot.axis_x2min = (gnuplot.zoomed) ? gnuplot.zoom_axis_x2min : gnuplot.plot_axis_x2min;
+ gnuplot.axis_x2max = (gnuplot.zoomed) ? gnuplot.zoom_axis_x2max : gnuplot.plot_axis_x2max;
+ x2 = gnuplot.axis_x2min + (gnuplot.plotx / (gnuplot.plot_xmax-gnuplot.plot_xmin)) * (gnuplot.axis_x2max - gnuplot.axis_x2min);
+ if (document.getElementById(gnuplot.active_plot_name + "_x2"))
+ document.getElementById(gnuplot.active_plot_name + "_x2").innerHTML = x2.toPrecision(4);
+ }
+ if (gnuplot.plot_axis_y2min != "none") {
+ gnuplot.axis_y2min = (gnuplot.zoomed) ? gnuplot.zoom_axis_y2min : gnuplot.plot_axis_y2min;
+ gnuplot.axis_y2max = (gnuplot.zoomed) ? gnuplot.zoom_axis_y2max : gnuplot.plot_axis_y2max;
+ y2 = gnuplot.axis_y2min - (gnuplot.ploty / (gnuplot.plot_ytop-gnuplot.plot_ybot)) * (gnuplot.axis_y2max - gnuplot.axis_y2min);
+ if (document.getElementById(gnuplot.active_plot_name + "_y2"))
+ document.getElementById(gnuplot.active_plot_name + "_y2").innerHTML = y2.toPrecision(4);
+ }
+
+ if (gnuplot.polar_mode) {
+ polar = gnuplot.convert_to_polar(x,y);
+ label_x = "ang= " + polar.ang.toPrecision(4);
+ label_y = "R= " + polar.r.toPrecision(4);
+ } else if (typeof(gnuplot.plot_timeaxis_x) == "string" && gnuplot.plot_timeaxis_x != "") {
+ label_x = gnuplot.timefmt(x);
+ label_y = y.toPrecision(4);
+ } else {
+ label_x = x.toPrecision(4);
+ label_y = y.toPrecision(4);
+ }
+
+ if (document.getElementById(gnuplot.active_plot_name + "_x"))
+ document.getElementById(gnuplot.active_plot_name + "_x").innerHTML = label_x;
+ if (document.getElementById(gnuplot.active_plot_name + "_y"))
+ document.getElementById(gnuplot.active_plot_name + "_y").innerHTML = label_y;
+
+ // Echo the zoom box interactively
+ if (gnuplot.zoom_in_progress) {
+ // Clear previous box before drawing a new one
+ if (gnuplot.full_canvas_image == null) {
+ gnuplot.full_canvas_image = ctx.getImageData(0,0,canvas.width,canvas.height);
+ } else {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.putImageData(gnuplot.full_canvas_image,0,0);
+ }
+ ctx.strokeStyle="rgba(128,128,128,0.60)";
+ var x0 = gnuplot.plot_xmin + gnuplot.zoom_temp_plotx;
+ var y0 = gnuplot.plot_ybot - gnuplot.zoom_temp_ploty;
+ var w = gnuplot.plotx - gnuplot.zoom_temp_plotx;
+ var h = -(gnuplot.ploty - gnuplot.zoom_temp_ploty);
+ if (w<0) {x0 = x0 + w; w = -w;}
+ if (h<0) {y0 = y0 + h; h = -h;}
+ ctx.strokeRect(x0,y0,w,h);
+ }
+}
+
+gnuplot.timefmt = function (x)
+{
+ gnuplot.axisdate.setTime(1000. * (x + 946684800));
+
+ if (gnuplot.plot_timeaxis_x == "DateTime") {
+ return gnuplot.axisdate.toUTCString();
+ }
+ if (gnuplot.plot_timeaxis_x == "Date") {
+ year = gnuplot.axisdate.getUTCFullYear();
+ month = gnuplot.axisdate.getUTCMonth();
+ date = gnuplot.axisdate.getUTCDate();
+ return (" " + date).slice (-2) + "/"
+ + ("0" + (month+1)).slice (-2) + "/"
+ + year;
+ }
+ if (gnuplot.plot_timeaxis_x == "Time") {
+ hour = gnuplot.axisdate.getUTCHours();
+ minute = gnuplot.axisdate.getUTCMinutes();
+ second = gnuplot.axisdate.getUTCSeconds();
+ return ("0" + hour).slice (-2) + ":"
+ + ("0" + minute).slice (-2) + ":"
+ + ("0" + second).slice (-2);
+ }
+}
+
+gnuplot.convert_to_polar = function (x,y)
+{
+ polar = new Object;
+ var phi, r;
+ phi = Math.atan2(y,x);
+ if (gnuplot.plot_logaxis_r)
+ r = Math.exp( (x/Math.cos(phi) + Math.log(gnuplot.plot_axis_rmin)/Math.LN10) * Math.LN10);
+ else
+ r = x/Math.cos(phi) + gnuplot.plot_axis_rmin;
+ polar.ang = phi * 180./Math.PI;
+ polar.r = r;
+ return polar;
+}
+
+gnuplot.saveclick = function (event)
+{
+ gnuplot.mouse_update(event);
+
+ // Limit tracking to the interior of the plot
+ if (gnuplot.plotx < 0 || gnuplot.ploty < 0) return;
+ if (gnuplot.mousex > gnuplot.plot_xmax || gnuplot.mousey < gnuplot.plot_ytop) return;
+
+ if (event.which == null) /* IE case */
+ button= (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
+ else /* All others */
+ button= (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
+
+ if (button == "LEFT") {
+ ctx.strokeStyle="black";
+ ctx.strokeRect(gnuplot.mousex, gnuplot.mousey, 1, 1);
+ if (typeof(gnuplot.plot_timeaxis_x) == "string" && gnuplot.plot_timeaxis_x != "")
+ click = " " + gnuplot.timefmt(x) + ", " + y.toPrecision(4);
+ else
+ click = " " + x.toPrecision(4) + ", " + y.toPrecision(4);
+ ctx.drawText("sans", 9, gnuplot.mousex, gnuplot.mousey, click);
+ }
+
+ // Save starting corner of zoom box
+ else {
+ gnuplot.zoom_temp_xmin = x;
+ gnuplot.zoom_temp_ymin = y;
+ if (gnuplot.plot_axis_x2min != "none") gnuplot.zoom_temp_x2min = x2;
+ if (gnuplot.plot_axis_y2min != "none") gnuplot.zoom_temp_y2min = y2;
+ // Only used to echo the zoom box interactively
+ gnuplot.zoom_temp_plotx = gnuplot.plotx;
+ gnuplot.zoom_temp_ploty = gnuplot.ploty;
+ gnuplot.zoom_in_progress = true;
+ gnuplot.full_canvas_image = null;
+ }
+ return false; // Nobody else should respond to this event
+}
+
+gnuplot.zoom_in = function (event)
+{
+ if (!gnuplot.zoom_in_progress)
+ return false;
+
+ gnuplot.mouse_update(event);
+
+ if (event.which == null) /* IE case */
+ button= (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
+ else /* All others */
+ button= (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
+
+ // Save ending corner of zoom box
+ if (button != "LEFT") {
+ if (x > gnuplot.zoom_temp_xmin) {
+ gnuplot.zoom_axis_xmin = gnuplot.zoom_temp_xmin;
+ gnuplot.zoom_axis_xmax = x;
+ if (gnuplot.plot_axis_x2min != "none") {
+ gnuplot.zoom_axis_x2min = gnuplot.zoom_temp_x2min;
+ gnuplot.zoom_axis_x2max = x2;
+ }
+ } else {
+ gnuplot.zoom_axis_xmin = x;
+ gnuplot.zoom_axis_xmax = gnuplot.zoom_temp_xmin;
+ if (gnuplot.plot_axis_x2min != "none") {
+ gnuplot.zoom_axis_x2min = x2;
+ gnuplot.zoom_axis_x2max = gnuplot.zoom_temp_x2min;
+ }
+ }
+ if (y > gnuplot.zoom_temp_ymin) {
+ gnuplot.zoom_axis_ymin = gnuplot.zoom_temp_ymin;
+ gnuplot.zoom_axis_ymax = y;
+ if (gnuplot.plot_axis_y2min != "none") {
+ gnuplot.zoom_axis_y2min = gnuplot.zoom_temp_y2min;
+ gnuplot.zoom_axis_y2max = y2;
+ }
+ } else {
+ gnuplot.zoom_axis_ymin = y;
+ gnuplot.zoom_axis_ymax = gnuplot.zoom_temp_ymin;
+ if (gnuplot.plot_axis_y2min != "none") {
+ gnuplot.zoom_axis_y2min = y2;
+ gnuplot.zoom_axis_y2max = gnuplot.zoom_temp_y2min;
+ }
+ }
+ gnuplot.zoom_axis_width = gnuplot.zoom_axis_xmax - gnuplot.zoom_axis_xmin;
+ gnuplot.zoom_axis_height = gnuplot.zoom_axis_ymax - gnuplot.zoom_axis_ymin;
+ gnuplot.zoom_in_progress = false;
+ gnuplot.rezoom(event);
+ }
+ return false; // Nobody else should respond to this event
+}
+
+gnuplot.toggle_grid = function (e)
+{
+ if (!gnuplot.grid_lines) gnuplot.grid_lines = true;
+ else gnuplot.grid_lines = false;
+ ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+}
+
+gnuplot.toggle_zoom_text = function (e)
+{
+ if (!gnuplot.zoom_text) gnuplot.zoom_text = true;
+ else gnuplot.zoom_text = false;
+ ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+}
+
+gnuplot.rezoom = function (e)
+{
+ if (gnuplot.zoom_axis_width > 0)
+ gnuplot.zoomed = true;
+ ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+}
+
+gnuplot.unzoom = function (e)
+{
+ gnuplot.zoomed = false;
+ ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+}
+
+gnuplot.zoomXY = function(x,y)
+{
+ zoom = new Object;
+ var xreal, yreal;
+
+ zoom.x = x; zoom.y = y; zoom.clip = false;
+
+ if (gnuplot.plot_logaxis_x != 0) {
+ xreal = Math.log(gnuplot.plot_axis_xmax) - Math.log(gnuplot.plot_axis_xmin);
+ xreal = Math.log(gnuplot.plot_axis_xmin) + (x - gnuplot.plot_xmin) * xreal/gnuplot.plot_width;
+ zoom.x = Math.log(gnuplot.zoom_axis_xmax) - Math.log(gnuplot.zoom_axis_xmin);
+ zoom.x = gnuplot.plot_xmin + (xreal - Math.log(gnuplot.zoom_axis_xmin)) * gnuplot.plot_width/zoom.x;
+ } else {
+ xreal = gnuplot.plot_axis_xmin + (x - gnuplot.plot_xmin) * (gnuplot.plot_axis_width/gnuplot.plot_width);
+ zoom.x = gnuplot.plot_xmin + (xreal - gnuplot.zoom_axis_xmin) * (gnuplot.plot_width/gnuplot.zoom_axis_width);
+ }
+ if (gnuplot.plot_logaxis_y != 0) {
+ yreal = Math.log(gnuplot.plot_axis_ymax) - Math.log(gnuplot.plot_axis_ymin);
+ yreal = Math.log(gnuplot.plot_axis_ymin) + (gnuplot.plot_ybot - y) * yreal/gnuplot.plot_height;
+ zoom.y = Math.log(gnuplot.zoom_axis_ymax) - Math.log(gnuplot.zoom_axis_ymin);
+ zoom.y = gnuplot.plot_ybot - (yreal - Math.log(gnuplot.zoom_axis_ymin)) * gnuplot.plot_height/zoom.y;
+ } else {
+ yreal = gnuplot.plot_axis_ymin + (gnuplot.plot_ybot - y) * (gnuplot.plot_axis_height/gnuplot.plot_height);
+ zoom.y = gnuplot.plot_ybot - (yreal - gnuplot.zoom_axis_ymin) * (gnuplot.plot_height/gnuplot.zoom_axis_height);
+ }
+
+ // Report unclipped coords also
+ zoom.xraw = zoom.x; zoom.yraw = zoom.y;
+
+ // Limit the zoomed plot to the original plot area
+ if (x > gnuplot.plot_xmax) {
+ zoom.x = x;
+ if (gnuplot.plot_axis_y2min == "none") {
+ zoom.y = y;
+ return zoom;
+ }
+ if (gnuplot.plot_ybot <= y && y <= gnuplot.plot_ybot + 15)
+ zoom.clip = true;
+ }
+
+ else if (x < gnuplot.plot_xmin)
+ zoom.x = x;
+ else if (zoom.x < gnuplot.plot_xmin)
+ { zoom.x = gnuplot.plot_xmin; zoom.clip = true; }
+ else if (zoom.x > gnuplot.plot_xmax)
+ { zoom.x = gnuplot.plot_xmax; zoom.clip = true; }
+
+ if (y < gnuplot.plot_ytop) {
+ zoom.y = y;
+ if (gnuplot.plot_axis_x2min == "none") {
+ zoom.x = x; zoom.clip = false;
+ return zoom;
+ }
+ }
+
+ else if (y > gnuplot.plot_ybot)
+ zoom.y = y;
+ else if (zoom.y > gnuplot.plot_ybot)
+ { zoom.y = gnuplot.plot_ybot; zoom.clip = true; }
+ else if (zoom.y < gnuplot.plot_ytop)
+ { zoom.y = gnuplot.plot_ytop; zoom.clip = true; }
+
+ return zoom;
+}
+
+gnuplot.zoomW = function (w) { return (w*gnuplot.plot_axis_width/gnuplot.zoom_axis_width); }
+gnuplot.zoomH = function (h) { return (h*gnuplot.plot_axis_height/gnuplot.zoom_axis_height); }
+
+gnuplot.popup_help = function(URL) {
+ if (typeof(URL) != "string") {
+ if (typeof(gnuplot.help_URL) == "string")
+ URL = gnuplot.help_URL;
+ else
+ return;
+ }
+ // FIXME: Placeholder for useful action
+ if (URL != "")
+ window.open (URL,"gnuplot help");
+}
+
+gnuplot.toggle_plot = function(plotid) {
+ if (typeof(gnuplot["hide_"+plotid]) == "unknown")
+ gnuplot["hide_"+plotid] = false;
+ gnuplot["hide_"+plotid] = !gnuplot["hide_"+plotid];
+ ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+}
+
+gnuplot.do_hotkey = function(event) {
+ keychar = String.fromCharCode(event.charCode ? event.charCode : event.keyCode);
+ switch (keychar) {
+ case 'e': ctx.clearRect(0,0,gnuplot.plot_term_xmax,gnuplot.plot_term_ymax);
+ gnuplot_canvas();
+ break;
+ case 'g': gnuplot.toggle_grid();
+ break;
+ case 'n': gnuplot.rezoom();
+ break;
+ case 'r':
+ ctx.lineWidth = 0.5;
+ ctx.strokeStyle="rgba(128,128,128,0.50)";
+ ctx.moveTo(gnuplot.plot_xmin, gnuplot.mousey); ctx.lineTo(gnuplot.plot_xmax, gnuplot.mousey);
+ ctx.moveTo(gnuplot.mousex, gnuplot.plot_ybot); ctx.lineTo(gnuplot.mousex, gnuplot.plot_ytop);
+ ctx.stroke();
+ break;
+ case 'p':
+ case 'u': gnuplot.unzoom();
+ break;
+ case '\e': zoom_in_progress = false;
+ break;
+
+// Arrow keys
+ case '%': // ctx.drawText("sans", 10, gnuplot.mousex, gnuplot.mousey, "<");
+ break;
+ case '\'': // ctx.drawText("sans", 10, gnuplot.mousex, gnuplot.mousey, ">");
+ break;
+ case '&': // ctx.drawText("sans", 10, gnuplot.mousex, gnuplot.mousey, "^");
+ break;
+ case '(': // ctx.drawText("sans", 10, gnuplot.mousex, gnuplot.mousey, "v");
+ break;
+
+ default: ctx.drawText("sans", 10, gnuplot.mousex, gnuplot.mousey, keychar);
+ return true; // Let someone else handle it
+ break;
+ }
+ return false; // Nobody else should respond to this keypress
+}
--- /dev/null
+/*
+ * $Id: gnuplot_svg.js,v 1.8 2011/11/22 22:35:32 sfeam Exp $
+ */
+// Javascript routines for interaction with SVG documents produced by
+// gnuplot's SVG terminal driver.
+
+var gnuplot_svg = { };
+
+gnuplot_svg.version = "22 November 2011";
+
+gnuplot_svg.SVGDoc = null;
+gnuplot_svg.SVGRoot = null;
+
+gnuplot_svg.Init = function(e)
+{
+ gnuplot_svg.SVGDoc = e.target.ownerDocument;
+ gnuplot_svg.SVGRoot = gnuplot_svg.SVGDoc.documentElement;
+ gnuplot_svg.axisdate = new Date();
+}
+
+gnuplot_svg.toggleVisibility = function(evt, targetId)
+{
+ var newTarget = evt.target;
+ if (targetId)
+ newTarget = gnuplot_svg.SVGDoc.getElementById(targetId);
+
+ var newValue = newTarget.getAttributeNS(null, 'visibility')
+
+ if ('hidden' != newValue)
+ newValue = 'hidden';
+ else
+ newValue = 'visible';
+
+ newTarget.setAttributeNS(null, 'visibility', newValue);
+ evt.preventDefault();
+ evt.stopPropagation();
+}
+
+// Mouse tracking echos coordinates to a floating text box
+
+gnuplot_svg.getText = function() {
+ return(document.getElementById("coord_text"));
+}
+
+gnuplot_svg.updateCoordBox = function(t, evt) {
+ /*
+ * Apply screen CTM transformation to the evt screenX and screenY to get
+ * coordinates in SVG coordinate space. Use scaling parameters stored in
+ * the plot document by gnuplot to convert further into plot coordinates.
+ * Then position the floating text box using the SVG coordinates.
+ */
+ var m = document.documentElement.getScreenCTM();
+ var p = document.documentElement.createSVGPoint();
+ p.x = evt.clientX; p.y = evt.clientY;
+ p = p.matrixTransform(m.inverse());
+
+ // Allow for scrollbar position (Firefox, others?)
+ if (typeof evt.pageX != 'undefined') {
+ p.x = evt.pageX; p.y = evt.pageY;
+ }
+ t.setAttribute("x", p.x);
+ t.setAttribute("y", p.y);
+
+ plotcoord = gnuplot_svg.mouse2plot(p.x,p.y);
+
+ if (gnuplot_svg.polar_mode) {
+ polar = gnuplot_svg.convert_to_polar(plotcoord.x,plotcoord.y);
+ label_x = "ang= " + polar.ang.toPrecision(4);
+ label_y = "R= " + polar.r.toPrecision(4);
+ } else if (gnuplot_svg.plot_timeaxis_x == "Date") {
+ gnuplot_svg.axisdate.setTime(1000. * (plotcoord.x + 946684800));
+ year = gnuplot_svg.axisdate.getUTCFullYear();
+ month = gnuplot_svg.axisdate.getUTCMonth();
+ date = gnuplot_svg.axisdate.getUTCDate();
+ label_x = (" " + date).slice (-2) + "/"
+ + ("0" + (month+1)).slice (-2) + "/"
+ + year;
+ label_y = plotcoord.y.toFixed(2);
+ } else if (gnuplot_svg.plot_timeaxis_x == "Time") {
+ gnuplot_svg.axisdate.setTime(1000. * (plotcoord.x + 946684800));
+ hour = gnuplot_svg.axisdate.getUTCHours();
+ minute = gnuplot_svg.axisdate.getUTCMinutes();
+ second = gnuplot_svg.axisdate.getUTCSeconds();
+ label_x = ("0" + hour).slice (-2) + ":"
+ + ("0" + minute).slice (-2) + ":"
+ + ("0" + second).slice (-2);
+ label_y = plotcoord.y.toFixed(2);
+ } else if (gnuplot_svg.plot_timeaxis_x == "DateTime") {
+ gnuplot_svg.axisdate.setTime(1000. * (plotcoord.x + 946684800));
+ label_x = gnuplot_svg.axisdate.toUTCString();
+ label_y = plotcoord.y.toFixed(2);
+ } else {
+ label_x = plotcoord.x.toFixed(2);
+ label_y = plotcoord.y.toFixed(2);
+ }
+
+ while (null != t.firstChild) {
+ t.removeChild(t.firstChild);
+ }
+ var textNode = document.createTextNode(". "+label_x+" "+label_y);
+ t.appendChild(textNode);
+}
+
+gnuplot_svg.showCoordBox = function(evt) {
+ var t = gnuplot_svg.getText();
+ if (null != t) {
+ t.setAttribute("visibility", "visible");
+ gnuplot_svg.updateCoordBox(t, evt);
+ }
+}
+
+gnuplot_svg.moveCoordBox = function(evt) {
+ var t = gnuplot_svg.getText();
+ if (null != t)
+ gnuplot_svg.updateCoordBox(t, evt);
+}
+
+gnuplot_svg.hideCoordBox = function(evt) {
+ var t = gnuplot_svg.getText();
+ if (null != t)
+ t.setAttribute("visibility", "hidden");
+}
+
+gnuplot_svg.toggleCoordBox = function(evt) {
+ var t = gnuplot_svg.getText();
+ if (null != t) {
+ state = t.getAttribute('visibility');
+ if ('hidden' != state)
+ state = 'hidden';
+ else
+ state = 'visible';
+ t.setAttribute('visibility', state);
+ }
+}
+
+gnuplot_svg.toggleGrid = function() {
+ if (!gnuplot_svg.SVGDoc.getElementsByClassName) // Old browsers
+ return;
+ var grid = gnuplot_svg.SVGDoc.getElementsByClassName('gridline');
+ for (var i=0; i<grid.length; i++) {
+ state = grid[i].getAttribute('visibility');
+ grid[i].setAttribute('visibility', (state == 'hidden') ? 'visible' : 'hidden');
+ }
+}
+
+// Convert from svg panel mouse coordinates to the coordinate
+// system of the gnuplot figure
+gnuplot_svg.mouse2plot = function(mousex,mousey) {
+ var plotcoord = new Object;
+ var plotx = mousex - gnuplot_svg.plot_xmin;
+ var ploty = mousey - gnuplot_svg.plot_ybot;
+
+ if (gnuplot_svg.plot_logaxis_x != 0) {
+ x = Math.log(gnuplot_svg.plot_axis_xmax)
+ - Math.log(gnuplot_svg.plot_axis_xmin);
+ x = x * (plotx / (gnuplot_svg.plot_xmax - gnuplot_svg.plot_xmin))
+ + Math.log(gnuplot_svg.plot_axis_xmin);
+ x = Math.exp(x);
+ } else {
+ x = gnuplot_svg.plot_axis_xmin + (plotx / (gnuplot_svg.plot_xmax-gnuplot_svg.plot_xmin)) * (gnuplot_svg.plot_axis_xmax - gnuplot_svg.plot_axis_xmin);
+ }
+
+ if (gnuplot_svg.plot_logaxis_y != 0) {
+ y = Math.log(gnuplot_svg.plot_axis_ymax)
+ - Math.log(gnuplot_svg.plot_axis_ymin);
+ y = y * (ploty / (gnuplot_svg.plot_ytop - gnuplot_svg.plot_ybot))
+ + Math.log(gnuplot_svg.plot_axis_ymin);
+ y = Math.exp(y);
+ } else {
+ y = gnuplot_svg.plot_axis_ymin + (ploty / (gnuplot_svg.plot_ytop-gnuplot_svg.plot_ybot)) * (gnuplot_svg.plot_axis_ymax - gnuplot_svg.plot_axis_ymin);
+ }
+
+ plotcoord.x = x;
+ plotcoord.y = y;
+ return plotcoord;
+}
+
+gnuplot_svg.convert_to_polar = function (x,y)
+{
+ polar = new Object;
+ var phi, r;
+ phi = Math.atan2(y,x);
+ if (gnuplot_svg.plot_logaxis_r)
+ r = Math.exp( (x/Math.cos(phi) + Math.log(gnuplot_svg.plot_axis_rmin)/Math.LN10) * Math.LN10);
+ else
+ r = x/Math.cos(phi) + gnuplot_svg.plot_axis_rmin;
+ polar.ang = phi * 180./Math.PI;
+ polar.r = r;
+ return polar;
+}
+
--- /dev/null
+--[[
+
+ This is the execution script for the `Lua generic terminal' driver.
+
+ This script provides an interface to the PGF/TikZ package for LaTeX.
+
+
+ Copyright 2008 Peter Hedwig <peter@affenbande.org>
+
+
+
+ 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.
+
+
+
+ $Date: 2012/02/07 17:54:15 $
+ $Author: sfeam $
+ $Rev: 100 $
+
+]]--
+
+
+
+--[[
+
+ `term' gnuplot term_api -> local interface
+ `gp' local -> gnuplot interface
+
+ are both initialized by the terminal
+
+]]--
+
+
+--
+-- internal variables
+--
+
+local pgf = {}
+local gfx = {}
+
+-- the terminal default size in cm
+pgf.DEFAULT_CANVAS_SIZE_X = 12.5
+pgf.DEFAULT_CANVAS_SIZE_Y = 8.75
+-- tic default size in cm
+pgf.DEFAULT_TIC_SIZE = 0.18
+-- the terminal resolution in "dots" per cm.
+pgf.DEFAULT_RESOLUTION = 1000
+-- default font size in TeX pt
+pgf.DEFAULT_FONT_SIZE = 10
+-- default sizes for CM@10pt and default resolution
+-- there is no need to adapt these values when changing
+-- pgf.DEFAULT_FONT_SIZE or pgf.DEFAULT_RESOLUTION !
+pgf.DEFAULT_FONT_H_CHAR = 184
+pgf.DEFAULT_FONT_V_CHAR = 308
+
+
+pgf.STYLE_FILE_BASENAME = "gnuplot-lua-tikz" -- \usepackage{gnuplot-lua-tikz}
+
+pgf.REVISION = string.sub("$Rev: 100 $",7,-3)
+pgf.REVISION_DATE = string.gsub("$Date: 2012/02/07 17:54:15 $",
+ "$Date: ([0-9]+).([0-9]+).([0-9]+) .*","%1/%2/%3")
+
+pgf.styles = {}
+
+-- the styles are used in conjunction with the 'tikzarrows'
+-- and the style number directly corresponds to the used
+-- angle in the gnuplot style definition
+pgf.styles.arrows = {
+ [1] = {"gp arrow 1", ">=latex"},
+ [2] = {"gp arrow 2", ">=angle 90"},
+ [3] = {"gp arrow 3", ">=angle 60"},
+ [4] = {"gp arrow 4", ">=angle 45"},
+ [5] = {"gp arrow 5", ">=o"},
+ [6] = {"gp arrow 6", ">=*"},
+ [7] = {"gp arrow 7", ">=diamond"},
+ [8] = {"gp arrow 8", ">=open diamond"},
+ [9] = {"gp arrow 9", ">={]}"},
+ [10] = {"gp arrow 10", ">={[}"},
+ [11] = {"gp arrow 11", ">=)"},
+ [12] = {"gp arrow 12", ">=("}
+}
+
+-- plot styles are corresponding with linetypes and must have the same number of entries
+-- see option 'tikzplot' for usage
+pgf.styles.plotstyles_axes = {
+ [1] = {"gp plot axes", ""},
+ [2] = {"gp plot border", ""},
+}
+
+pgf.styles.plotstyles = {
+ [1] = {"gp plot 0", "smooth"},
+ [2] = {"gp plot 1", "smooth"},
+ [3] = {"gp plot 2", "smooth"},
+ [4] = {"gp plot 3", "smooth"},
+ [5] = {"gp plot 4", "smooth"},
+ [6] = {"gp plot 5", "smooth"},
+ [7] = {"gp plot 6", "smooth"},
+ [8] = {"gp plot 7", "smooth"}
+}
+
+pgf.styles.linetypes_axes = {
+ [1] = {"gp lt axes", "dotted"}, -- An lt of -1 is used for the X and Y axes.
+ [2] = {"gp lt border", "solid"}, -- An lt of -2 is used for the border of the plot.
+}
+
+pgf.styles.linetypes = {
+ [1] = {"gp lt plot 0", "solid"}, -- first graph
+ [2] = {"gp lt plot 1", "dashed"}, -- second ...
+ [3] = {"gp lt plot 2", "dash pattern=on 1.5pt off 2.25pt"},
+ [4] = {"gp lt plot 3", "dash pattern=on \\pgflinewidth off 1.125"},
+ [5] = {"gp lt plot 4", "dash pattern=on 4.5pt off 1.5pt on \\pgflinewidth off 1.5pt"},
+ [6] = {"gp lt plot 5", "dash pattern=on 2.25pt off 2.25pt on \\pgflinewidth off 2.25pt"},
+ [7] = {"gp lt plot 6", "dash pattern=on 1.5pt off 1.5pt on 1.5pt off 4.5pt"},
+ [8] = {"gp lt plot 7", "dash pattern=on \\pgflinewidth off 1.5pt on 4.5pt off 1.5pt on \\pgflinewidth off 1.5pt"}
+}
+
+-- corresponds to pgf.styles.linetypes
+pgf.styles.lt_colors_axes = {
+ [1] = {"gp lt color axes", "black!30"},
+ [2] = {"gp lt color border", "black"},
+}
+
+pgf.styles.lt_colors = {
+ [1] = {"gp lt color 0", "red"},
+ [2] = {"gp lt color 1", "green"},
+ [3] = {"gp lt color 2", "blue"},
+ [4] = {"gp lt color 3", "magenta"},
+ [5] = {"gp lt color 4", "cyan"},
+ [6] = {"gp lt color 5", "yellow"},
+ [7] = {"gp lt color 6", "orange"},
+ [8] = {"gp lt color 7", "purple"}
+}
+
+pgf.styles.patterns = {
+ [1] = {"gp pattern 0", "white"},
+ [2] = {"gp pattern 1", "pattern=north east lines"},
+ [3] = {"gp pattern 2", "pattern=north west lines"},
+ [4] = {"gp pattern 3", "pattern=crosshatch"},
+ [5] = {"gp pattern 4", "pattern=grid"},
+ [6] = {"gp pattern 5", "pattern=vertical lines"},
+ [7] = {"gp pattern 6", "pattern=horizontal lines"},
+ [8] = {"gp pattern 7", "pattern=dots"},
+ [9] = {"gp pattern 8", "pattern=crosshatch dots"},
+ [10] = {"gp pattern 9", "pattern=fivepointed stars"},
+ [11] = {"gp pattern 10", "pattern=sixpointed stars"},
+ [12] = {"gp pattern 11", "pattern=bricks"}
+}
+
+
+pgf.styles.plotmarks = {
+ [1] = {"gp mark 0", "mark size=.5\\pgflinewidth,mark=*"}, -- point (-1)
+ [2] = {"gp mark 1", "mark=+"},
+ [3] = {"gp mark 2", "mark=x"},
+ [4] = {"gp mark 3", "mark=star"},
+ [5] = {"gp mark 4", "mark=square"},
+ [6] = {"gp mark 5", "mark=square*"},
+ [7] = {"gp mark 6", "mark=o"},
+ [8] = {"gp mark 7", "mark=*"},
+ [9] = {"gp mark 8", "mark=triangle"},
+ [10] = {"gp mark 9", "mark=triangle*"},
+ [11] = {"gp mark 10", "mark=triangle,every mark/.append style={rotate=180}"},
+ [12] = {"gp mark 11", "mark=triangle*,every mark/.append style={rotate=180}"},
+ [13] = {"gp mark 12", "mark=diamond"},
+ [14] = {"gp mark 13", "mark=diamond*"},
+ [15] = {"gp mark 14", "mark=otimes"},
+ [16] = {"gp mark 15", "mark=oplus"}
+}
+
+--[[===============================================================================================
+
+ helper functions
+
+]]--===============================================================================================
+
+-- from the Lua wiki
+explode = function(div,str)
+ if (div=='') then return false end
+ local pos,arr = 0,{}
+ local trim = function(s) return (string.gsub(s,"^%s*(.-)%s*$", "%1")) end
+ -- for each divider found
+ for st,sp in function() return string.find(str,div,pos,true) end do
+ table.insert(arr, trim(string.sub(str,pos,st-1))) -- Attach chars left of current divider
+ pos = sp + 1 -- Jump past current divider
+ end
+ table.insert(arr, trim(string.sub(str,pos))) -- Attach chars right of last divider
+ return arr
+end
+
+
+
+--[[===============================================================================================
+
+ The PGF/TikZ output routines
+
+]]--===============================================================================================
+
+
+pgf.transform_xcoord = function(coord)
+ return (coord+gfx.origin_xoffset)*gfx.scalex
+end
+
+pgf.transform_ycoord = function(coord)
+ return (coord+gfx.origin_yoffset)*gfx.scaley
+end
+
+pgf.format_coord = function(xc, yc)
+ return string.format("%.3f,%.3f", pgf.transform_xcoord(xc), pgf.transform_ycoord(yc))
+end
+
+pgf.write_doc_begin = function(preamble)
+ gp.write(gfx.format[gfx.opt.tex_format].docheader)
+ gp.write(preamble)
+ gp.write(gfx.format[gfx.opt.tex_format].begindocument)
+end
+
+pgf.write_doc_end = function()
+ gp.write(gfx.format[gfx.opt.tex_format].enddocument)
+end
+
+pgf.write_graph_begin = function (font, noenv)
+ local global_opt = "" -- unused
+ if gfx.opt.full_doc then
+ gp.write(gfx.format[gfx.opt.tex_format].beforetikzpicture)
+ end
+ if noenv then
+ gp.write("%% ") -- comment out
+ end
+ gp.write(string.format("%s[gnuplot%s]\n", gfx.format[gfx.opt.tex_format].begintikzpicture, global_opt))
+ gp.write(string.format("%%%% generated with GNUPLOT %sp%s (%s; terminal rev. %s, script rev. %s)\n",
+ term.gp_version, term.gp_patchlevel, _VERSION, string.sub(term.lua_term_revision,7,-3), pgf.REVISION))
+ if not gfx.opt.notimestamp then
+ gp.write(string.format("%%%% %s\n", os.date()))
+ end
+ if font ~= "" then
+ gp.write(string.format("\\tikzset{every node/.append style={font=%s}}\n", font))
+ end
+ if gfx.opt.fontscale ~= nil then
+ gp.write(string.format("\\tikzset{every node/.append style={scale=%.2f}}\n", gfx.opt.fontscale))
+ end
+ if not gfx.opt.lines_dashed then
+ gp.write("\\gpsolidlines\n")
+ end
+ if not gfx.opt.lines_colored then
+ gp.write("\\gpmonochromelines\n")
+ end
+ if gfx.opt.bgcolor ~= nil then
+ gp.write(string.format("\\gpsetbgcolor{%.3f,%.3f,%.3f}\n", gfx.opt.bgcolor[1], gfx.opt.bgcolor[2], gfx.opt.bgcolor[3]))
+ end
+end
+
+pgf.write_graph_end = function(noenv)
+ if noenv then
+ gp.write("%% ") -- comment out
+ end
+ if gfx.opt.full_doc then
+ gp.write(gfx.format[gfx.opt.tex_format].beforeendtikzpicture)
+ end
+ gp.write(gfx.format[gfx.opt.tex_format].endtikzpicture .. "\n")
+ if gfx.opt.full_doc then
+ gp.write(gfx.format[gfx.opt.tex_format].aftertikzpicture)
+ end
+end
+
+pgf.draw_path = function(t)
+
+ local use_plot = false
+ local c_str = '--'
+
+ -- is the current linetype in the list of plots?
+ if #gfx.opt.plot_list > 0 then
+ for k, v in pairs(gfx.opt.plot_list) do
+ if gfx.linetype_idx_set == v then
+ use_plot = true
+ c_str = ' '
+ break
+ end
+ end
+ end
+
+ gp.write("\\draw[gp path] ")
+ if use_plot then
+ gp.write("plot["..pgf.styles.plotstyles[((gfx.linetype_idx_set) % #pgf.styles.plotstyles)+1][1].."] coordinates {")
+ end
+ gp.write("("..pgf.format_coord(t[1][1], t[1][2])..")")
+ for i = 2,#t-1 do
+ -- pretty printing
+ if (i % 6) == 0 then
+ gp.write("%\n ")
+ end
+ gp.write(c_str.."("..pgf.format_coord(t[i][1], t[i][2])..")")
+ end
+ if (#t % 6) == 0 then
+ gp.write("%\n ")
+ end
+ -- check for a cyclic path
+ if (t[1][1] == t[#t][1]) and (t[1][2] == t[#t][2]) and (not use_plot) then
+ gp.write("--cycle")
+ else
+ gp.write(c_str.."("..pgf.format_coord(t[#t][1], t[#t][2])..")")
+ end
+ if use_plot then
+ gp.write("}")
+ end
+ gp.write(";\n")
+end
+
+
+pgf.draw_arrow = function(t, direction, headstyle)
+ gp.write("\\draw[gp path")
+ if direction ~= '' then
+ gp.write(","..direction)
+ end
+ if headstyle > 0 then
+ gp.write(",gp arrow "..headstyle)
+ end
+ gp.write("]")
+ gp.write("("..pgf.format_coord(t[1][1], t[1][2])..")")
+ for i = 2,#t do
+ if (i % 6) == 0 then
+ gp.write("%\n ")
+ end
+ gp.write("--("..pgf.format_coord(t[i][1], t[i][2])..")")
+ end
+ gp.write(";\n")
+end
+
+
+pgf.draw_points = function(t, pm)
+ gp.write("\\gppoint{"..pm.."}{")
+ for i,v in ipairs(t) do
+ gp.write("("..pgf.format_coord(v[1], v[2])..")")
+ end
+ gp.write("}\n")
+end
+
+
+pgf.set_linetype = function(linetype)
+ gp.write("\\gpsetlinetype{"..linetype.."}\n")
+end
+
+
+pgf.set_color = function(color)
+ gp.write("\\gpcolor{"..color.."}\n")
+end
+
+
+pgf.set_linewidth = function(width)
+ gp.write(string.format("\\gpsetlinewidth{%.2f}\n", width))
+end
+
+
+pgf.set_pointsize = function(size)
+ gp.write(string.format("\\gpsetpointsize{%.2f}\n", 4*size))
+end
+
+
+pgf.write_text_node = function(t, text, angle, justification, font)
+ local node_options = justification
+ if angle ~= 0 then
+ node_options = node_options .. ",rotate=" .. angle
+ end
+ if font ~= '' then
+ node_options = node_options .. ",font=" .. font
+ end
+ gp.write(string.format("\\node[%s] at (%s) {%s};\n",
+ node_options, pgf.format_coord(t[1], t[2]), text))
+end
+
+
+pgf.draw_fill = function(t, pattern, color, saturation, opacity)
+ local fill_path = ''
+ local fill_style = color
+
+ if saturation < 100 then
+ fill_style = fill_style .. ",color=.!"..saturation;
+ end
+
+ fill_path = fill_path .. '('..pgf.format_coord(t[1][1], t[1][2])..')'
+ -- draw 2nd to n-1 corners
+ for i = 2,#t-1 do
+ if (i % 5) == 0 then
+ -- pretty printing
+ fill_path = fill_path .. "%\n "
+ end
+ fill_path = fill_path .. '--('..pgf.format_coord(t[i][1], t[i][2])..')'
+ end
+ if (#t % 5) == 0 then
+ gp.write("%\n ")
+ end
+ -- draw last corner
+ -- 'cycle' is just for the case that we want to draw a
+ -- line around the filled area
+ if (t[1][1] == t[#t][1]) and (t[1][2] == t[#t][2]) then -- cyclic
+ fill_path = fill_path .. '--cycle'
+ else
+ fill_path = fill_path
+ .. '--('..pgf.format_coord(t[#t][1], t[#t][2])..')--cycle'
+ end
+
+ if pattern == '' then
+ -- solid fills
+-- fill_style = 'color='..color
+ if opacity < 100 then
+ fill_style = fill_style..string.format(",opacity=%.2f", opacity/100)
+ else
+ -- fill_style = "" -- color ?
+ end
+ else
+ -- pattern fills
+ fill_style = fill_style..','..pattern..',pattern color=.'
+ end
+ local out = ''
+ if (pattern ~= '') and (opacity == 100) then
+ -- have to fill bg for opaque patterns
+ gp.write("\\def\\gpfillpath{"..fill_path.."}\n"
+ .. "\\gpfill{color=gpbgfillcolor} \\gpfillpath;\n"
+ .. "\\gpfill{"..fill_style.."} \\gpfillpath;\n")
+ else
+ gp.write("\\gpfill{"..fill_style.."} "..fill_path..";\n")
+ end
+end
+
+pgf.load_image_file = function(ll, ur, xfile)
+ gp.write(string.format("\\gploadimage{%.3f}{%.3f}{%.3f}{%.3f}{%s}\n",
+ pgf.transform_xcoord(ll[1]), pgf.transform_ycoord(ll[2]),
+ (pgf.transform_xcoord(ur[1]) - pgf.transform_xcoord(ll[1])),
+ (pgf.transform_ycoord(ur[2]) - pgf.transform_ycoord(ll[2])),
+ xfile))
+end
+
+pgf.draw_raw_rgb_image = function(t, m, n, ll, ur, xfile)
+ local gw = gp.write
+ local sf = string.format
+ local xs = sf("%.3f", pgf.transform_xcoord(ur[1]) - pgf.transform_xcoord(ll[1]))
+ local ys = sf("%.3f", pgf.transform_ycoord(ur[2]) - pgf.transform_ycoord(ll[2]))
+ gw("\\def\\gprawrgbimagedata{%\n ")
+ for cnt = 1,#t do
+ gw(sf("%02x%02x%02x", 255*t[cnt][1]+0.5, 255*t[cnt][2]+0.5, 255*t[cnt][3]+0.5))
+ if (cnt % 16) == 0 then
+ gw("%\n ")
+ end
+ end
+ gw("}%\n")
+ gw("\\gprawimage{rgb}{"..sf("%.3f", pgf.transform_xcoord(ll[1])).."}"
+ .."{"..sf("%.3f", pgf.transform_ycoord(ll[2])).."}"
+ .."{"..m.."}{"..n.."}{"..xs.."}{"..ys.."}{\\gprawrgbimagedata}{"..xfile.."}\n")
+end
+
+pgf.draw_raw_cmyk_image = function(t, m, n, ll, ur, xfile)
+ local gw = gp.write
+ local sf = string.format
+ local min = math.min
+ local max = math.max
+ local mf = math.floor
+ local UCRBG = {1,1,1,1} -- default corrections
+ local rgb2cmyk255 = function(r,g,b)
+ local c = 1-r
+ local m = 1-g
+ local y = 1-b
+ local k = min(c,m,y)
+ c = mf(255*min(1, max(0, c - UCRBG[1]*k))+0.5)
+ m = mf(255*min(1, max(0, m - UCRBG[2]*k))+0.5)
+ y = mf(255*min(1, max(0, y - UCRBG[3]*k))+0.5)
+ k = mf(255*min(1, max(0, UCRBG[4]*k))+0.5)
+ return c,m,y,k
+ end
+ local xs = sf("%.3f", pgf.transform_xcoord(ur[1]) - pgf.transform_xcoord(ll[1]))
+ local ys = sf("%.3f", pgf.transform_ycoord(ur[2]) - pgf.transform_ycoord(ll[2]))
+ gw("\\def\\gprawcmykimagedata{%\n ")
+ for cnt = 1,#t do
+ gw(sf("%02x%02x%02x%02x", rgb2cmyk255(t[cnt][1],t[cnt][2],t[cnt][3])))
+ if (cnt % 12) == 0 then
+ gw("%\n ")
+ end
+ end
+ gw("}%\n")
+ gw("\\gprawimage{cmyk}{"..sf("%.3f", pgf.transform_xcoord(ll[1])).."}"
+ .."{"..sf("%.3f", pgf.transform_ycoord(ll[2])).."}"
+ .."{"..m.."}{"..n.."}{"..xs.."}{"..ys.."}{\\gprawcmykimagedata}{"..xfile.."}\n")
+end
+
+pgf.write_clipbox_begin = function (ll, ur)
+ gp.write(gfx.format[gfx.opt.tex_format].beginscope.."\n")
+ gp.write(string.format("\\clip (%s) rectangle (%s);\n",
+ pgf.format_coord(ll[1],ll[2]),pgf.format_coord(ur[1],ur[2])))
+end
+
+pgf.write_clipbox_end = function()
+ gp.write(gfx.format[gfx.opt.tex_format].endscope.."\n")
+end
+
+pgf.write_boundingbox = function(t, num)
+ gp.write("%% coordinates of the plot area\n")
+ gp.write("\\gpdefrectangularnode{gp plot "..num.."}{"
+ ..string.format("\\pgfpoint{%.3fcm}{%.3fcm}", pgf.transform_xcoord(t.xleft), pgf.transform_ycoord(t.ybot)).."}{"
+ ..string.format("\\pgfpoint{%.3fcm}{%.3fcm}", pgf.transform_xcoord(t.xright), pgf.transform_ycoord(t.ytop)).."}\n")
+end
+
+pgf.write_variables = function(t)
+ gp.write("%% gnuplot variables\n")
+ for k, v in pairs(t) do
+ gp.write(string.format("\\gpsetvar{%s}{%s}\n",k,v))
+ end
+end
+
+-- write style to seperate file, or whatever...
+pgf.create_style = function()
+ local name_common = pgf.STYLE_FILE_BASENAME.."-common.tex"
+ local name_latex = pgf.STYLE_FILE_BASENAME..".sty"
+ local name_tex = pgf.STYLE_FILE_BASENAME..".tex"
+ local name_context = "t-"..pgf.STYLE_FILE_BASENAME..".tex"
+
+-- LaTeX
+
+local f_latex = io.open(name_latex, "w+")
+f_latex:write([[
+%%
+%% LaTeX wrapper for gnuplot-tikz style file
+%%
+\NeedsTeXFormat{LaTeX2e}
+]])
+f_latex:write("\\ProvidesPackage{"..pgf.STYLE_FILE_BASENAME.."}%\n")
+f_latex:write(" ["..pgf.REVISION_DATE.." (rev. "..pgf.REVISION..") GNUPLOT Lua terminal style]\n\n")
+f_latex:write([[
+\RequirePackage{tikz}
+
+\usetikzlibrary{arrows,patterns,plotmarks,backgrounds}
+]])
+f_latex:write("\\input "..name_common.."\n")
+f_latex:write([[
+
+\endinput
+]])
+f_latex:close()
+
+-- ConTeXt
+
+local f_context = io.open(name_context, "w+")
+f_context:write([[
+%%
+%% ConTeXt wrapper for gnuplot-tikz style file
+%%
+\usemodule[tikz]
+
+\usetikzlibrary[arrows,patterns,plotmarks,backgrounds]
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+]])
+f_context:write("\\input "..name_common.."\n")
+f_context:write([[
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+\endinput
+]])
+f_context:close()
+
+
+-- plain TeX
+
+local f_tex = io.open(name_tex, "w+")
+f_tex:write([[
+%%
+%% plain TeX wrapper for gnuplot-tikz style file
+%%
+\input tikz.tex
+\usetikzlibrary{arrows,patterns,plotmarks,backgrounds}
+
+\edef\tikzatcode{\the\catcode`\@}
+\catcode`\@=11
+
+]])
+f_tex:write("\\input "..name_common.."\n\n")
+f_tex:write([[
+
+\catcode`\@=\tikzatcode
+
+\endinput
+]])
+f_tex:close()
+
+-- common
+
+local f = io.open(name_common, "w+")
+f:write([[
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Common style file for TeX, LaTeX and ConTeXt
+%%
+%% It is associated with the 'gnuplot.lua' script, and usually generated
+%% automatically. So take care whenever you make any changes!
+%%
+
+% check for the correct TikZ version
+\def\gpchecktikzversion#1.#2\relax{%
+\ifnum#1<2%
+ \PackageError{gnuplot-lua-tikz}{PGF/TikZ version >= 2.0 is required, but version \pgfversion\space was found}{}%
+\fi}
+\expandafter\gpchecktikzversion\pgfversion\relax
+
+% FIXME: is there a more elegant way to determine the output format?
+
+\def\pgfsysdriver@a{pgfsys-dvi.def} % ps
+\def\pgfsysdriver@b{pgfsys-dvipdfm.def} % pdf
+\def\pgfsysdriver@c{pgfsys-dvipdfmx.def} % pdf
+\def\pgfsysdriver@d{pgfsys-dvips.def} % ps
+\def\pgfsysdriver@e{pgfsys-pdftex.def} % pdf
+\def\pgfsysdriver@f{pgfsys-tex4ht.def} % html
+\def\pgfsysdriver@g{pgfsys-textures.def} % ps
+\def\pgfsysdriver@h{pgfsys-vtex.def} % ps
+\def\pgfsysdriver@i{pgfsys-xetex.def} % pdf
+
+\newif\ifgppdfout\gppdfoutfalse
+\newif\ifgppsout\gppsoutfalse
+
+\ifx\pgfsysdriver\pgfsysdriver@a
+ \gppsouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@b
+ \gppdfouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@c
+ \gppdfouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@d
+ \gppsouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@e
+ \gppdfouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@f
+ % tex4ht
+\else\ifx\pgfsysdriver\pgfsysdriver@g
+ \gppsouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@h
+ \gppsouttrue
+\else\ifx\pgfsysdriver\pgfsysdriver@i
+ \gppdfouttrue
+\fi\fi\fi\fi\fi\fi\fi\fi\fi
+
+% uncomment the following lines to make font values "appendable"
+% and if you are really sure about that ;-)
+% \pgfkeyslet{/tikz/font/.@cmd}{\undefined}
+% \tikzset{font/.initial={}}
+% \def\tikz@textfont{\pgfkeysvalueof{/tikz/font}}
+
+%
+% image related stuff
+%
+\def\gp@rawimage@pdf#1#2#3#4#5#6{%
+ \def\gp@tempa{cmyk}%
+ \def\gp@tempb{#1}%
+ \ifx\gp@tempa\gp@tempb%
+ \def\gp@temp{/CMYK}%
+ \else%
+ \def\gp@temp{/RGB}%
+ \fi%
+ \pgf@sys@bp{#4}\pgfsysprotocol@literalbuffered{0 0}\pgf@sys@bp{#5}%
+ \pgfsysprotocol@literalbuffered{0 0 cm}%
+ \pgfsysprotocol@literalbuffered{BI /W #2 /H #3 /CS \gp@temp}%
+ \pgfsysprotocol@literalbuffered{/BPC 8 /F /AHx ID}%
+ \pgfsysprotocol@literal{#6 > EI}%
+}
+\def\gp@rawimage@ps#1#2#3#4#5#6{%
+ \def\gp@tempa{cmyk}%
+ \def\gp@tempb{#1}%
+ \ifx\gp@tempa\gp@tempb%
+ \def\gp@temp{4}%
+ \else%
+ \def\gp@temp{3}%
+ \fi%
+ \pgfsysprotocol@literalbuffered{0 0 translate}%
+ \pgf@sys@bp{#4}\pgf@sys@bp{#5}\pgfsysprotocol@literalbuffered{scale}%
+ \pgfsysprotocol@literalbuffered{#2 #3 8 [#2 0 0 -#3 0 #3]}%
+ \pgfsysprotocol@literalbuffered{currentfile /ASCIIHexDecode filter}%
+ \pgfsysprotocol@literalbuffered{false \gp@temp\space colorimage}%
+ \pgfsysprotocol@literal{#6 >}%
+}
+\def\gp@rawimage@html#1#2#3#4#5#6{%
+% FIXME: print a warning message here
+}
+
+\ifgppdfout
+ \def\gp@rawimage{\gp@rawimage@pdf}
+\else
+ \ifgppsout
+ \def\gp@rawimage{\gp@rawimage@ps}
+ \else
+ \def\gp@rawimage{\gp@rawimage@html}
+ \fi
+\fi
+
+
+\def\gploadimage#1#2#3#4#5{%
+ \pgftext[left,bottom,x=#1cm,y=#2cm] {\pgfimage[interpolate=false,width=#3cm,height=#4cm]{#5}};%
+}
+
+\def\gp@set@size#1{%
+ \def\gp@image@size{#1}%
+}
+
+\def\gp@rawimage@#1#2#3#4#5#6#7#8{
+ \tikz@scan@one@point\gp@set@size(#6,#7)\relax%
+ \tikz@scan@one@point\pgftransformshift(#2,#3)\relax%
+ \pgftext {%
+ \pgfsys@beginpurepicture%
+ \gp@image@size% fill \pgf@x and \pgf@y
+ \gp@rawimage{#1}{#4}{#5}{\pgf@x}{\pgf@y}{#8}%
+ \pgfsys@endpurepicture%
+ }%
+}
+
+%% \gprawimage{color model}{xcoord}{ycoord}{# of xpixel}{# of ypixel}{xsize}{ysize}{rgb/cmyk hex data RRGGBB/CCMMYYKK ...}{file name}
+%% color model is 'cmyk' or 'rgb' (default)
+\def\gprawimage#1#2#3#4#5#6#7#8#9{%
+ \ifx	&%
+ \gp@rawimage@{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+ \else
+ \ifgppsout
+ \gp@rawimage@{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+ \else
+ \gploadimage{#2}{#3}{#6}{#7}{#9}
+ \fi
+ \fi
+}
+
+%
+% gnuplottex comapatibility
+% (see http://www.ctan.org/tex-archive/help/Catalogue/entries/gnuplottex.html)
+%
+
+\def\gnuplottexextension@lua{\string tex}
+\def\gnuplottexextension@tikz{\string tex}
+
+%
+% gnuplot variables getter and setter
+%
+
+\def\gpsetvar#1#2{%
+ \expandafter\xdef\csname gp@var@#1\endcsname{#2}
+}
+
+\def\gpgetvar#1{%
+ \csname gp@var@#1\endcsname %
+}
+
+%
+% some wrapper code
+%
+
+% short for a filled path
+\def\gpfill#1{\path[line width=0.1\gpbaselw,draw,fill,#1]}
+
+% short for changing the line width
+\def\gpsetlinewidth#1{\pgfsetlinewidth{#1\gpbaselw}}
+
+% short for changing the line type
+\def\gpsetlinetype#1{\tikzset{gp path/.style={#1,#1 add}}}
+
+% short for changing the point size
+\def\gpsetpointsize#1{\tikzset{gp point/.style={mark size=#1\gpbasems}}}
+
+% wrapper for color settings
+\def\gpcolor#1{\tikzset{global #1}}
+\tikzset{rgb color/.code={\pgfutil@definecolor{.}{rgb}{#1}\tikzset{color=.}}}
+\tikzset{global rgb color/.code={\pgfutil@definecolor{.}{rgb}{#1}\pgfutil@color{.}}}
+\tikzset{global color/.code={\pgfutil@color{#1}}}
+
+% prevent plot mark distortions due to changes in the PGF transformation matrix
+% use `\gpscalepointstrue' and `\gpscalepointsfalse' for enabling and disabling
+% point scaling
+%
+\newif\ifgpscalepoints
+\tikzset{gp shift only/.style={%
+ \ifgpscalepoints\else shift only\fi%
+}}
+\def\gppoint#1#2{%
+ \path[solid] plot[only marks,gp point,mark options={gp shift only},#1] coordinates {#2};%
+}
+
+
+%
+% char size calculation, that might be used with gnuplottex
+%
+% Example code (needs gnuplottex.sty):
+%
+% % calculate the char size when the "gnuplot" style is used
+% \tikzset{gnuplot/.append style={execute at begin picture=\gpcalccharsize}}
+%
+% \tikzset{gnuplot/.append style={font=\ttfamily\footnotesize}}
+%
+% \begin{tikzpicture}[gnuplot]
+% \begin{gnuplot}[terminal=lua,%
+% terminaloptions={tikz solid nopic charsize \the\gphcharsize,\the\gpvcharsize}]
+% test
+% \end{gnuplot}
+% \end{tikzpicture}
+%
+%%%
+% The `\gpcalccharsize' command fills the lengths \gpvcharsize and \gphcharsize with
+% the values of the current default font used within nodes and is meant to be called
+% within a tikzpicture environment.
+%
+\newdimen\gpvcharsize
+\newdimen\gphcharsize
+\def\gpcalccharsize{%
+ \pgfinterruptboundingbox%
+ \pgfsys@begininvisible%
+ \node at (0,0) {%
+ \global\gphcharsize=1.05\fontcharwd\font`0%
+ \global\gpvcharsize=1.05\fontcharht\font`0%
+ \global\advance\gpvcharsize by 1.05\fontchardp\font`g%
+ };%
+ \pgfsys@endinvisible%
+ \endpgfinterruptboundingbox%
+}
+
+%
+% define a rectangular node in tikz e.g. for the plot area
+%
+% #1 node name
+% #2 coordinate of "south west"
+% #3 coordinate of "north east"
+%
+\def\gpdefrectangularnode#1#2#3{%
+ \expandafter\gdef\csname pgf@sh@ns@#1\endcsname{rectangle}
+ \expandafter\gdef\csname pgf@sh@np@#1\endcsname{%
+ \def\southwest{#2}%
+ \def\northeast{#3}%
+ }
+ \pgfgettransform\pgf@temp%
+ % once it is defined, no more transformations will be applied, I hope
+ \expandafter\xdef\csname pgf@sh@nt@#1\endcsname{\pgf@temp}%
+ \expandafter\xdef\csname pgf@sh@pi@#1\endcsname{\pgfpictureid}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% You may want to adapt the following to fit your needs (in your
+%% individual style file and/or within your document).
+%%
+
+%
+% style for every plot
+%
+\tikzset{gnuplot/.style={%
+ >=stealth',%
+ line cap=round,%
+ line join=round,%
+}}
+
+\tikzset{gp node left/.style={anchor=mid west,yshift=-.12ex}}
+\tikzset{gp node center/.style={anchor=mid,yshift=-.12ex}}
+\tikzset{gp node right/.style={anchor=mid east,yshift=-.12ex}}
+
+% basic plot mark size (points)
+\newdimen\gpbasems
+\gpbasems=.4pt
+
+% basic linewidth
+\newdimen\gpbaselw
+\gpbaselw=.4pt
+
+% this is the default color for pattern backgrounds
+\colorlet{gpbgfillcolor}{white}
+
+% set background color and fill color
+\def\gpsetbgcolor#1{%
+ \pgfutil@definecolor{gpbgfillcolor}{rgb}{#1}%
+ \tikzset{tight background,background rectangle/.style={fill=gpbgfillcolor},show background rectangle}%
+}
+
+% this should reverse the normal text node presets, for the
+% later referencing as described below
+\tikzset{gp refnode/.style={coordinate,yshift=.12ex}}
+
+% to add an empty label with the referenceable name "my node"
+% to the plot, just add the following line to your gnuplot
+% file:
+%
+% set label "" at 1,1 font ",gp refnode,name=my node"
+%
+
+% enlargement of the bounding box in standalone mode (only used by LaTeX/ConTeXt)
+\def\gpbboxborder{0mm}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The following TikZ-styles are derived from the 'pgf.styles.*' tables
+%% in the Lua script.
+%% To change the number of used styles you should change them there and
+%% regenerate this style file.
+%%
+
+]])
+ f:write("% arrow styles settings\n")
+ for i = 1, #pgf.styles.arrows do
+ f:write("\\tikzset{"..pgf.styles.arrows[i][1].."/.style={"..pgf.styles.arrows[i][2].."}}\n")
+ end
+ f:write("\n% plotmark settings\n")
+ for i = 1, #pgf.styles.plotmarks do
+ f:write("\\tikzset{"..pgf.styles.plotmarks[i][1].."/.style={"..pgf.styles.plotmarks[i][2].."}}\n")
+ end
+ f:write("\n% pattern settings\n")
+ for i = 1, #pgf.styles.patterns do
+ f:write("\\tikzset{"..pgf.styles.patterns[i][1].."/.style={"..pgf.styles.patterns[i][2].."}}\n")
+ end
+ f:write("\n% if the 'tikzplot' option is used the corresponding lines will be smoothed by default\n")
+ for i = 1, #pgf.styles.plotstyles_axes do
+ f:write("\\tikzset{"..pgf.styles.plotstyles_axes[i][1].."/.style="..pgf.styles.plotstyles_axes[i][2].."}\n")
+ end
+ for i = 1, #pgf.styles.plotstyles do
+ f:write("\\tikzset{"..pgf.styles.plotstyles[i][1].."/.style="..pgf.styles.plotstyles[i][2].."}\n")
+ end
+ -- line styles for borders etc ...
+ f:write("\n% linestyle settings\n")
+ for i = 1, #pgf.styles.linetypes_axes do
+ f:write("\\tikzset{"..pgf.styles.linetypes_axes[i][1].."/.style="..pgf.styles.linetypes_axes[i][2].."}\n")
+ end
+ f:write("\n% linestyle \"addon\" settings for overwriting a default linestyle within the\n")
+ f:write("% TeX document via eg. \\tikzset{gp lt plot 1 add/.style={fill=black,draw=none}} etc.\n")
+ for i = 1, #pgf.styles.linetypes_axes do
+ f:write("\\tikzset{"..pgf.styles.linetypes_axes[i][1].." add/.style={}}\n")
+ end
+ for i = 1, #pgf.styles.linetypes do
+ f:write("\\tikzset{"..pgf.styles.linetypes[i][1].." add/.style={}}\n")
+ end
+ f:write("\n% linestyle color settings\n")
+ for i = 1, #pgf.styles.lt_colors_axes do
+ f:write("\\colorlet{"..pgf.styles.lt_colors_axes[i][1].."}{"..pgf.styles.lt_colors_axes[i][2].."}\n")
+ end
+ -- line styles for the plots
+ f:write("\n% command for switching to dashed lines\n")
+ f:write("\\def\\gpdashedlines{%\n")
+ for i = 1, #pgf.styles.linetypes do
+ f:write(" \\tikzset{"..pgf.styles.linetypes[i][1].."/.style={"..pgf.styles.linetypes[i][2].."}}\n")
+ end
+ f:write("}\n")
+ f:write("\n% command for switching to colored lines\n")
+ f:write("\\def\\gpcoloredlines{%\n")
+ for i = 1, #pgf.styles.lt_colors do
+ f:write(" \\colorlet{"..pgf.styles.lt_colors[i][1].."}{"..pgf.styles.lt_colors[i][2].."}%\n")
+ end
+ f:write("}\n")
+ f:write("\n% command for switching to solid lines\n")
+ f:write("\\def\\gpsolidlines{%\n")
+ for i = 1, #pgf.styles.linetypes do
+ f:write(" \\tikzset{"..pgf.styles.linetypes[i][1].."/.style=solid}%\n")
+ end
+ f:write("}\n")
+ f:write("\n% command for switching to monochrome (black) lines\n")
+ f:write("\\def\\gpmonochromelines{%\n")
+ for i = 1, #pgf.styles.lt_colors do
+ f:write(" \\colorlet{"..pgf.styles.lt_colors[i][1].."}{black}%\n")
+ end
+ f:write("}\n\n")
+ f:write([[
+%
+% some initialisations
+%
+% by default all lines will be colored and dashed
+\gpcoloredlines
+\gpdashedlines
+\gpsetpointsize{4}
+\gpsetlinetype{gp lt solid}
+\gpscalepointsfalse
+\endinput
+]])
+ f:close()
+end
+
+
+pgf.print_help = function(fwrite)
+
+ fwrite([[
+ {latex | tex | context}
+ {color | monochrome}
+ {dashed | solid}
+ {nooriginreset | originreset}
+ {nogparrows | gparrows}
+ {nogppoints | gppoints}
+ {picenvironment | nopicenvironment}
+ {noclip | clip}
+ {notightboundingbox | tightboundingbox}
+ {background "<colorpec>"}
+ {size <x>{unit},<y>{unit}}
+ {scale <x>,<y>}
+ {plotsize <x>{unit},<y>{unit}}
+ {charsize <x>{unit},<y>{unit}}
+ {font "<fontdesc>"}
+ {{fontscale | textscale} <scale>}
+ {nofulldoc | nostandalone | fulldoc | standalone}
+ {{preamble | header} "<preamble_string>"}
+ {tikzplot <ltn>,...}
+ {notikzarrows | tikzarrows}
+ {rgbimages | cmykimages}
+ {noexternalimages|externalimages}
+ {bitmap | nobitmap}
+ {providevars <var name>,...}
+ {createstyle}
+ {help}
+
+ For all options that expect lengths as their arguments they
+ will default to 'cm' if no unit is specified. For all lengths
+ the following units may be used: 'cm', 'mm', 'in' or 'inch',
+ 'pt', 'pc', 'bp', 'dd', 'cc'. Blanks between numbers and units
+ are not allowed.
+
+ 'monochrome' disables line coloring and switches to grayscaled
+ fills.
+
+ 'solid' use only solid lines.
+
+ 'originreset' moves the origin of the TikZ picture to the lower
+ left corner of the plot. It may be used to align several plots
+ within one tikzpicture environment. This is not tested with
+ multiplots and pm3d plots!
+
+ 'gparrows' use gnuplot's internal arrow drawing function
+ instead of the ones provided by TikZ.
+
+ 'gppoints' use gnuplot's internal plotmark drawing function
+ instead of the ones provided by TikZ.
+
+ 'nopicenvironment' omits the declaration of the 'tikzpicture'
+ environment in order to set it manually. This permits putting
+ some PGF/TikZ code directly before or after the plot.
+
+ 'clip' crops the plot at the defined canvas size. Default is
+ 'noclip' by which only a minimum bounding box of the canvas size
+ is set. Neither a fixed bounding box nor a crop box is set if the
+ 'plotsize' or 'tightboundingbox' option is used.
+
+ If 'tightboundingbox' is set the 'clip' option is ignored and the
+ final bounding box is the natural bounding box calculated by tikz.
+
+ 'background' sets the background color to the value specified in
+ the <colorpec> argument. <colorspec> must be a valid color name or
+ a 3 byte RGB code as a hexadecimal number with a preceding number
+ sign ('#'). E.g. '#ff0000' specifies pure red. If omitted the
+ background is transparent.
+
+ The 'size' option expects two lenghts <x> and <y> as the canvas
+ size. The default size of the canvas is ]]..pgf.DEFAULT_CANVAS_SIZE_X..[[cm x ]]..pgf.DEFAULT_CANVAS_SIZE_Y..[[cm.
+
+ The 'scale' option works similar to the 'size' option but expects
+ scaling factors <x> and <y> instead of lengths.
+
+ The 'plotsize' option permits setting the size of the plot area
+ instead of the canvas size, which is the usual gnuplot behaviour.
+ Using this option may lead to slightly asymmetric tic lengths.
+ Like 'originreset' this option may not lead to convenient results
+ if used with multiplots or pm3d plots. An alternative approach
+ is to set all margins to zero and to use the 'noclip' option.
+ The plot area has then the dimensions of the given canvas sizes.
+
+ The 'charsize' option expects the average horizontal and vertical
+ size of the used font. Look at the generated style file for an
+ example of how to use it from within your TeX document.
+
+ 'fontscale' or 'textscale' expects a scaling factor as a parameter.
+ All texts in the plot are scaled by this factor then.
+
+ The options 'tex', 'latex' and 'context' choose the TeX output
+ format. LaTeX is the default. To load the style file put the
+ according line at the beginning of your document:
+ \input ]]..pgf.STYLE_FILE_BASENAME..[[.tex % (for plain TeX)
+ \usepackage{]]..pgf.STYLE_FILE_BASENAME..[[} % (for LaTeX)
+ \usemodule[]]..pgf.STYLE_FILE_BASENAME..[[] % (for ConTeXt)
+
+ 'createstyle' derives the TeX/LaTeX/ConTeXt styles from the script
+ and writes them to the appropriate files.
+
+ 'fulldoc' or 'standalone' produces a full LaTeX document for direct
+ compilation.
+
+ 'preamble' or 'header' may be used to put any additional LaTeX code
+ into the document preamble in standalone mode.
+
+ With the 'tikzplot' option the '\path plot' command will be used
+ instead of only '\path'. The following list of numbers of linetypes
+ (<ltn>,...) defines the affected plotlines. There exists a plotstyle
+ for every linetype. The default plotstyle is 'smooth' for every
+ linetype >= 1.
+
+ By using the 'tikzarrows' option the gnuplot arrow styles defined by
+ the user will be mapped to TikZ arrow styles. This is done by 'misusing'
+ the angle value of the arrow definition. E.g. an arrow style with the
+ angle '7' will be mapped to the TikZ style 'gp arrow 7' ignoring all the
+ other given values. By default the TikZ terminal uses the stealth' arrow
+ tips for all arrows. To obtain the default gnuplot behaviour please use
+ the 'gparrows' option.
+
+ With 'cmykimages' the CMYK color model will be used for inline image data
+ instead of the RGB model. All other colors (like line colors etc.) are
+ not affected by this option, since they are handled e.g. by LaTeX's
+ xcolor package. This option is ignored if images are externalized.
+
+ By using the 'externalimages' option all bitmap images will be written
+ as external PNG images and included at compile time of the document.
+ Generating DVI and later postscript files requires to convert the PNGs
+ into EPS files in a seperate step e.g. by using ImageMagick's `convert`.
+ Transparent bitmap images are always generated as an external PNGs.
+
+ The 'nobitmap' option let images be rendered as filled rectangles instead
+ of the nativ PS or PDF inline image format. This option is ignored if
+ images are externalized.
+
+ The 'providevars' options makes gnuplot's internal and user variables
+ available by using the '\gpgetvar{<var name>}' commmand within the TeX
+ script. Use gnuplot's 'show variables all' command to see the list
+ of valid variables.
+
+ The <fontdesc> string may contain any valid TeX/LaTeX/ConTeXt font commands
+ like e.g. '\small'. It is passed directly as a node parameter in form of
+ "font={<fontdesc>}". This can be 'misused' to add further code to a node,
+ e.g. '\small,yshift=1ex' or ',yshift=1ex' are also valid while the
+ latter does not change the current font settings. One exception is
+ the second argument of the list. If it is a number of the form
+ <number>{unit} it will be interpreted as a fontsize like in other
+ terminals and will be appended to the first argument. If the unit is
+ omitted the value is interpreted as 'pt'. As an example the string
+ '\sffamily,12,fill=red' sets the font to LaTeX's sans serif font at
+ a size of 12pt and red background color.
+ The same applies to ConTeXt, e.g. '\switchtobodyfont[iwona],10' changes the
+ font to Iwona at a size of 10pt.
+ Plain TeX users have to change the font size explicitly within the first
+ argument. The second should be set to the same value to get proper scaling
+ of text boxes.
+
+ Strings have to be put in single or double quotes. Double quoted
+ strings may contain special characters like newlines '\n' etc.
+]])
+end
+
+
+--[[===============================================================================================
+
+ gfx.* helper functions
+
+ Main intention is to prevent redundancies in the drawing
+ operations and keep the pgf.* API as consistent as possible.
+
+]]--===============================================================================================
+
+
+-- path coordinates
+gfx.path = {}
+gfx.posx = nil
+gfx.posy = nil
+
+gfx.linetype_idx = nil -- current linetype intended for the plot
+gfx.linetype_idx_set = nil -- current linetype set in the plot
+gfx.linewidth = nil
+gfx.linewidth_set = nil
+
+-- internal calculated scaling factors
+gfx.scalex = 1
+gfx.scaley = 1
+
+-- recalculate the origin of the plot
+-- used for moving the origin to the lower left
+-- corner...
+gfx.origin_xoffset = 0
+gfx.origin_yoffset = 0
+
+
+-- color set in the document
+gfx.color = ''
+gfx.color_set = ''
+
+gfx.pointsize = nil
+gfx.pointsize_set = nil
+
+gfx.text_font = ''
+gfx.text_justify = "center"
+gfx.text_angle = 0
+
+-- option vars
+gfx.opt = {
+ latex_preamble = '',
+ default_font = '',
+ lines_dashed = true,
+ lines_colored = true,
+ -- use gnuplot arrows or points instead of TikZ?
+ gp_arrows = false,
+ gp_points = false,
+ -- don't put graphic commands into a tikzpicture environment
+ nopicenv = false,
+ -- produce full LaTeX document?
+ full_doc = false,
+ -- in gnuplot all sizes refer to the size of the canvas
+ -- and not the size of plot itself
+ plotsize_x = nil,
+ plotsize_y = nil,
+ set_plotsize = false,
+ -- recalculate the origin of the plot
+ -- used for moving the origin to the lower left
+ -- corner...
+ set_origin = false,
+ -- list of _linetypes_ of plots that should be drawn as with the \plot
+ -- command instead of \path
+ plot_list = {},
+ -- uses some pdf/ps specials with image function that will only work
+ -- with pdf/ps generation!
+ direct_image = true,
+ -- list of gnuplot variables that should be made available via
+ -- \gpsetvar{name}{val}
+ gnuplot_vars = {},
+ -- if true, the gnuplot arrow will be mapped to TikZ arrow styles by the
+ -- given angle. E.g. an arrow with the angle `7' will be mapped to `gp arrow 7'
+ -- style.
+ tikzarrows = false,
+ -- if true, cmyk image model will be used for bitmap images
+ cmykimage = false,
+ -- output TeX flavor, default is LaTeX
+ tex_format = 'latex',
+ -- for regression tests etc. we can turn off the timestamp
+ notimestamp = false,
+ -- background color, contains RGB triplet when set
+ bgcolor = nil,
+ -- crop to the given canvas size
+ clip = false,
+ -- if true, the natural bounding box will be used and 'clip' is ignored
+ tightboundingbox = false,
+ -- fontscale
+ fontscale = nil
+}
+
+-- Formats for the various TeX flavors
+gfx.format = {}
+
+gfx.format.tex = {
+ docheader = "\\input "..pgf.STYLE_FILE_BASENAME..".tex\n",
+ begindocument = "",
+ enddocument = "\\bye\n",
+ beforetikzpicture= "", -- standalone only
+ aftertikzpicture = "", -- standalone only
+ begintikzpicture = "\\tikzpicture",
+ endtikzpicture = "\\endtikzpicture",
+ beginscope = "\\scope",
+ endscope = "\\endscope",
+ beforeendtikzpicture = "", -- standalone only
+ fontsize = ""
+}
+
+gfx.format.latex = {
+ docheader = "\\documentclass["..pgf.DEFAULT_FONT_SIZE.."pt]{article}\n"
+ .."\\usepackage[T1]{fontenc}\n"
+ .."\\usepackage{textcomp}\n\n"
+ .."\\usepackage[utf8x]{inputenc}\n\n"
+ .."\\usepackage{"..pgf.STYLE_FILE_BASENAME.."}\n"
+ .."\\pagestyle{empty}\n"
+ .."\\usepackage[active,tightpage]{preview}\n"
+ .."\\PreviewEnvironment{tikzpicture}\n"
+ .."\\setlength\\PreviewBorder{\\gpbboxborder}\n",
+ begindocument = "\\begin{document}\n",
+ enddocument = "\\end{document}\n",
+ beforetikzpicture= "", -- standalone only
+ aftertikzpicture = "", -- standalone only
+ begintikzpicture = "\\begin{tikzpicture}",
+ endtikzpicture = "\\end{tikzpicture}",
+ beginscope = "\\begin{scope}",
+ endscope = "\\end{scope}",
+ beforeendtikzpicture = "", -- standalone only
+ fontsize = "\\fontsize{%spt}{%spt}\\selectfont"
+}
+
+gfx.format.context = {
+ docheader = "\\usemodule["..pgf.STYLE_FILE_BASENAME.."]\n",
+ begindocument = "\\starttext\n",
+ enddocument = "\\stoptext\n",
+ beforetikzpicture= "\\startTEXpage\n", -- standalone only
+ aftertikzpicture = "\\stopTEXpage\n", -- standalone only
+ begintikzpicture = "\\starttikzpicture",
+ endtikzpicture = "\\stoptikzpicture",
+ beginscope = "\\startscope",
+ endscope = "\\stopscope",
+ beforeendtikzpicture = "\\path[use as bounding box] ([shift={(-\\gpbboxborder,-\\gpbboxborder)}]current bounding box.south west)"
+ .." rectangle ([shift={(\\gpbboxborder,\\gpbboxborder)}]current bounding box.north east);\n", -- standalone only
+ fontsize = "\\switchtobodyfont[%spt]"
+}
+
+-- within tikzpicture environment or not
+gfx.in_picture = false
+
+-- have not determined the plotbox, see the 'plotsize' option
+gfx.have_plotbox = false
+
+gfx.current_boundingbox = {
+ xleft = nil, xright = nil, ytop = nil, ybot = nil
+}
+-- plot bounding boxes counter
+gfx.boundingbox_cnt = 0
+
+gfx.TEXT_ANCHOR = {
+ ["left"] = "gp node left",
+ ["center"] = "gp node center",
+ ["right"] = "gp node right"
+}
+
+gfx.HEAD_STR = {"", "->", "<-", "<->"}
+
+
+-- conversion factors in `cm'
+gfx.units = {
+ [''] = 1, -- default
+ ['cm'] = 1,
+ ['mm'] = 0.1,
+ ['in'] = 2.54,
+ ['inch']= 2.54,
+ ['pt'] = 0.035146, -- Pica Point (72.27pt = 1in)
+ ['pc'] = 0.42176, -- Pica (1 Pica = 1/6 inch)
+ ['bp'] = 0.035278, -- Big Point (72bp = 1in)
+ ['dd'] = 0.0376, -- Didot Point (1cm = 26.6dd)
+ ['cc'] = 0.45113 -- Cicero (1cc = 12 dd)
+}
+
+
+gfx.parse_number_unit = function (str, from, to)
+ to = to or 'cm'
+ from = from or 'cm'
+ local num, unit = string.match(str, '^([%d%.]+)([a-z]*)$')
+ if unit and (string.len(unit) > 0) then
+ from = unit
+ else
+ unit = false
+ end
+ local factor_from = gfx.units[from]
+ local factor_to = gfx.units[to]
+ num = tonumber(num)
+ if num and factor_from then
+ -- to cm and then to our target unit
+ return num*(factor_from/factor_to), unit
+ else
+ return false, false
+ end
+end
+
+
+gfx.parse_font_string = function (str)
+ local size,rets,toks = nil, str, explode(',', str)
+ -- if at least two tokens
+ if #toks > 1 then
+ -- add first element to font string
+ rets = table.remove(toks,1)
+ -- no unit means 'pt'
+ size, _ = gfx.parse_number_unit(toks[1],'pt','pt')
+ if (size) then
+ table.remove(toks,1)
+ rets = rets .. string.format(gfx.format[gfx.opt.tex_format].fontsize,size,size*1.2)
+ end
+ -- add grouping braces for the font settings
+ if #rets > 0 then
+ rets = "{" .. rets .. "}"
+ end
+ -- add remaining parts
+ for k,v in ipairs(toks) do
+ rets = rets .. ',' .. v
+ end
+ else
+ if #rets > 0 then
+ rets = "{" .. rets .. "}"
+ end
+ end
+ return rets, size
+end
+
+
+gfx.write_boundingbox = function()
+ local t = gp.get_boundingbox()
+ for k, v in pairs (t) do
+ if v ~= gfx.current_boundingbox[k] then
+ gfx.boundingbox_cnt = gfx.boundingbox_cnt + 1
+ gfx.current_boundingbox = t
+ pgf.write_boundingbox(t, gfx.boundingbox_cnt)
+ break
+ end
+ end
+end
+
+gfx.adjust_plotbox = function()
+ local t = gp.get_boundingbox()
+ if gfx.opt.set_origin then
+ -- move origin to the lower left corner of the plot
+ gfx.origin_xoffset = - t.xleft
+ gfx.origin_yoffset = - t.ybot
+ end
+ if gfx.opt.set_plotsize then
+ if (t.xright - t.xleft) > 0 then
+ gfx.scalex = gfx.scalex*gfx.opt.plotsize_x * pgf.DEFAULT_RESOLUTION/(t.xright - t.xleft)
+ gfx.scaley = gfx.scaley*gfx.opt.plotsize_y * pgf.DEFAULT_RESOLUTION/(t.ytop - t.ybot)
+ else
+ -- could not determin a valid bounding box, so keep using the
+ -- plotsize as the canvas size
+ gp.term_out("WARNING: PGF/TikZ Terminal: `plotsize' option used, but I could not determin the plot area!\n")
+ end
+ elseif not gfx.opt.tightboundingbox then
+ if gfx.opt.clip then
+ gp.write("\\clip")
+ else
+ gp.write("\\path")
+ end
+ gp.write(" (" .. pgf.format_coord(0,0) ..") rectangle (" .. pgf.format_coord(term.xmax, term.ymax) .. ");\n")
+ end
+end
+
+
+gfx.check_variables = function()
+ local vl = gfx.opt.gnuplot_vars
+ local t = gp.get_all_variables()
+ local sl = {}
+ for i=1,#vl do
+ if t[vl[i]] then
+ sl[vl[i]] = t[vl[i]][3]
+ if t[vl[i]][4] then
+ sl[vl[i].." Im"] = t[vl[i]][4]
+ end
+ end
+ end
+ pgf.write_variables(sl)
+end
+
+
+-- check if the current path should be drawn
+gfx.check_in_path = function()
+ -- also check the bounding box here
+ -- bounding box data is available with the first drawing command
+ if (not gfx.have_plotbox) and gfx.in_picture then
+ gfx.adjust_plotbox()
+ gfx.have_plotbox = true
+ end
+
+ -- ignore zero length paths
+ if #gfx.path > 1 then
+ -- check all line properties and draw current path
+ gfx.check_color()
+ gfx.check_linetype()
+ gfx.check_linewidth()
+ pgf.draw_path(gfx.path)
+ -- remember last coordinates
+ gfx.start_path(gfx.path[#gfx.path][1], gfx.path[#gfx.path][2])
+ end
+end
+
+-- did the linetype change?
+gfx.check_linetype = function()
+ if gfx.linetype_idx ~= gfx.linetype_idx_set then
+ local lt
+ if gfx.linetype_idx < 0 then
+ lt = pgf.styles.linetypes_axes[math.abs(gfx.linetype_idx)][1]
+ else
+ lt = pgf.styles.linetypes[(gfx.linetype_idx % #pgf.styles.linetypes)+1][1]
+ end
+ pgf.set_linetype(lt)
+ gfx.linetype_idx_set = gfx.linetype_idx
+ end
+end
+
+-- did the color change?
+gfx.check_color = function()
+ if gfx.color_set ~= gfx.color then
+ pgf.set_color(gfx.color)
+ gfx.color_set = gfx.color
+ end
+end
+
+-- sanity check if we already are at this position in our path
+-- and save this position
+gfx.check_coord = function(x, y)
+ if (x == gfx.posx) and (y == gfx.posy) then
+ return true
+ end
+ gfx.posx = x
+ gfx.posy = y
+ return false
+end
+
+-- did the linewidth change?
+gfx.check_linewidth = function()
+ if gfx.linewidth ~= gfx.linewidth_set then
+ pgf.set_linewidth(gfx.linewidth)
+ gfx.linewidth_set = gfx.linewidth
+ end
+end
+
+-- did the pointsize change?
+gfx.check_pointsize = function()
+ if gfx.pointsize ~= gfx.pointsize_set then
+ pgf.set_pointsize(gfx.pointsize)
+ gfx.pointsize_set = gfx.pointsize
+ end
+end
+
+
+gfx.start_path = function(x, y)
+ -- init path with first coords
+ gfx.path = {{x,y}}
+ gfx.posx = x
+ gfx.posy = y
+end
+
+-- ctype string LT|RGB|GRAY
+-- val table {name}|{r,g,b}
+gfx.format_color = function(ctype, val)
+ local c
+ if ctype == 'LT' then
+ if val[1] < 0 then
+ if val[1] < -2 then -- LT_NODRAW, LT_BACKGROUND, LT_UNDEFINED
+ c = 'color=gpbgfillcolor'
+ else
+ c = 'color='..pgf.styles.lt_colors_axes[math.abs(val[1])][1]
+ end
+ else
+ c = 'color='..pgf.styles.lt_colors[(val[1] % #pgf.styles.lt_colors)+1][1]
+ end
+ -- c = pgf.styles.lt_colors[((val[1]+3) % #pgf.styles.lt_colors) + 1][1]
+ elseif ctype == 'RGB' then
+ c = string.format("rgb color={%.3f,%.3f,%.3f}", val[1], val[2], val[3])
+ elseif ctype == 'RGBA' then
+ c = string.format("rgb color={%.3f,%.3f,%.3f},opacity=%.3f", val[1], val[2], val[3], val[4])
+ elseif ctype == 'GRAY' then
+ c = string.format("color=black!%i", 100*val[1]+0.5)
+ end
+ return c
+end
+
+gfx.set_color = function(ctype, val)
+ gfx.color = gfx.format_color(ctype, val)
+end
+
+
+--[[===============================================================================================
+
+ The terminal layer
+
+ The term.* functions are usually called from the gnuplot Lua terminal
+
+]]--===============================================================================================
+
+
+if arg then
+ -- when called from the command line we have
+ -- to initialize the table `term' manually
+ -- to avoid errors
+ term = {}
+else
+ --
+ -- gnuplot terminal default parameters and flags
+ --
+ term.xmax = pgf.DEFAULT_RESOLUTION * pgf.DEFAULT_CANVAS_SIZE_X
+ term.ymax = pgf.DEFAULT_RESOLUTION * pgf.DEFAULT_CANVAS_SIZE_Y
+ term.h_tic = pgf.DEFAULT_RESOLUTION * pgf.DEFAULT_TIC_SIZE
+ term.v_tic = pgf.DEFAULT_RESOLUTION * pgf.DEFAULT_TIC_SIZE
+ -- default size for CM@10pt
+ term.h_char = math.floor(pgf.DEFAULT_FONT_H_CHAR * (pgf.DEFAULT_FONT_SIZE/10) * (pgf.DEFAULT_RESOLUTION/1000) + .5)
+ term.v_char = math.floor(pgf.DEFAULT_FONT_V_CHAR * (pgf.DEFAULT_FONT_SIZE/10) * (pgf.DEFAULT_RESOLUTION/1000) + .5)
+ term.description = "Lua PGF/TikZ terminal for TeX and friends"
+ term_default_flags = term.TERM_BINARY + term.TERM_CAN_MULTIPLOT + term.TERM_CAN_DASH + term.TERM_ALPHA_CHANNEL
+ + term.TERM_LINEWIDTH + term.TERM_IS_LATEX + term.TERM_FONTSCALE
+ term.flags = term_default_flags + term.TERM_CAN_CLIP
+end
+
+
+--
+-- initial = 1 for the initial "set term" call
+-- 0 for subsequent option changes -- currently unused, since the changeable options
+-- are hardcoded within gnuplot :-(
+--
+-- t_count see e.g. int_error()
+--
+term.options = function(opt_str, initial, t_count)
+
+ local o_next = ""
+ local o_type = nil
+ local s_start, s_end = 1, 1
+ local term_opt = ""
+ local term_opt_font, term_opt_size, term_opt_background, term_opt_fontscale, term_opt_scale, term_opt_preamble = "", "", "", "", "", ""
+ local charsize_h, charsize_v, fontsize, fontscale = nil, nil, nil, nil
+ -- trim spaces
+ opt_str = opt_str:gsub("^%s*(.-)%s*$", "%1")
+ local opt_len = string.len(opt_str)
+
+ t_count = t_count - 1
+
+ local set_t_count = function(num)
+ -- gnuplot handles commas as regular tokens
+ t_count = t_count + 2*num - 2
+ end
+
+ local almost_equals = function(param, opt)
+ local op1, op2
+
+ local st, _ = string.find(opt, "$", 2, true)
+ if st then
+ op1 = string.sub(opt, 1, st-1)
+ op2 = string.sub(opt, st+1)
+ if (string.sub(param, 1, st-1) == op1)
+ and (string.find(op1..op2, param, 1, true) == 1) then
+ return true
+ end
+ elseif opt == param then
+ return true
+ end
+ return false
+ end
+
+ --
+ -- simple parser for options and strings
+ --
+ local get_next_token = function()
+
+ -- beyond the limit?
+ if s_start > opt_len then
+ o_next = ""
+ o_type = nil
+ return
+ end
+
+ t_count = t_count + 1
+
+ -- search the start of the next token
+ s_start, _ = string.find (opt_str, '[^%s]', s_start)
+ if not s_start then
+ o_next = ""
+ o_type = nil
+ return
+ end
+
+ -- a new string argument?
+ local next_char = string.sub(opt_str, s_start, s_start)
+ if next_char == '"' or next_char == "'" then
+ -- find the end of the string by searching for
+ -- the next not escaped quote
+ _ , s_end = string.find (opt_str, '[^\\]'..next_char, s_start+1)
+ if s_end then
+ o_next = string.sub(opt_str, s_start+1, s_end-1)
+ if next_char == '"' then
+ -- Wow! this is to resolve all string escapes, kind of "unescape string"
+ o_next = assert(loadstring("return(\""..o_next.."\")"))()
+ end
+ o_type = "string"
+ else
+ -- FIXME: error: string does not end...
+ -- seems that gnuplot adds missing quotes
+ -- so this will never happen...
+ end
+ else
+ -- ok, it's not a string...
+ -- then find the next white space or end of line
+ -- comma separated strings are regarded as one token
+ s_end, _ = string.find (opt_str, '[^,][%s]+[^,]', s_start)
+ if not s_end then -- reached the end of the string
+ s_end = opt_len + 1
+ else
+ s_end = s_end + 1
+ end
+ o_next = string.sub(opt_str, s_start, s_end-1)
+ if tonumber(o_next) ~= nil then
+ o_type = 'number'
+ else
+ o_type = "op"
+ end
+ end
+ s_start = s_end + 1
+ return
+ end
+
+ local get_two_sizes = function(str)
+ local args = explode(',', str)
+ set_t_count(#args)
+
+ local num1, num2, unit
+ if #args ~= 2 then
+ return false, nil
+ else
+ num1, unit = gfx.parse_number_unit(args[1])
+ if unit then
+ t_count = t_count + 1
+ end
+ num2, unit = gfx.parse_number_unit(args[2])
+ if unit then
+ t_count = t_count + 1
+ end
+ if not (num1 and num2) then
+ return false, nil
+ end
+ end
+ return num1, num2
+ end
+
+ local print_help = false
+
+ while true do
+ get_next_token()
+ if not o_type then break end
+ if almost_equals(o_next, "he$lp") then
+ print_help = true
+ elseif almost_equals(o_next, "mono$chrome") then
+ -- no colored lines
+ -- Setting `term.TERM_MONOCHROME' would internally disable colors for all drawings.
+ -- We do it the `soft' way by redefining all colors via a TeX command.
+ -- Maybe an additional terminal option is useful here...
+ gfx.opt.lines_colored = false
+ elseif almost_equals(o_next, "c$olor") or almost_equals(o_next, "c$olour") then
+ -- colored lines
+ gfx.opt.lines_colored = true
+ elseif almost_equals(o_next, "so$lid") then
+ -- no dashed and dotted etc. lines
+ gfx.opt.lines_dashed = false
+ elseif almost_equals(o_next, "notime$stamp") then
+ -- omit output of the timestamp
+ gfx.opt.notimestamp = true
+ elseif almost_equals(o_next, "da$shed") then
+ -- dashed and dotted etc. lines
+ gfx.opt.lines_dashed = true
+ elseif almost_equals(o_next, "gparr$ows") then
+ -- use gnuplot arrows instead of TikZ
+ gfx.opt.gp_arrows = true
+ elseif almost_equals(o_next, "nogparr$ows") then
+ -- use gnuplot arrows instead of TikZ
+ gfx.opt.gp_arrows = false
+ elseif almost_equals(o_next, "gppoint$s") then
+ -- use gnuplot points instead of TikZ
+ gfx.opt.gp_points = true
+ elseif almost_equals(o_next, "nogppoint$s") then
+ -- use gnuplot points instead of TikZ
+ gfx.opt.gp_points = false
+ elseif almost_equals(o_next, "nopic$environment") then
+ -- omit the 'tikzpicture' environment
+ gfx.opt.nopicenv = true
+ elseif almost_equals(o_next, "pic$environment") then
+ -- omit the 'tikzpicture' environment
+ gfx.opt.nopicenv = false
+ elseif almost_equals(o_next, "origin$reset") then
+ -- moves the origin of the TikZ picture to the lower left corner of the plot
+ gfx.opt.set_origin = true
+ elseif almost_equals(o_next, "noorigin$reset") then
+ -- moves the origin of the TikZ picture to the lower left corner of the plot
+ gfx.opt.set_origin = false
+ elseif almost_equals(o_next, "plot$size") then
+ get_next_token()
+ gfx.opt.plotsize_x, gfx.opt.plotsize_y = get_two_sizes(o_next)
+ if not gfx.opt.plotsize_x then
+ gp.int_error(t_count, string.format("error: two comma seperated lengths expected, got `%s'.", o_next))
+ end
+ gfx.opt.set_plotsize = true
+ term_opt_size = string.format("plotsize %s,%s ", gfx.opt.plotsize_x, gfx.opt.plotsize_y)
+ -- we set the canvas size to the plotsize to keep the aspect ratio as good as possible
+ -- and rescale later once we know the actual plot size...
+ term.xmax = gfx.opt.plotsize_x*pgf.DEFAULT_RESOLUTION
+ term.ymax = gfx.opt.plotsize_y*pgf.DEFAULT_RESOLUTION
+ elseif almost_equals(o_next, "si$ze") then
+ get_next_token()
+ local plotsize_x, plotsize_y = get_two_sizes(o_next)
+ if not plotsize_x then
+ gp.int_error(t_count, string.format("error: two comma seperated lengths expected, got `%s'.", o_next))
+ end
+ gfx.opt.set_plotsize = false
+ term_opt_size = string.format("size %s,%s ", plotsize_x, plotsize_y)
+ term.xmax = plotsize_x*pgf.DEFAULT_RESOLUTION
+ term.ymax = plotsize_y*pgf.DEFAULT_RESOLUTION
+ elseif almost_equals(o_next, "char$size") then
+ get_next_token()
+ charsize_h, charsize_v = get_two_sizes(o_next)
+ if not charsize_h then
+ gp.int_error(t_count, string.format("error: two comma seperated lengths expected, got `%s'.", o_next))
+ end
+ elseif almost_equals(o_next, "sc$ale") then
+ get_next_token()
+ local xscale, yscale = get_two_sizes(o_next)
+ if not xscale then
+ gp.int_error(t_count, string.format("error: two comma seperated numbers expected, got `%s'.", o_next))
+ end
+ term_opt_scale = string.format("scale %s,%s ",xscale, yscale)
+ term.xmax = term.xmax * xscale
+ term.ymax = term.ymax * yscale
+ elseif almost_equals(o_next, "tikzpl$ot") then
+ get_next_token()
+ local args = explode(',', o_next)
+ set_t_count(#args)
+ for i = 1,#args do
+ args[i] = tonumber(args[i])
+ if args[i] == nil then
+ gp.int_error(t_count, string.format("error: list of comma seperated numbers expected, got `%s'.", o_next))
+ end
+ args[i] = args[i] - 1
+ end
+ gfx.opt.plot_list = args
+ elseif almost_equals(o_next, "provide$vars") then
+ get_next_token()
+ local args = explode(',', o_next)
+ set_t_count(#args)
+ gfx.opt.gnuplot_vars = args
+ elseif almost_equals(o_next, "tikzar$rows") then
+ -- map the arrow angles to TikZ arrow styles
+ gfx.opt.tikzarrows = true
+ elseif almost_equals(o_next, "notikzar$rows") then
+ -- don't map the arrow angles to TikZ arrow styles
+ gfx.opt.tikzarrows = false
+ elseif almost_equals(o_next, "nobit$map") then
+ -- render images as filled rectangles instead of the nativ
+ -- PS or PDF image format
+ gfx.opt.direct_image = false
+ elseif almost_equals(o_next, "bit$map") then
+ -- render images as nativ PS or PDF image
+ gfx.opt.direct_image = true
+ elseif almost_equals(o_next, "cmyk$image") then
+ -- use cmyk color model for images
+ gfx.opt.cmykimage = true
+ elseif almost_equals(o_next, "rgb$image") then
+ -- use cmyk color model for images
+ gfx.opt.cmykimage = false
+ elseif almost_equals(o_next, "full$doc") or almost_equals(o_next, "stand$alone") then
+ -- produce full tex document
+ gfx.opt.full_doc = true
+ elseif almost_equals(o_next, "nofull$doc") or almost_equals(o_next, "nostand$alone") then
+ -- produce full tex document
+ gfx.opt.full_doc = true
+ elseif almost_equals(o_next, "create$style") then
+ -- creates the coresponding LaTeX style from the script
+ pgf.create_style()
+ elseif almost_equals(o_next, "backg$round") then
+ -- set background color
+ get_next_token()
+ -- ignore rgbcolor keyword if present
+ if almost_equals(o_next, "rgb$color") then get_next_token() end
+ if o_type == 'string' then
+ gfx.opt.bgcolor = gp.parse_color_name(t_count, o_next)
+ term_opt_background = string.format("background '%s'", o_next)
+ else
+ gp.int_error(t_count, string.format("error: string expected, got `%s'.", o_next))
+ end
+ elseif almost_equals(o_next, "fo$nt") then
+ get_next_token()
+ if o_type == 'string' then
+ gfx.opt.default_font, fontsize = gfx.parse_font_string(o_next)
+ else
+ gp.int_error(t_count, string.format("error: string expected, got `%s'.", o_next))
+ end
+ term_opt_font = string.format("font %q ", o_next)
+ elseif almost_equals(o_next, "fonts$cale") or almost_equals(o_next, "texts$cale") then
+ get_next_token()
+ if o_type == 'number' then
+ fontscale = tonumber(o_next)
+ if fontscale < 0 then
+ fontscale = 1.0
+ end
+ else
+ gp.int_error(t_count, string.format("error: number expected, got `%s'.", o_next))
+ end
+ elseif almost_equals(o_next, "externalimages") then
+ if term.external_images ~= nil then
+ term.external_images = true;
+ else
+ gp.int_warn(t_count, "Externalization of images is not supported.")
+ end
+ elseif almost_equals(o_next, "noexternalimages") then
+ if term.external_images ~= nil then
+ term.external_images = false;
+ else
+ gp.int_warn(t_count, "Externalization of images is not supported.")
+ end
+ elseif almost_equals(o_next, "pre$amble") or almost_equals(o_next, "header") then
+ get_next_token()
+ if o_type == 'string' then
+ term_opt_preamble = term_opt_preamble .. string.format("preamble %q ", o_next)
+ gfx.opt.latex_preamble = gfx.opt.latex_preamble .. o_next .. "\n"
+ else
+ gp.int_error(t_count, string.format("error: string expected, got `%s'.", o_next))
+ end
+ elseif almost_equals(o_next, "nopre$amble") or almost_equals(o_next, "noheader") then
+ gfx.opt.latex_preamble = ''
+ elseif almost_equals(o_next, "con$text") then
+ gfx.opt.tex_format = "context"
+ -- ConTeXt has a default of 12pt
+ fontsize = 12
+ elseif almost_equals(o_next, "tex") then
+ gfx.opt.tex_format = "tex"
+ elseif almost_equals(o_next, "latex") then
+ gfx.opt.tex_format = "latex"
+ elseif almost_equals(o_next, "clip") then
+ gfx.opt.clip = true
+ term.flags = term_default_flags
+ term.flags = term_default_flags + term.TERM_CAN_CLIP
+ elseif almost_equals(o_next, "noclip") then
+ gfx.opt.clip = false
+ term.flags = term_default_flags
+ elseif almost_equals(o_next, "tight$boundingbox") then
+ gfx.opt.tightboundingbox = true
+ elseif almost_equals(o_next, "notight$boundingbox") then
+ gfx.opt.tightboundingbox = false
+ else
+ gp.int_warn(t_count, string.format("unknown option `%s'.", o_next))
+ end
+ end
+
+ -- determine "internal" font size
+ -- FIXME: what happens on "set termoptions font ..." or subsequent terminal calls
+ local term_h_char, term_v_char = term.h_char, term.v_char
+ if fontsize ~= nil then
+ term_h_char = pgf.DEFAULT_FONT_H_CHAR * (fontsize/10) * (pgf.DEFAULT_RESOLUTION/1000)
+ term_v_char = pgf.DEFAULT_FONT_V_CHAR * (fontsize/10) * (pgf.DEFAULT_RESOLUTION/1000)
+ -- on change apply old text scaling
+ if not fontscale then
+ fontscale = gfx.opt.fontscale;
+ end
+ end
+ -- a given character size overwrites font size
+ if charsize_h ~= nil then
+ term_h_char = charsize_h*pgf.DEFAULT_RESOLUTION
+ term_v_char = charsize_v*pgf.DEFAULT_RESOLUTION
+ -- on change apply old text scaling
+ if not fontscale then
+ fontscale = gfx.opt.fontscale;
+ end
+ end
+ if fontscale ~= nil then
+ term_h_char = term_h_char * fontscale
+ term_v_char = term_v_char * fontscale
+ gfx.opt.fontscale = fontscale;
+ term_opt_fontscale = string.format("fontscale %s", gfx.opt.fontscale)
+ end
+ term.h_char = math.floor(term_h_char + .5)
+ term.v_char = math.floor(term_v_char + .5)
+
+
+ if print_help then
+ pgf.print_help(gp.term_out)
+ end
+
+ local tf = function(b,y,n)
+ local addopt = ''
+ if b then
+ addopt = y
+ else
+ addopt = n
+ end
+ if (string.len(addopt) > 0) then
+ term_opt = term_opt .. addopt .. ' '
+ end
+ end
+
+ tf(true, gfx.opt.tex_format, nil)
+ tf(true, term_opt_font, nil)
+ tf(true, term_opt_size, nil)
+ tf(true, term_opt_background, nil)
+ tf(true, term_opt_fontscale, nil)
+ tf((#gfx.opt.latex_preamble>0), term_opt_preamble, 'nopreamble')
+ tf(gfx.opt.lines_colored, 'color', 'monochrome')
+ tf(gfx.opt.full_doc, 'standalone', 'nostandalone')
+ tf(gfx.opt.lines_dashed, 'dashed', 'solid')
+ tf(gfx.opt.gp_arrows, 'gparrows', 'nogparrows')
+ tf(gfx.opt.tikzarrows, 'tikzarrows', 'notikzarrows')
+ tf(gfx.opt.gp_points, 'gppoints', 'nogppoints')
+ tf(gfx.opt.nopicenv, 'nopicenvironment', 'picenvironment')
+ tf(gfx.opt.set_origin, 'originreset', 'nooriginreset')
+ tf(gfx.opt.direct_image, 'bitmap', 'nobitmap')
+ tf(gfx.opt.cmykimage, 'cmykimage', 'rgbimage')
+ tf(gfx.opt.clip, 'clip', 'noclip')
+ tf(gfx.opt.tightboundingbox, 'tightboundingbox', 'notightboundingbox')
+ if term.external_images ~= nil then
+ tf(term.external_images, 'externalimages', 'noexternalimages')
+ end
+ gp.term_options(term_opt)
+
+ return 1
+end
+
+-- Called once, when the device is first selected.
+term.init = function()
+ if gfx.opt.full_doc then
+ pgf.write_doc_begin(gfx.opt.latex_preamble)
+ end
+ return 1
+end
+
+-- Called just before a plot is going to be displayed.
+term.graphics = function()
+ -- reset some state variables
+ gfx.linetype_idx_set = nil
+ gfx.linewidth_set = nil
+ gfx.pointsize_set = nil
+ gfx.color_set = nil
+ gfx.in_picture = true
+ gfx.have_plotbox = false
+ gfx.boundingbox_cnt = 0
+ gfx.scalex = 1/pgf.DEFAULT_RESOLUTION
+ gfx.scaley = 1/pgf.DEFAULT_RESOLUTION
+ gfx.current_boundingbox = {
+ xleft = nil, xright = nil, ytop = nil, ybot = nil
+ }
+
+ -- put a newline between subsequent plots in fulldoc mode...
+ if gfx.opt.full_doc then
+ gp.write("\n")
+ end
+ pgf.write_graph_begin(gfx.opt.default_font, gfx.opt.nopicenv)
+ return 1
+end
+
+
+term.vector = function(x, y)
+ if #gfx.path == 0 then
+ gfx.start_path(gfx.posx, gfx.posy)
+ elseif not gfx.check_coord(x, y) then
+ -- checked for zero path length and add the path coords to gfx.path
+ gfx.path[#gfx.path+1] = {x,y}
+ end
+ return 1
+end
+
+term.move = function(x, y)
+ -- only "move" if we change our latest position
+ if not gfx.check_coord(x, y) then
+ -- finish old path and start a new one
+ gfx.check_in_path()
+ gfx.start_path(x, y)
+ end
+ return 1
+end
+
+term.linetype = function(ltype)
+ gfx.check_in_path()
+
+ gfx.set_color('LT', {ltype})
+
+ if (ltype < -2) then -- LT_NODRAW, LT_BACKGROUND, LT_UNDEFINED
+ ltype = -2
+ end
+
+ gfx.linetype_idx = ltype
+
+ return 1
+end
+
+term.point = function(x, y, num)
+ if gfx.opt.gp_points then
+ return 0
+ else
+ gfx.check_in_path()
+ gfx.check_color()
+ gfx.check_linewidth()
+ gfx.check_pointsize()
+
+ local pm
+ if num == -1 then
+ pm = pgf.styles.plotmarks[1][1]
+ else
+ pm = pgf.styles.plotmarks[(num % (#pgf.styles.plotmarks-1)) + 2][1]
+ end
+ pgf.draw_points({{x,y}}, pm)
+
+ return 1
+ end
+end
+
+
+--[[
+ this differs from the original API
+ one may use the additional parameters to define own styles
+ e.g. "misuse" angle for numbering predefined styles...
+
+ int length /* head length */
+ double angle /* head angle in degrees */
+ double backangle /* head back angle in degrees */
+ int filled /* arrow head filled or not */
+]]
+term.arrow = function(sx, sy, ex, ey, head, length, angle, backangle, filled)
+ if gfx.opt.gp_arrows then
+ return 0
+ else
+ local headstyle = 0
+ if gfx.opt.tikzarrows then
+ headstyle = angle
+ end
+ gfx.check_in_path()
+ gfx.check_color()
+ gfx.check_linetype()
+ gfx.check_linewidth()
+ pgf.draw_arrow({{sx,sy},{ex,ey}}, gfx.HEAD_STR[head+1], headstyle)
+ return 1
+ end
+end
+
+-- Called immediately after a plot is displayed.
+term.text = function()
+ gfx.check_in_path()
+ pgf.write_graph_end(gfx.opt.nopicenv)
+ gfx.in_picture = false
+ return 1
+end
+
+term.put_text = function(x, y, txt)
+ gfx.check_in_path()
+ gfx.check_color()
+
+ if (txt ~= '') or (gfx.text_font ~= '') then -- omit empty nodes
+ pgf.write_text_node({x, y}, txt, gfx.text_angle, gfx.TEXT_ANCHOR[gfx.text_justify], gfx.text_font)
+ end
+ return 1
+end
+
+term.justify_text = function(justify)
+ gfx.text_justify = justify
+ return 1
+end
+
+term.text_angle = function(ang)
+ gfx.text_angle = ang
+ return 1
+end
+
+term.linewidth = function(width)
+ if gfx.linewidth ~= width then
+ gfx.check_in_path()
+ gfx.linewidth = width
+ end
+ return 1
+end
+
+term.pointsize = function(size)
+ if gfx.pointsize ~= size then
+ gfx.check_in_path()
+ gfx.pointsize = size
+ end
+ return 1
+end
+
+term.set_font = function(font)
+ gfx.text_font = gfx.parse_font_string(font)
+ return 1
+end
+
+-- at the moment this is only used to check
+-- the plot's bounding box as seldom as possible
+term.layer = function(l)
+ if l == 'end_text' then
+ -- called after a plot is finished (also after each "mutiplot")
+ gfx.write_boundingbox()
+ end
+ return 1
+end
+
+-- we don't use this, because we are implicitly testing
+-- for closed paths
+term.path = function(p)
+ return 1
+end
+
+
+term.filled_polygon = function(style, fillpar, t)
+ local pattern = nil
+ local color = nil
+ local opacity = 100
+ local saturation = 100
+
+ gfx.check_in_path()
+
+ if style == 'EMPTY' then
+ -- FIXME: should be the "background color" and not gpbgfillcolor
+ pattern = ''
+ color = 'gpbgfillcolor'
+ saturation = 100
+ opacity = 100
+ elseif style == 'DEFAULT' or style == 'OPAQUE' then -- FIXME: not shure about the opaque style
+ pattern = ''
+ color = gfx.color
+ saturation = 100
+ opacity = 100
+ elseif style == 'SOLID' then
+ pattern = ''
+ color = gfx.color
+ if fillpar < 100 then
+ saturation = fillpar
+ else
+ saturation = 100
+ end
+ opacity = 100
+ elseif style == 'PATTERN' then
+ pattern = pgf.styles.patterns[(fillpar % #pgf.styles.patterns) + 1][1]
+ color = gfx.color
+ saturation = 100
+ opacity = 100
+ elseif style == 'TRANSPARENT_SOLID' then
+ pattern = ''
+ color = gfx.color
+ saturation = 100
+ opacity = fillpar
+ elseif style == 'TRANSPARENT_PATTERN' then
+ pattern = pgf.styles.patterns[(fillpar % #pgf.styles.patterns) + 1][1]
+ color = gfx.color
+ saturation = 100
+ opacity = 0
+ end
+
+ pgf.draw_fill(t, pattern, color, saturation, opacity)
+
+ return 1
+end
+
+
+term.boxfill = function(style, fillpar, x1, y1, width, height)
+ local t = {{x1, y1}, {x1+width, y1}, {x1+width, y1+height}, {x1, y1+height}}
+ return term.filled_polygon(style, fillpar, t)
+end
+
+-- points[row][column]
+-- m: #cols, n: #rows
+-- corners: clip box and draw box coordinates
+-- ctype: "RGB" or "RGBA" or "PALETTE"
+term.image = function(m, n, points, corners, ctype, xfile)
+ gfx.check_in_path()
+
+ pgf.write_clipbox_begin({corners[3][1],corners[3][2]},{corners[4][1],corners[4][2]})
+
+ local ll = {corners[1][1],corners[2][2]}
+ local ur = {corners[2][1],corners[1][2]}
+ local xxfile
+
+ if xfile ~= nil then
+ -- strip file extension
+ xxfile = string.match(xfile, "^(.*).png$")
+ else
+ xxfile = ""
+ end
+ -- load exclusively an external file and don't generate inline images
+ if xfile ~= nil and term.external_images == true then
+ pgf.load_image_file(ll, ur, xxfile)
+ elseif gfx.opt.direct_image then
+ if gfx.opt.cmykimage then
+ pgf.draw_raw_cmyk_image(points, m, n, ll, ur, xxfile)
+ else
+ pgf.draw_raw_rgb_image(points, m, n, ll, ur, xxfile)
+ end
+ else
+ -- draw as filled squares
+ local w = (corners[2][1] - corners[1][1])/m
+ local h = (corners[1][2] - corners[2][2])/n
+
+ local yy,yyy,xx,xxx
+ for cnt = 1,#points do
+ xx = corners[1][1]+(cnt%m-1)*w
+ yy = corners[1][2]-math.floor(cnt/m)*h
+ yyy = yy-h
+ xxx = xx+w
+ pgf.draw_fill({{xx, yy}, {xxx, yy}, {xxx, yyy}, {xx, yyy}}, '', gfx.format_color(ctype, points[cnt]) , 100, 100)
+ end
+ end
+ pgf.write_clipbox_end()
+end
+
+term.make_palette = function()
+ -- continuous number of colours
+ return 0
+end
+
+term.previous_palette = function()
+ return 1
+end
+
+term.set_color = function(ctype, lt, value, r, g, b)
+ gfx.check_in_path()
+ -- FIXME gryscale on monochrome?? ... or use xcolor?
+
+ if ctype == 'LT' then
+ gfx.set_color('LT', {lt})
+ elseif ctype == 'FRAC' then
+ if gfx.opt.lines_colored then
+ gfx.set_color('RGB', {r, g , b})
+ else
+ gfx.set_color('GRAY', {value})
+ end
+ elseif ctype == 'RGB' then
+ gfx.set_color('RGB', {r, g , b})
+ else
+ gp.int_error(string.format("set color: unknown type (%s), lt (%i), value (%.3f)\n", ctype, lt, value))
+ end
+
+ return 1
+end
+
+-- Called when gnuplot is exited.
+term.reset = function(p)
+ gfx.check_in_path()
+ gfx.check_variables()
+ if gfx.opt.full_doc then
+ pgf.write_doc_end()
+ end
+ return 1
+end
+
+--[[===============================================================================================
+
+ command line code
+
+]]--===============================================================================================
+
+term_help = function(helptext)
+ local w
+ for w in string.gmatch(helptext, "([^\n]*)\n") do
+ w = string.gsub(w, "\\", "\\\\")
+ w = string.gsub(w, "\"", "\\\"")
+ io.write('"'..w.."\",\n")
+ end
+--[[
+ local out = string.gsub(helptext, "\n", "\",\n\"")
+ local out = string.gsub(helptext, "\n", "\",\n\"")
+ io.write(out)]]
+end
+
+if arg then -- called from the command line!
+ if #arg > 0 and arg[1] == 'style' then
+ -- write style file
+ pgf.create_style()
+ elseif arg[1] == 'termhelp' then
+ io.write([["2 lua tikz",
+"?set terminal lua tikz",
+"?set term lua tikz",
+"?term lua tikz",
+" The TikZ driver is one output mode of the generic Lua terminal.",
+"",
+" Syntax:",
+" set terminal lua tikz",
+"",
+]])
+ pgf.print_help(term_help)
+ io.write("\"\"\n")
+ else
+ io.write([[
+ This script is intended to be called from GNUPLOT.
+
+ For generating the associated TeX/LaTeX/ConTeXt style files
+ just call this script with the additional option 'style':
+
+ # lua gnuplot.lua style
+
+ The TikZ driver provides the following additional terminal options:
+
+]])
+ pgf.print_help(io.write)
+ end
+end
--- /dev/null
+.\" dummy line
+.TH GNUPLOT 1 " 2 October 2013"
+.UC 4
+.SH NAME
+gnuplot \- an interactive plotting program
+.SH SYNOPSIS
+.B gnuplot
+[X11 options] [options] [file ...]
+.br
+.SH DESCRIPTION
+.B Gnuplot
+is a command-driven interactive plotting program.
+.PP
+If file names are given on the command line,
+gnuplot
+loads each file with the
+.B load
+command, in the order specified, and exits after the last file is
+processed. If no files are given, \fBgnuplot\fP prompts for
+interactive commands.
+.PP
+Here are some of its features:
+.PP
+Plots any number of functions, built up of C operators, C math library
+functions, and some things C doesn't have like **, sgn(), etc.
+.PP
+User-defined constants and functions.
+.PP
+All computations performed in the complex domain. Just the real part is
+plotted by default, but functions like imag() and abs() and arg() are
+available to override this.
+.PP
+Many presentation styles for plotting user data from files, including
+surface-fitting, error bars, boxplots, histograms, heat maps, and simple
+manipulation of image data. There is an on-line demo collection at
+.br
+.I http://gnuplot.info/demo
+.PP
+Nonlinear least-squares fitting.
+.PP
+2D and 3D plots with mouse-controlled zoom and rotation.
+.PP
+Shell escapes and command line substitution.
+.PP
+Load and save capability.
+.PP
+Support for a huge variety of output devices and file formats.
+.SH OPTIONS
+.PP
+\fB\-p, \-\-persist\fP lets plot windows survive after main gnuplot program exits.
+.PP
+\fB\-d, \-\-default\fP settings. Do not read from gnuplotrc or ~/.gnuplot on entry.
+.PP
+\fB\-e "command list"\fP executes the requested commands before loading the next input file.
+.PP
+\fB\-h, \-\-help\fP print summary of usage
+.PP
+\fB\-V\fP show current version
+.SH X11 OPTIONS
+.B Gnuplot
+provides the \fIx11\fP terminal type for use
+with X servers. This terminal type is set automatically at startup if
+the \fBGNUTERM\fR environment variable is set to x11,
+or if the \fB\-display\fR command line option is used.
+For terminal type x11, \fIgnuplot\fP
+accepts the standard X Toolkit options and resources such as geometry, font,
+and background. See the X(1) man page for a description of common options.
+For additional X options specific to gnuplot, type \fIhelp x11\fP on the
+gnuplot command line.
+.SH ENVIRONMENT
+A number of shell environment variables are understood by
+gnuplot. None of these are required.
+.TP
+.B GNUTERM
+The name of the terminal type to be used by default. This can be
+overridden by the gnuplotrc or .gnuplot start-up files and,
+of course, by later explicit "set terminal" commands.
+.TP
+.B GNUHELP
+The pathname of the HELP file (gnuplot.gih).
+.TP
+.B HOME
+The name of a directory to search for a .gnuplot file.
+.TP
+.B PAGER
+An output filter for help messages.
+.TP
+.B SHELL
+The program used for the "shell" command.
+.TP
+.B FIT_SCRIPT
+Specifies a gnuplot command to be executed when a
+fit is interrupted---see "help fit".
+.TP
+.B FIT_LOG
+The name of the logfile maintained by fit.
+.TP
+.B GNUPLOT_LIB
+Additional search directories for data and command files. The variable
+may contain a single directory name, or a list of directories
+separated by ':'. The contents of GNUPLOT_LIB are appended to the
+"loadpath" variable, but not saved with the "save" and "save set"
+commands.
+.TP
+.B GDFONTPATH
+Several gnuplot terminal drivers access TrueType fonts via the gd library.
+This variable gives the font search path for these drivers.
+.TP
+.B GNUPLOT_DEFAULT_GDFONT
+The default font for the terminal drivers that access TrueType fonts
+via the gd library.
+.TP
+.B GNUPLOT_FONTPATH
+The font search path used by the postscript terminal. 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.
+.TP
+.B GNUPLOT_PS_DIR
+Used by the postscript driver to locate 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 "help postscript prologue".
+.SH FILES
+.TP
+.I gnuplotrc
+When gnuplot is run, it first looks for a system-wide initialization
+file named gnuplotrc. The standard location of this file expected by
+the program is reported by the "show loadpath" command.
+.TP
+.I .gnuplot
+After loading the system-wide initialization file, if any,
+Gnuplot looks for a private initialization file in the HOME directory.
+It may contain any legal gnuplot commands, but typically they are
+limited to setting the preferred terminal and line types
+and defining frequently-used functions or variables.
+.TP
+.I fit.log
+The default name of the logfile output by the "fit" command.
+.SH AUTHORS
+Original authors: Thomas Williams and Colin Kelley.
+Starting with gnuplot version 3.8, the project source is cooperatively
+maintained on SourceForge by a large number of contributors.
+.SH BUGS
+Please report bugs using the project bug tracker on SourceForge.
+.SH SEE ALSO
+See the printed manual or the on-line help for details on specific commands.
+Project web site at http://gnuplot.info