Go to the first, previous, next, last section, table of contents.


The Graphics Metafile Format

GNU graphics metafiles are produced by the raw variants of graph, plot, pic2plot, tek2plot, and plotfont, and by any other graphics application that uses the Metafile Plotter support contained in GNU libplot. A file in this format is a sort of audit trail: a sequence of plotting commands, each of which may be followed by data. Each plotting command is an `op code': a single ASCII character, indicating a Plotter operation. The data following the command are the arguments passed to the operation, if any.

There are two sorts of GNU graphics metafile: binary (the default) and portable (human-readable). Binary metafiles begin with the magic string "#PLOT 1\n", and portable metafiles with the magic string "#PLOT 2\n". If you wish to transfer metafiles between machines of different types, you should use portable rather than binary format. Portable metafiles are produced by GNU graph and the other plotting utilities if the `-O' option is specified, and by Metafile Plotters if the META_PORTABLE parameter is set to "yes". Both binary and portable metafiles can be translated to other formats by GNU plot.

In the portable format, the arguments of each operation (integers, floating point numbers, or strings) are printed in a human-readable form, separated by spaces, and each argument list ends with a newline. In the binary format, the arguments are represented as integers, single precision floating point numbers, or newline-terminated ASCII strings. Using the newline character as a terminator is acceptable because each libplot operation includes a maximum of one string among its arguments, and such a string may not include a newline. Also, the string must come last among the arguments.

The openpl and closepl operations open and close a Plotter, i.e., begin and end a page of graphics. They are represented by the op codes `o' and `x', respectively. The erase operation, if present, separates frames within a page. On real-time display devices, it is interpreted as a screen erasure. It is represented by the op code `e'.

Each of the 89 other Plotter operations has a corresponding op code, with 12 exceptions. These 12 exceptions are (1) the setup operation flushpl, (2) the operations havecap, labelwidth, and flabelwidth, which merely return information, (3) the colorname, pencolorname, fillcolorname, and bgcolorname operations, which are internally mapped to pencolor, fillcolor, and bgcolor, (4) the frotate, fscale, and ftranslate operations, which are internally mapped to fconcat, and (5) the ffontname operation, which in a metafile would be indistinguishable from fontname. So besides `o' and `x', there are 78 possible op codes, for a total of 80. The following table lists 10 of the op codes other than `o' and `x', followed by the name of the libplot operation they stand for.

Op Code
Operation
`a'
arc
`c'
circle
`e'
erase
`f'
linemod
`l'
line
`m'
move
`n'
cont
`p'
point
`s'
space
`t'
label

The full set of 80 op codes is listed in the header file `plot.h', which is distributed along with the plotting utilities. On most systems it is installed in `/usr/include' or `/usr/local/include'.

It is worth noting that of the 80 op codes, only 50 are used in portable metafiles. That is because in ASCII format, there is no point in distinguishing the floating point libplot operations from their integer counterparts.

The 10 op codes in the table above are actually the op codes of the traditional `plot(5)' format produced by pre-GNU versions of graph and libplot. The use of these op codes make GNU metafile format compatible with plot(5) format. The absence of a magic string, and of the `o' and `x' op codes, makes it possible to distinguish files in plot(5) format from GNU metafiles. GNU plot can convert files in plot(5) format to GNU metafiles in either binary or portable format.


Go to the first, previous, next, last section, table of contents.