By downloading this code you agree to the
Source Code Use License (PDF). |
{ version = 2.23; (* of denplo.p 2022 May 04}
(* begin module describe.denplo *)
(*
name
denplo: density plot in color
synopsis
denplo(data: in, denplop: inout,
denploxyin: out, denploxyplom: out, denploxyplop: out,
output: out)
files
data: data pairs
denplop: parameters to control the program. The file must contain the
following parameters, one per line:
0. parameterversion: The version number of the program. This allows
the user to be warned if an old parameter file is used.
1. numbertoprocess: number of data items to process (negative = all)
This allows the user to explore a part of a large data set
before committing to a long process time. I suppose it would
also allow you to make a movie of the data building up!
2. XminValue, XmaxValue, Xintervals: (real, real, integer) range
for x, and the number of intervals
3. YminValue, YmaxValue, Yintervals: (real, real, integer) range
for Y, and the number of intervals
4. NuWi, NuDe: (integer) define the width and
decimal places of output numbers. NuWi = 1, Pascal will give
the number out anyway! This is a big space saver.
5. Xcolumn, Ycolumn: (integer) column numbers for X and Y data.
They can be in any order.
6. Xsize, Ysize: (real) size of the plotting area, cm.
7. Xcorner, Ycorner: (real) lower left corner of the plotting area, cm.
8. XDisplayIntervals, YDisplayIntervals
XDisplaySubIntervals, YDisplaySubIntervals
: (integer)
Number of numeric intervals for xyplo to display on the axis
This keeps the number of numbers on the side of the graph
reasonable but does not affect the graph itself. It allows
one to have a highly dense plot without labeling every data
interval.
If one of the DisplayInterval values is less than or equal to
zero, then the corresponding bin interval will be used. For
example, if XDisplayIntervals = 0 then the display interval
used will be given by the value of Xintervals.
Sub intervals apply all the time.
9. xwidth, ywidth: (integer) axis number width
10. xdecimal, ydecimal: (integer) axis number decimals
11. background, grey (character, real) color to give when there
are no data:
b = black
g = grey; the grey value is given (between 0.0 and 1.0)
w = white
c = colorful. For debugging:
a complex formula is used to change the colors of squares
over the background so one can debug the program.
Data are plotted on top of this. So most of the time
this option is not useful to people.
For white no background square needs to be written, so it
isn't. When there are sparse data above the cutoff, this
option can be extremely efficient because very little data
needs to be written to the denploxyin file. For black, grey
or colorful every square is written all the time.
12. cutoffvalue (character, real, [real]):
The first character on the line defines the kind of cutoff:
'c': use the number of counts in a bin (one value used)
'f': use the fraction of this bin to the fullest bin (one value used)
'C': range of counts to plot (two values needed)
'F': range of fractions to plot (two values needed)
For 'c' and 'f', only one number is needed. The number is
the cutoff value. Counts are reported for values higher than
or equal to the cutoff. For example, in c mode a zero cutoff
will have denplo display cases with 0 or more counts.
For 'C' and 'F', two numbers are need, this is the range of
counts or fractions to use.
2009 Apr 11: cutoff values are now inclusive, so if a count
is 5 and the range is 5 to 10 it will be plotted.
13. shrinkfactorX, shrinkfactorY (real): numbers above zero
A value of 1 will make the display be completely covered
while one less than 1 will leave gaps that allow one to
distinguish between the squares. Note: values larger than 1
will cause overlapping squares, so something like 1.01 will
slightly overlap the squares, guaranteeing that there will be
no space at all between them.
14. XaxisLabel: (string, entire line): the label for the x axis.
15. YaxisLabel: (string, entire line): the label for the y axis.
16. cog: (character): color or grey
The first character on the line defines the value:
'c': use colors in the spectrum
'g': use grey scale
COLOR KEY DISPLAY CONTROLS
The color key is a set of rectangles surrounded by a black edge.
To the right are numbers that report the density. The numbers
can either report the number that the color corresponds to or the
density relative to the highest density in the plot. The key is
placed into the denploxyplom file where it can then be passed to
xyplo as a xyplom file.
17. keyintervals: The number of boxes in the key will be
keyintervals+1 (to allow for a zero). If keyintervals is
zero, then no color key is shown. Example: To get
boxes numbered 0.0, 0.0 ... 10.0, use 10 for keyintervals.
18. keytype (character): f: fraction of maximum, n: raw number.
The way to display the key numbers.
19. keyX: X coordinate of the lower left corner of the key (cm)
20. keyY: Y coordinate of the lower left corner of the key (cm)
21. keyXsize: X size of key boxes (cm)
22. keyysize: Y size of key boxes (cm)
23. keyshrinkfactor: a number between 0 and 1 which defines
how much the key boxes should shrink.
24. thelinewidth: the width of a line around each key box (cm)
If thelinewidth is zero than the line is the default width.
If less than zero, no line is drawn.
25. keydecimals: number of decimal places for the
numbers placed to the right of each key box.
26. keyfontsize: the font size for the key numbers. 10 is a good
place to stat.
27. 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.
FINDING LOCAL PEAKS
28. findpeak, startX, startY, SearchRange:
l: findpeak is a single character for which 'l' means to
search for a local peak starting at coordinate (startX,
startY) instead of using the global maximum. If the local
peak found is not the global maximum, then positions that
have more counts than the local peak are shown by black. The
search is made in a series of squares, starting at (startX,
startY). The side of each square is determined by
SearchRange: side = 2*Searchrange+1. That is, if SearchRange
= 0, the side is 1 and the peak is set at (startX, startY).
When SearchRange = 3, the side is 3 and 9 positions are
searched. The square is moved to the position that has the
highest local density. This is repeated until no higher
position is found. The algorithm is deterministic (no random
numbers are used) and the result may depend on the order of
scanning the square.
maxpeak, BinMax:
m: If the first character is 'm' then instead of finding the
peak the second parameter is used for the maximum BinMax.
This allows one to force the maximum color to be a particular
value and so allows comparison of plots on the same scale.
29. yaverage, shrinkYav: (character, positive real) if 'y' then
compute the average of y values in the bins and display. The
average is shown by a black bar with width the width of the
displayed rectangles. The height of the bar is determined by
shrinkYav. shrinkYav is the factor by which to scale the bar
vertically. If shrinkYav = 1, then the bar will be the same
size as the display rectangles. (Note that its position will
vary up and down depending on where the average is so it will
not necessarily match the rectangles.) If shrinkYav = 2 then
the bar will be half the size of the rectangles (vertically).
30. zxl xbase if zxl='l' then convert the x axes to a log scale
using the indicated base.
31. zyl ybase if zyl='l' then convert the y axes to a log scale
using the indicated base.
The resulting log plot is very pretty!
31. smoothkind (char), smoothsize (real)
If smoothkind is '-' then no smoothing is done.
If smoothkind is 's' then smoothing is in a square. A
square of side smoothsize cells is averaged and placed into
the center (if smootsize is odd) or to the positive side (if
smoothsize is even).
Once the data are collected into the first array, they are
averaged into a second array of the same size as the first
array. The edges are lost (set to zero) depending on the
size. The second array is then printed.
denploxyin: control file for xyplo: density of data pairs
represented in color. Copy or link this file to xyin.
denploxyplom: control file for xyplo: a postscript file
that contains marks. It also contains the color key if
that is being used. Copy or link this file to xyplom.
denploxyplop: control file for xyplo: parameters
Copy or link this file to xyplop.
Documentation is in the xyplo.p program.
output: messages to the user
description
Denplo takes a file containing pairs of numbers and (using the
xyplo program) plots the density of the numbers in color.
The user specifies a rectangular region on the X-Y plane. Then
each axis is divided into the number of intervals requested by the
user. These define a set of data bins onthe X-Y plane. The data
are dropped into the bins and counted. The output of denplo
consists of the three files that control the xyplo plotting
program.
For example, one output file is called a denploxypop = a denplo
xyplop = density plot, x-y plotter parameter file. This is
pronounced 'den-plo-zye-plop'! The denploxyin is 'den-plo-zin' and
the denploxyplom is 'den-plo-zye-plom'. :-)
Since these are not the names used by xyplo (so that xyplo files
are not overwritten), you need to copy (Unix cp) or move (Unix mv)
them into the names that xyplo uses:
cp denploxyin xyin
cp denploxyplom xyplom
cp denploxyplop xyplop
Then you can run xyplo to get the xyout (xy-out = 'zyout'), which
is a eps PostScript file.
examples
example denplop file:
1.88 0. parameterversion: denplo version this parameter file is designed for
-1 1. numbertoprocess: number of data items to process (negative = all)
0 10 10 2. XminValue,XmaxValue,Xintervals: (real,real,integer) X range,ints
0 10 10 3. YminValue,YmaxValue,Yintervals: (real,real,integer) Y range,ints
8 5 4. NumberWidth, NumberDecimals: (integer)
1 2 5. Xcolumn, Ycolumn: (integer) column numbers for X and Y data.
10 10 6. Xsize, Ysize: (real) plotting area, cm
3 7 7. Xcorner, Ycorner: (real) lower left corner of the plotting area, cm.
10 10 2 2 8. X/YDisplayIntervals X/YDisplaySubIntervals
8 8 9. xwidth, ywidth: (integer) axis number width
0 0 10. xdecimal, ydecimal: (integer) axis number decimals
g 0.9 11. background: b = black, g = grey, w = white, c = colorful (debug),
c 0 100 12. cutofftype [c,f,C,F] cutoffvalue(min and max)
0.8 0.8 13. shrinkfactorX, shrinkfactorY (real)
X axis label
Y axis label
c 16. cog: color or grey plot
5 17. keyintervals: # of boxes in the key (not including the zero)
n 18. keytype (character): f: fraction of maximum, n: raw number.
10.2 19. keyX: X coordinate of the lower left corner of the key (cm)
0.1 20. keyY: Y coordinate of the lower left corner of the key (cm)
0.5 21. keyXsize: X size of key boxes (cm)
1.0 22. keyYsize: Y size of key boxes (cm)
0.8 23. keyshrinkfactor: between 0 and 1: box shrink.
0.005 24. thelinewidth: the width of a line around each key box (cm)
1 25. keydecimals: number of decimal places for the key
12 26. keyfontsize: the font size for the key numbers
p 1.50 2.50 1.50 1.50 edgecontrol, edgeleft, edgeright, edgelow, edgehigh cm
- 0 0 28. findpeak(l), startX, startY, SearchRange | maxpeak(m), BinMax
see also
Example data file (copy to 'data' to use): denplo.data
Example Parameter file: denplop
Given these two files, you can run denplo. To do this:
cp denplo.data data
denplo
cp denploxyin xyin
cp denploxyplom xyplom
cp denploxyplop xyplop
followed by running xyplo.p :
xyplo
The final results use the general plotting program: xyplo.p
The resulting example density plot is:
--------------------------------------
a larger example, with large key scale: denplop.ri-example
--------------------------------------
Information about PostScript:
https://alum.mit.edu/www/toms/postscript.html
This describes how to convert from PostScript to PDF.
Program that describes label controls: makelogo.p
See bugs for further information on this partially implemented
feature.
How to make a movie:
https://alum.mit.edu/www/toms/paper/ev/movie/
Related density program: denri.p
Information about the color hue formula: diana.p xyplo.p
author
Thomas Dana Schneider
bugs
Smarter crosshairs: xyplo needs an upgrade so that the crosshairs
can be put in for x and y and independently the x and y axes.
Then this program could control them.
One could implement strings like '\c' within the axes labels to
produce data counts into the labels. (A mechanism like that in
makelogo could be used.)
\t total counts
\b maximum bin count
\i start italics and end italics
The function in makelogo is putreal, inside module
makelogo.postscriptstring in makelogo.p. This routine is now in
the program but not fully integrated so \t and \b are not available
yet. You can, however, do italics and special symbols;
instructions are in the makelogo.p program.
technical notes
Constants set in the program:
maxValue is the largest number of allowed bins allowed on each axis.
Postscript hue colors range from red (at 0) to red (at 1). To
avoid this ambiguity, only part of the hue range is used. I have
found that this formula is useful for 0 <= r <= 1: hue := 0.84*r +
0.16. See diana.p and xyplo.p module pic.setcolor. The
denploxyplom has this correction built in since the xyplom is not
color corrected. For this reason, the values in the color scale in
denploxyplom will not match those in the denploxyin. However, when
plotted with xyplo they are identical.
The edge control method is from xyplo.p.
*)
(* end module describe.denplo *)
{This manual page was created by makman 1.45}
{created by htmlink 1.62}