By downloading this code you agree to the
Source Code Use License (PDF). |
{ version = 9.52; (* of xyplo.p 2024 Jun 06}
(* begin module describe.xyplo *)
(*
name
xyplo: x, y data plotter (pronounced: "zyplo")
synopsis
xyplo(xyin: in, xyout: out, xyplop: inout, xyplom: in,
warnings: out, output: out)
files
xyin: A set of header lines that begin with asterisk ('*') or pound
sign ('#') are copied to output. Remaining lines are the data
in columns, ending with end of file. Tabs may separate data.
Missing columns are not allowed. See the demonstration file
xyin.demo for an example. Once the first data line has been
read, lines that begin with an '*' or '#" or that are entirely
blank will be ignored. This allows one to place comments or
other information deeper into the file without having xyplo
object. The # allows files to be read by gnuplot too.
xyplop: Parameters to control the plot, on lines as shown. The major
sections of the parameter file are separated by lines that are used by
the program as separators. A separator line may begin with blanks, and
these must be followed by asterisks, as shown below. These lines simply
make the file easier to deal with, but you must have them in the file!
The easiest way to create a xyplop file is to copy the demonstration
file (xyplop.std or xyplop.demo) and modify that to suite your needs.
xzero yzero amounts to move the graph origin (cm)
zx min max (character, real, real) if zx='x' then set xaxis
zy min max (character, real, real) if zy='y' then set yaxis
These two lines set the minimum and maximum range of
the data to graph. Other characters mean the
program automatically uses the range of the data.
xinterval yinterval xsubintervals ysubintervals:
These 4 parameters, all on one line, define the
number of numbered intervals on each axes to plot
and the number of unnumbered subintervals. Note
that on a regular scale, going from 10 to 20
requires 10 intervals (to get whole numbers), but on
a log scale, going from 10 to 100 requires 9
intervals (to get tics every 10), not 10 intervals!
xwidth ywidth width of numbers in characters
xdecimal ydecimal number of decimal places
xsize ysize size of axes in cm
xlabel the x axis label
ylabel the y axis label
NEW: 2016 Sep 29 the y label is now rotated and
on the left side of the graph. To restore
the original behavior of the y label above
the y axis, put '^' in front of the title.
zc if zc='c' then a crosshairs put on zero of x and y
'x' then only X axis is plotted
'X' then only X axis and crosshairs
'y' then only Y axis is plotted
'Y' then only Y axis and crosshairs
'n' then neither axis nor crosshairs
'N' then neither axis with crosshairs
'i' then numbering and tic marks but no line
(invisible)
Otherwise, both axes are plotted without crosshairs.
zxl base if zxl='l' then convert the x axes to a log scale
using the indicated base.
zxl='L' is like 'l' but the numbers given on the
axis have not had the log taken of them.
zyl base if zyl='l' then convert the y axes to a log scale
using the indicated base.
zyl='L' is like 'l' but the numbers given on the
axis have not had the log taken of them.
* define columns to read data from ***********************************
This section defines which column of xyin contains
what kind of data. You can use a column only once.
xcolumn ycolumn columns of xyin that determine the
location of the symbol
symbol-column the xyin column to read symbols from
if zero, then use the first symbol defined below
xscolumn yscolumn columns of xyin that determine the size of the
symbol. If zero, then no data is expected.
NOTE: for most symbols this is the entire size of
the symbol. For the I beam symbol, the yscolumn is
half of the total size plotted. Thus one may use
standard deviations and obtain a symbol of 2
standard deviations high centered on the y
coordinate.
colorkind hucolumn sacolumn brcolumn
define the hue saturation brightness columns.
These control the color of the rectangle symbol.
1 0 0 is black (assumed if columns are all zero)
1 0 1 is white
Hue runs from red (value 0) through the spectrum
to violet (value 1). See the technical notes for
further details.
If the first character of the line is a
digit, blank or 'h' then the hsb (hue
saturation brigtness) color model is used.
If the first character of the line is 'r'
then the rgb (red green blue) color model
is used.
* define one or more symbols *****************************************
Each of these sections defines one of the symbols by
specifying what to do for each symbol flag seen in
the symbol column. There may be as many symbols as
will fit in memory.
The last of these sections must contain just a '.'
as the 'symbol-to-plot'. This is required to end
the symbol definition section since there are an
indefinite number of symbols.
symbol-to-plot (character) Most symbols are plotted at the
coordinates given in xcolumn and ycolumn.
'c' plot a circle
'C' plot a circle; with connections in color
'b' plot a box
'B' plot a box; with connections in color
'x' plot an x
'+' plot a plus
'I' plot an I beam symbol
'd' plot a box with central dot
'p' point (or dot) alone.
'm' mark according to a xyplom definition
'M' mark according to a xyplom definition,
with connections in color
'R' plot a filled rectangle in color. Unlike the
other symbols, which are centered on the data, the
lower right hand corner of this rectangle is placed
on the data. This allows the user more control on
placement.
's' plot a histogram from zero to the height
'r' like 'R' but gray scale. The brightness
column is used for controlling the brightness.
'f' Means to plot the symbol-flag (defined below).
The 'f' type allows several symbols to be made each
with its own regression and connection lines, but
plotted with the entire flag string in xyin. The
symbols are distinguished by their first character.
The symbol-flag in xyplop should be set to the string
that one desires to be recognized.
'f' will center the string.
'F' will left justify the string.
'g' Means 'grab bag'. The 'g' type has lower
priority than any other symbol. Xyplo searches
through all the available symbols looking for a
match to the symbol-flag. If a symbol-flag cannot
be found, then the data are assigned to the
'grab-bag'. The program uses the symbol-flag on the
graph.
The symbol-flag in xyplop can be anything.
'g' will center the string.
'G' will left justify the string.
'L' will make just lines using the current colors.
The symbol underscore (_) in xyin is converted
to a blank to allow the appearance of separated
words.
One can do grab-bag connected curves without symbols
by setting g and the symbol-flag to ' '. One can
also set the symbol-to-plot to blank (or other
unrecognized symbol) to get specific connected
curves. In this case, the symbols MUST be connected
or the program will object (invisible symbol and
invisible connection means data loss).
'm' Means to look up the symbol-flag name
in the xyplom file and to use the PostScript
definition there to create the symbol.
'M' like 'm' but draw the connecting line
in color and if there is no symbol in the
xyplom, don't draw any symbol. This allows
one to make curves without symbols.
symbol-flag The string of characters that indicates that this
symbol should be plotted. Eg, if the
'symbol-to-plot' is I and the flag is x, then
whenever an x is seen in the symbol column, an I
beam will be plotted. The flag can be more than one
character long, but (unfortunately) it cannot
contain blanks.
symbol-sizex Side in cm on the x axis of the symbol. If this
value is negative, the data in xscolumn is used to
determine the size. For circles, sizex determines
the diameter, sizey is ignored.
symbol-sizey Side in cm on the y axis of the symbol. If this
value is negative, the data in yscolumn is used to
determine the size. For circles, sizeX determines
the diameter but a positive number is still required
for sizey.
connection linetype size If the first character is 'c' then the
symbols will be connected by lines of linetype as
defined below. (Linetype must follow the c
immediately, without blanks.)
linetype size linetype is a character defining the kind of
regression line to plot for this symbol:
'l' means do regression line
'i' invisible,
'.' dotted
'-' dashed
'n' means no line.
'-' and '.' require a size in cm for the
spacing. The others also require a number, but it
is ignored.
* end the symbol definitions with a period (left justified!) *********
.
* define zero or more user defined lines *****************************
linetype m b size One or more lines to be drawn on the plot, m and b
are slope and intercept. Linetype and size are
define as for the symbol connection lines. blank
lines and lines that begin with "*" are ignored.
in this section
linetype is defined as for the regression lines.
* end of the line definitions and start of more parameters ***********
edgecontrol edgeleft, edgeright, edgelow, edgehigh:
edgecontrol is a single character that controls how the bounding
box of the figure is handled. If it is 'n' then the bounding box
will be the page parameters defined in constants inside the program
(llx, lly, urx, ury AND changes as set by the previous parameter
line). If the parameter is 'p', there are four real numbers that
define the edges around the clist in cm. To allow a map to be
imbedded into another figure, its size must be defined in
PostScript (with %%BoundingBox). By setting these four numbers,
the edges are defined. Negative values are allowed, so one may
move the edges as desired.
(New as of 2003 Aug 22)
xyout: regression results, ready for PostScript input. (See technical
notes.)
xyplom: A file containing definitions of additional symbols,
written in PostScript. The symbols must be of the form:
/mysymbol { % xsize ysize mysymbol -
% xsize x size in points
% ysize y size in points
/xsize exch def
/ysize exch def
...
} bind def
Xyplo translates to the proper location and sets the color before
calling the routine. This allows the xyin file to control the color of
the symbols, but of course it can be overridden by the user's routine.
It is even possible for the symbol to use both colors!
Be sure to define the symbol in the xyplop.
If the xyplom file is empty, there are no user defined symbols.
FONT CONTROL (New as of 2010 Oct 26)
%F If the xyplom file contains any line starting with '%F'
then the user defines the font.
%T If the xyplom file contains any line starting with '%T'
then the user can scale the tic marks on both axes.
%X If the xyplom file contains any line starting with '%X'
then the user can scale the tic marks on the X axis.
%Y If the xyplom file contains any line starting with '%Y'
then the user can scale the tic marks on the Y axis.
%x If the xyplom file contains any line starting with '%x'
then the user can move the x label up or down (cm).
%y If the xyplom file contains any line starting with '%y'
then the user can move the y label up or down (cm).
%W If the xyplom file contains any line starting with '%W'
then a white rectangle is written on the background. If
figure is converted to a jpg using the ImageMagick convert
program, the background will not be black.
The white rectangle is determined from the bounding box.
You can control the bounding box using edgecontrol.
Example:
%F % font control from xyplom
/Helvetica-Bold findfont
16 scalefont
setfont
2 setlinewidth % sets linewidth
%T 1.5 % tic mark scale factor
warnings: extensive warning messages. These get in the way if they go to
output. One line appears on the output file if there are any
warnings.
output: messages to the user
description
The data in the xyin file are converted to graphics in the PostScript
language on the xyout file, under control of the parameters set in xyplop.
There are several distinct sections of the parameters:
1. The first set of parameters determine the overall characteristics of the
graph.
2. The second set of parameters defines the columns of xyin to be read.
3. The next section of the parameter file defines one or more symbols to be
plotted on the graph. If desired, a linear regression is performed
between the data columns, and this may be graphed for each symbol. The
invisible option allows one to obtain the regression data without the
graph. Regression data include the correlation coefficient
and Fisher's z'.
4. A section with just a period ends the symbols section.
5. The last section contains lines you define.
Recommended procedure for using xyplo: obtain a copy of xyplop.demo and
xyin.demo, set permission to read them for yourself (on a Unix system use
chmod), and copy them to the names xyplop and xyin. Try them out as is. If
you don't get a graph, doing your own data will not do any good! Then
convert the xyplop to your own use by changing the xyplop.demo file and
substitute your xyin file. This way the complexity of xyplop can be held at
bay.
see also
Basic example files:
xyin, xyout, xyplop, xyplom,
Standard parameter file: xyplop.std
Demonstration examples:
xyplop.demo, xyin.demo,
xyplop.test, xyin.test,
xyplop.mul, xyin.mul,
xyin.logs
xyplop.xn xyplop.xl xyplop.xL
xyplop.yn xyplop.yl xyplop.yL
xyin.genbank xyplop.genbank
Related program - generate histogram:
genhis.p
Related programs - graphics routines:
dops.p
doodle.p
Technical note:
To define the bounding box for the graph must be defined.
The postscript program
https://alum.mit.edu/www/toms/ftp/printerarea.ps
will give the values for your printer.
substitute in the values at %%BoundingBox
Xyplo now accepts the '#' as the start of a comment
so that data files can also be used for gnuplot. See:
http://www.gnuplot.info/
Confidence Limits for the Correlation,
Fisher's z':
http://sportsci.org/resource/stats/sscorr.html#fisherz
who says that to get the confidence limits of the correlation
coefficient,
"use the Fisher z transformation: z = 0.5log[(1 + r)/(1 - r)].
The transformed correlation (z) is normally distributed with
variance 1/(n - 3), so the 95% confidence limits are given by z
± 1.96/sqrt(n - 3). You then have to back-transform these
limits to correlation coefficients using the equation r =
[(e^(2z) - 1)/(e^(2z) + 1)]."
See also:
Fisher RA (1921). On the probable error of a coefficient of
correlation deduced from a small sample. Metron 1, 3-32.
http://davidmlane.com/hyperstat/A50760.html
author
Thomas Schneider
technical notes
The program originally generated output in the pic format. One
could then run this through pic and troff to produce a graph.
However, the program has been modified to eliminate the pic
notation (by substituting modules from dops rather than domods).
All lines outside the graphics now are preceeded by a %, which is
beginning of a comment in PostScript. Thus the output of the
program can be run directly into a PostScript interpreter. This
saves on both memory and speed of graphing since the intermediate
file is no longer created.
Colors in PostScript are defined with hue, saturation and
brightness with the sethsbcolor function. (Xyplo does not use red,
green, blue model because it does not give the most useful
continuous scale, though maybe someday I'll put in a switch.) The
standard hue runs from red at 0 to red at 1 with the Roy G. Biv in
between. (The famous physicist Roy G. Biv stands for: red, orange,
yellow, green, blue, indigo, violet, the colors of the spectrum.
On 1992 September 16 I realized that, amazingly, the wavelength in
nm match quite nicely!
700 red
750 orange
600 yellow
650 green
500 blue
550 indego
400 violet
Ok, Ok, back to xyplo! Since the hue runs in a circle, the
spectrum is not generated from the hue range 0 to 1. Xyplo
therefore converts the input numbers by multiplying by 0.84 and
adding 0.16. This gives the color range from yellow through red
corresponding to values 0 to 1. (Note: adding 0.16 give the range
from yellow through red, but that is not a spectrum which runs from
red through violet.)
As of version 8.50 (1996 March 21) the xyplo program now uses cm
(YEA!) which means that ALL previous graphs are out of date. If
you happen to be stuck in a backwards, primitive country, tough
luck. Bite the bullet.
Minor unobvious things have prevented people from getting graphs.
Most problems occur when badly formed xyplop files are used, and
the program has no way to tell what the difficulty is. More checks
have been put it, so the program can detect most oddly formed xylop
and xyin files. Check your xyplop carefully.
Setting the Default Printer Area:
The size of the page in PostScript is determined with 4 constants
llx, lly, urx and ury. These must be set correctly for each
printer. These can be easily obtained by printing the file:
https://alum.mit.edu/www/toms/ftp/printerarea.ps
In this program these parameters are set as 4 constants defaultllx,
defaultlly, defaulturx and defaultury. The parameters for page
edges define whether to use the defaults or to compute the size to
show.
bugs
ENHANCEMENTS:
* xyplo should apply a PostScript to clip everything outside the drawing area
* xyplo has a numerical drift problem. For extremely large numbers of
data points, the computed position differes from the position rendered
by PostScript. This should be corrected by using gsave and restore,
but it is not clear how to modify the draw routines to do this
cleanly. As it is the program tracks the location of where it THINKS
it is on the graphical display.
ENHANCEMENTS:
* xyplo: cannot handle error bars in log mode
* xyplo: user defined lines have to be type l??
* xyplo: define symbols in postscript - should speed graphics a lot
* xyplo bug: when the last line of the file is empty, the program halts (that's
fine). The count of the location of the error does NOT include the * lines
though! Yet it says: "at line 27 of data (INCLUDING * lines)" Correct this.
* xyplo bug from Mark (email 1992 May 27)
*)
(* end module describe.xyplo *)
{This manual page was created by makman 1.45}
{created by htmlink 1.62}