(FILECREATED " 2-Apr-86 23:55:17" {QV}<IDL>SOURCES>IDLPLOT.;36 84777
changes to: (FNS BOXPLOT.MOVE BOXPLOT.COMPUTETICS BOXPLOT.DELETE FLIPBOX HISTOGRAM.DRAW
SCATTERPLOT.REGRESS SCATTERPLOT.RUNNINGAVERAGE SCATTERPLOT.RUNNINGREGRESS)
previous date: " 2-Apr-86 23:10:40" {QV}<IDL>SOURCES>IDLPLOT.;35)
(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT IDLPLOTCOMS)
(RPAQQ IDLPLOTCOMS [(FNS ADDCURVESTOPLOT ADDCURVETOPLOT ADDFILLEDRECTANGLESTOPLOT ADDLINESTOPLOT
ADDPOINTSTOPLOT ADDPOLYGONSTOPLOT ADDPOLYGONTOPLOT BOXPLOTS
BOXPLOT.COMPAREFN BOXPLOT.COMPUTETICS BOXPLOT.DELETE BOXPLOT.LABEL
BOXPLOT.MOVE BOXPLOT.WHENADDEDFN BOXPLOT.WHENDELETEDFN BOXPLOT.HISTOGRAM
BOXPLOT.MAKEBOX BOXPLOT.SUMMARY COPYBOXPLOT COPYHISTOGRAM COPYSCATTERPLOT
FIRSTHIDDENLEVLABEL FLIPBOX GETHIDDENLEVLABELS GETLETTERVALUES
GETSUMMARYWINDOW GETVALUEATDEPTH HISTOGRAM HISTOGRAM.BOXSUMMARY
HISTOGRAM.CHANGEBINS HISTOGRAM.COMPUTEMULT HISTOGRAM.DELETEQUANTILES
HISTOGRAM.DISPLAYQUANTILES HISTOGRAM.DRAW HISTOGRAM.INTSCALEFN
HISTOGRAM.INTTICFN HISTOGRAM.MAKEBININTERVAL HISTOGRAM.RESET
HISTOGRAM.SUMMARY HISTOGRAM.TICFN HISTOGRAM.VALUES LETTER.VALUE.DISPLAY
MAKEBOXOBJECT SCATTERPLOT SCATTERPLOT.POINTCOORDS
SCATTERPLOT.POINTSORCURVES SCATTERPLOT.REGRESS SCATTERPLOT.REGRESSSUMMARY
SCATTERPLOT.RUNNINGAVERAGE SCATTERPLOT.RUNNINGREGRESS
SCATTERPLOT.SMOOTHEDVALUE SCATTERPLOT.WORLDCOORD SUMMARY.REPAINTFN
SUMMARY.RESHAPEFN SUMMARYWINDOW.PRINT)
(RECORDS HISTOGRAM.BINS LETTERVALUES)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
(NLAML)
(LAMA BOXPLOTS])
(DEFINEQ
(ADDCURVESTOPLOT
[ULAMBDA ((PLOT PLOT)
(Y (ONEOF VECTOR MATRIX))
(X (ONEOF NIL VECTOR MATRIX))
(CURVELABEL (ONEOF NIL LABEL STRINGP))
(CURVEWIDTH (ONEOF NIL FIXP))
(CURVEMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 22:48")
(PROG (CURVEOBJECTS)
(DECLARE (SPECVARS CURVEOBJECTS))
(EAPPLY* (FUNCTION ADDCURVETOPLOT)
(QUOTE (NIL VECTOR VECTOR NIL NIL NIL NIL))
PLOT Y X CURVELABEL CURVEWIDTH CURVEMENU NODRAWFLG)
(RETURN (DREVERSE CURVEOBJECTS)))])
(ADDCURVETOPLOT
[DLAMBDA ((PLOT PLOT)
(Y VECTOR)
(X (ONEOF NIL VECTOR))
(CURVELABEL (ONEOF NIL LABEL STRINGP))
(CURVEWIDTH (ONEOF NIL FIXP))
(CURVEMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 22:48")
(* If (NULL X) then Plots vector Y against 1->N)
(LET* [(YROW (CONV.ROWSCALAR Y))
(XROW (if (NULL X)
then (GENROW 1 (fetch NELTS of YROW))
else (CONV.ROWSCALAR X]
(if (HASNILS YROW)
then (UERROR "NIL in Y vector"))
(if (HASNILS XROW)
then (UERROR "NIL in X vector"))
(if (NOT (IEQP (fetch NELTS of XROW)
(fetch NELTS of YROW)))
then (UERROR "Unequal length vectors"))
(push CURVEOBJECTS (LET* ((L (fetch NELTS of YROW))
(YLAB (if (type? SELARRAY Y)
then (FIRSTHIDDENLEVLABEL Y)
else (GETDIMLAB Y 1)))
[XLAB (if X
then (if (type? SELARRAY X)
then (FIRSTHIDDENLEVLABEL X)
else (GETDIMLAB X 1]
[POSITIONS (for I to L collect (create POSITION
XCOORD ←(
GETRELT
XROW I)
YCOORD ←(
GETRELT
YROW I]
(LABEL (OR CURVELABEL YLAB XLAB)))
(PLOTCURVE PLOT POSITIONS LABEL CURVEWIDTH CURVEMENU NODRAWFLG)
))
NIL)])
(ADDFILLEDRECTANGLESTOPLOT
[ULAMBDA ((PLOT PLOT)
(RECTANGLES (ONEOF VECTOR MATRIX))
(RECTANGLELABELS (ONEOF NIL LABEL STRINGP LISTP))
(RECTANGLEWIDTH (ONEOF NIL FIXP))
(RECTANGLETEXTURE [ONEOF NIL (FIXP (SATISFIES (TEXTUREP RECTANGLETEXTURE])
(RECTANGLEMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 22:50")
[PROG ((RECTANGLEKEEPS (OR (CAR (fetch KEEPS of RECTANGLES))
1))
(RECTANGLESHAPE (fetch SHAPE of RECTANGLES)))
(if (type? VECTOR RECTANGLES)
then (if (NOT (EQP (GETRELT RECTANGLESHAPE 1)
4))
then (UERROR "MUST BE A VECTOR OF LENGTH 4"))
else (if (OR (AND (EQP RECTANGLEKEEPS 1)
(NOT (EQP (GETRELT RECTANGLESHAPE 2)
4)))
(NOT (EQP (GETRELT RECTANGLESHAPE 1)
4)))
then (UERROR "MUST HAVE LENGTH 4 IN THE UNKEPT DIMEMSION")))
(RETURN (bind NEXTVECTOR VECTORLABEL for I from 1
to (if (type? VECTOR RECTANGLES)
then 1
elseif (EQP RECTANGLEKEEPS 1)
then (GETRELT (fetch SHAPE of RECTANGLES)
1)
else (GETRELT (fetch SHAPE of RECTANGLES)
2))
collect [SETQ NEXTVECTOR (if (type? VECTOR RECTANGLES)
then RECTANGLES
elseif (EQP RECTANGLEKEEPS 1)
then (AT RECTANGLES (LIST I ALL))
else (AT RECTANGLES (LIST ALL I]
[SETQ VECTORLABEL (OR (if (LISTP RECTANGLELABELS)
then (CAR RECTANGLELABELS)
else RECTANGLELABELS)
(if (type? SELARRAY NEXTVECTOR)
then (FIRSTHIDDENLEVLABEL
NEXTVECTOR]
(if (LISTP RECTANGLELABELS)
then (SETQ RECTANGLELABELS (CDR RECTANGLELABELS)))
(LET* ((ROWVECTOR (CONV.ROWSCALAR NEXTVECTOR))
(LEFT (GETRELT ROWVECTOR 1))
(BOTTOM (GETRELT ROWVECTOR 2))
(WIDTH (GETRELT ROWVECTOR 3))
(HEIGHT (GETRELT ROWVECTOR 4)))
(PLOTFILLEDRECTANGLE PLOT LEFT BOTTOM WIDTH HEIGHT
VECTORLABEL RECTANGLETEXTURE
RECTANGLEWIDTH RECTANGLEMENU
NODRAWFLG]])
(ADDLINESTOPLOT
[ULAMBDA ((PLOT PLOT)
(LINES (ONEOF VECTOR MATRIX))
(LINELABELS (ONEOF NIL LABEL STRINGP LISTP))
(LINEWIDTH (ONEOF NIL FIXP))
(LINEMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 22:51")
[PROG ((LINEKEEPS (OR (CAR (fetch KEEPS of LINES))
1))
(LINESHAPE (fetch SHAPE of LINES)))
(if (type? VECTOR LINES)
then (if (NOT (EQP (GETRELT LINESHAPE 1)
2))
then (UERROR "MUST BE A VECTOR OF LENGTH 2"))
else (if (OR (AND (EQP LINEKEEPS 1)
(NOT (EQP (GETRELT LINESHAPE 2)
2)))
(NOT (EQP (GETRELT LINESHAPE 1)
2)))
then (UERROR "MUST HAVE LENGTH 2 IN THE UNKEPT DIMEMSION")))
(RETURN (bind NEXTVECTOR VECTORLABEL for I from 1
to (if (type? VECTOR LINES)
then 1
elseif (EQP LINEKEEPS 1)
then (GETRELT (fetch SHAPE of LINES)
1)
else (GETRELT (fetch SHAPE of LINES)
2))
collect [SETQ NEXTVECTOR (if (type? VECTOR LINES)
then LINES
elseif (EQP LINEKEEPS 1)
then (AT LINES (LIST I ALL))
else (AT LINES (LIST ALL I]
[SETQ VECTORLABEL (OR (if (LISTP LINELABELS)
then (CAR LINELABELS)
else LINELABELS)
(if (type? SELARRAY NEXTVECTOR)
then (FIRSTHIDDENLEVLABEL
NEXTVECTOR]
(if (LISTP LINELABELS)
then (SETQ LINELABELS (CDR LINELABELS)))
(PROG ((ROWVECTOR (CONV.ROWSCALAR NEXTVECTOR))
SLOPE CONSTANT)
(SETQ SLOPE (GETRELT ROWVECTOR 1))
(SETQ CONSTANT (GETRELT ROWVECTOR 2))
(if (NULL CONSTANT)
then (UERROR "CONSTANT must be a number"))
(RETURN (PLOTLINE PLOT SLOPE CONSTANT VECTORLABEL
LINEWIDTH LINEMENU NODRAWFLG]])
(ADDPOINTSTOPLOT
[ULAMBDA ((PLOT PLOT)
(Y VECTOR)
(X (ONEOF NIL VECTOR))
(POINTSYMBOL (ONEOF NIL BITMAP))
(POINTLABELS (ONEOF NIL LABEL STRINGP LISTP))
(POINTMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ NIL T)))
(* jop: "13-Feb-86 22:52")
(* If (NULL X) then Plots vector YROW against 1->N)
(LET* [(YROW (CONV.ROWSCALAR Y))
(XROW (if (NULL X)
then (GENROW 1 (fetch NELTS of YROW))
else (CONV.ROWSCALAR X]
(if (ZEROP (fetch NELTS of YROW))
then (UERROR "Empty input sequence"))
(if (HASNILS YROW)
then (UERROR "NIL in Y vector"))
(if (HASNILS XROW)
then (UERROR "NIL in X vector"))
(if (NOT (IEQP (fetch NELTS of XROW)
(fetch NELTS of YROW)))
then (UERROR "Unequal length vectors"))
(LET* [(L (fetch NELTS of YROW))
[POSITIONS (for I to L collect (create POSITION
XCOORD ←(GETRELT XROW I)
YCOORD ←(GETRELT YROW I]
(LABELS (OR POINTLABELS (for I to L
collect (OR (GETLEVLAB Y 1 I)
(if X
then (GETLEVLAB X 1 I))
I]
(PLOTPOINTS PLOT POSITIONS LABELS POINTSYMBOL POINTMENU NODRAWFLG)))])
(ADDPOLYGONSTOPLOT
[ULAMBDA ((PLOT PLOT)
(Y (ONEOF VECTOR MATRIX))
(X (ONEOF NIL VECTOR MATRIX))
(POLYGONLABEL (ONEOF NIL LABEL STRINGP))
(POLYGONWIDTH (ONEOF NIL FIXP))
(POLYGONMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 22:54")
(PROG (POLYGONOBJECTS)
(DECLARE (SPECVARS POLYGONOBJECTS))
(EAPPLY* (FUNCTION ADDPOLYGONTOPLOT)
(QUOTE (NIL VECTOR VECTOR NIL NIL NIL NIL))
PLOT Y X POLYGONLABEL POLYGONWIDTH POLYGONMENU NODRAWFLG)
(RETURN (DREVERSE POLYGONOBJECTS)))])
(ADDPOLYGONTOPLOT
[DLAMBDA ((PLOT PLOT)
(Y VECTOR)
(X (ONEOF NIL VECTOR))
(POLYGONLABEL (ONEOF NIL LABEL STRINGP))
(POLYGONWIDTH (ONEOF NIL FIXP))
(POLYGONMENU (ONEOF NIL LITATOM LISTP MENU))
(NODRAWFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 23:05")
(* If (NULL X) then Plots vector Y against 1->N)
(LET* [(YROW (CONV.ROWSCALAR Y))
(XROW (if (NULL X)
then (GENROW 1 (fetch NELTS of YROW))
else (CONV.ROWSCALAR X]
(if (HASNILS YROW)
then (UERROR "NIL in Y vector"))
(if (HASNILS XROW)
then (UERROR "NIL in X vector"))
(if (NOT (IEQP (fetch NELTS of XROW)
(fetch NELTS of YROW)))
then (UERROR "Unequal length vectors"))
(push POLYGONOBJECTS (LET* ((L (fetch NELTS of YROW))
(YLAB (if (type? SELARRAY Y)
then (FIRSTHIDDENLEVLABEL Y)
else (GETDIMLAB Y 1)))
[XLAB (if X
then (if (type? SELARRAY X)
then (FIRSTHIDDENLEVLABEL X)
else (GETDIMLAB X 1]
[POSITIONS (for I to L collect (create POSITION
XCOORD ←(
GETRELT
XROW I)
YCOORD ←(
GETRELT
YROW I]
(LABEL (OR POLYGONLABEL YLAB XLAB)))
(PLOTPOLYGON PLOT POSITIONS LABEL POLYGONWIDTH POLYGONMENU
NODRAWFLG)))
NIL)])
(BOXPLOTS
[LAMBDA BATCHES (* jop: " 2-Apr-86 16:16")
(* * Made NO SPREAD to accomodate batches of unequal size)
(if [for I from 1 to BATCHES thereis (NOT (type? VECTOR (ARG BATCHES I]
then (HELP "All arguments must be VECTORS"))
(RESETLST (RESETSAVE (SETCURSOR WAITINGCURSOR)
(LIST (FUNCTION SETCURSOR)
DEFAULTCURSOR))
(LET* ((BOXPLOT (CREATEPLOT))
(BOXMENU (LIST (LIST (QUOTE Summary)
(FUNCTION BOXPLOT.SUMMARY)
"Printout quantile summary for this batch"
(LIST (QUOTE SUBITEMS)
(LIST (QUOTE Long)
(LIST (FUNCTION BOXPLOT.SUMMARY)
T)
"Long summary outout")
(LIST (QUOTE Short)
(FUNCTION BOXPLOT.SUMMARY)
"Short summary output")))
(LIST (QUOTE Label)
(FUNCTION BOXPLOT.LABEL)
"Change label for this batch")
(LIST (QUOTE Histogram)
(FUNCTION BOXPLOT.HISTOGRAM)
"Generate a histogram for this batch")
(LIST (QUOTE Move)
(FUNCTION BOXPLOT.MOVE)
"Move boxplot")
(LIST (QUOTE Delete)
(FUNCTION BOXPLOT.DELETE)
"Delete boxplot from batch")))
(XLABEL "Batches")
(PTITLE "Boxplots")
BOXES)
(PLOTMENUITEMS BOXPLOT (QUOTE BOXMENU)
BOXMENU)
(PLOTTICMETHOD BOXPLOT (QUOTE BOTTOM)
(QUOTE BOXPLOT.COMPUTETICS)
T)
(PLOTTICMETHOD BOXPLOT (QUOTE TOP)
(QUOTE BOXPLOT.COMPUTETICS)
T)
(PLOTTICS BOXPLOT (QUOTE BOTTOM)
T T)
(PLOTTICS BOXPLOT (QUOTE LEFT)
T T)
(PLOTLABEL BOXPLOT (QUOTE BOTTOM)
XLABEL T)
(PLOTLABEL BOXPLOT (QUOTE TOP)
PTITLE T)
(SETQ BOXES (bind (BOXLEFT ← .2)
(BOXRIGHT ← .8)
BOX for I from 1 to BATCHES
collect (SETQ BOX (BOXPLOT.MAKEBOX (ARG BATCHES I)
BOXLEFT BOXRIGHT
(CONCAT "BATCH " I))
)
(SETQ BOXLEFT (PLUS BOXLEFT 1))
(SETQ BOXRIGHT (PLUS BOXRIGHT 1))
BOX))
(for BOX in BOXES do (ADDPLOTOBJECT BOX BOXPLOT T))
(REDRAWPLOTWINDOW BOXPLOT)
BOXPLOT])
(BOXPLOT.COMPAREFN
[LAMBDA (BOX1 BOX2) (* jop: "13-Feb-86 18:31")
(* T if BOX1 is "less" then BOX2)
(LESSP (PLOTOBJECTPROP BOX1 (QUOTE BOXLEFT))
(PLOTOBJECTPROP BOX2 (QUOTE BOXLEFT])
(BOXPLOT.COMPUTETICS
[DLAMBDA ((MARGIN LITATOM)
(PLOTSCALE PLOTSCALE)
(BOXPLOT PLOT))
(* edited: " 2-Apr-86 23:45")
(* * comment)
[for BOX in (PLOTPROP BOXPLOT (QUOTE PLOTOBJECTS)) when (AND (PLOTOBJECTSUBTYPE?
COMPOUND BOX)
(EQ (COMPOUNDSUBTYPE
BOX)
(QUOTE BOX)))
collect (CONS (FQUOTIENT (FPLUS (PLOTOBJECTPROP BOX (QUOTE BOXRIGHT))
(PLOTOBJECTPROP BOX (QUOTE BOXLEFT)))
2)
(PLOTOBJECTPROP BOX (QUOTE OBJECTLABEL]])
(BOXPLOT.DELETE
[DLAMBDA ((BOX COMPOUNDOBJECT)
(BOXPLOT PLOT))
(* edited: " 2-Apr-86 23:45")
(PROG ((BOXES (for OBJECT in (PLOTPROP BOXPLOT (QUOTE PLOTOBJECTS))
when (AND (PLOTOBJECTSUBTYPE? COMPOUND OBJECT)
(EQ (COMPOUNDSUBTYPE OBJECT)
(QUOTE BOX)))
collect OBJECT)))
[SETQ BOXES (DREMOVE BOX (SORT BOXES (FUNCTION BOXPLOT.COMPAREFN]
(* DELETE BOX from display list of BOXPLOT)
(first (DELETEPLOTOBJECT BOX BOXPLOT T T) for POINT
in (APPEND (PLOTOBJECTPROP BOX (QUOTE LOWEROUTSIDE))
(PLOTOBJECTPROP BOX (QUOTE UPPEROUTSIDE)))
do (DELETEPLOTOBJECT POINT BOXPLOT T T))
(bind (LEFTCOUNTER ← .2)
DX for BOXOBJECT in BOXES
do (if [NOT (EQP LEFTCOUNTER (PLOTOBJECTPROP BOXOBJECT (QUOTE BOXLEFT]
then [SETQ DX (DIFFERENCE LEFTCOUNTER (PLOTOBJECTPROP BOXOBJECT
(QUOTE
BOXLEFT]
(TRANSLATEPLOTOBJECT BOXOBJECT DX 0.0 BOXPLOT T)
(for POINT in (PLOTOBJECTPROP BOXOBJECT (QUOTE LOWEROUTSIDE))
do (TRANSLATEPLOTOBJECT POINT DX 0.0 BOXPLOT T))
(for POINT in (PLOTOBJECTPROP BOXOBJECT (QUOTE UPPEROUTSIDE))
do (TRANSLATEPLOTOBJECT POINT DX 0.0 BOXPLOT T))
(PLOTOBJECTPROP BOXOBJECT (QUOTE BOXLEFT)
LEFTCOUNTER)
(PLOTOBJECTPROP BOXOBJECT (QUOTE BOXRIGHT)
(PLUS LEFTCOUNTER .6)))
(fadd LEFTCOUNTER 1.0))
(RESCALEPLOT BOXPLOT (QUOTE X)
T)
(REDRAWPLOTWINDOW BOXPLOT))])
(BOXPLOT.LABEL
[DLAMBDA ((BOX COMPOUNDOBJECT)
(BOXPLOT PLOT))
(* edited: "16-Feb-86 17:54")
(LET* ((LABEL (PLOTOBJECTPROP BOX (QUOTE OBJECTLABEL)))
(PLOTPROMPT (fetch PLOTPROMPTWINDOW of BOXPLOT)))
(TERPRI PLOTPROMPT)
[SETQ LABEL (PROMPTFORWORD "Type a new label: " LABEL "Type a label" PLOTPROMPT NIL NIL
(CHARCODE (EOL LF ESCAPE TAB]
(if LABEL
then (PLOTOBJECTPROP BOX (QUOTE OBJECTLABEL)
LABEL)
(REDRAWPLOTWINDOW BOXPLOT)))])
(BOXPLOT.MOVE
[DLAMBDA ((BOX COMPOUNDOBJECT)
(BOXPLOT PLOT))
(* edited: " 2-Apr-86 23:46")
(* *)
(PROG ((FIRSTBOX BOX)
(BOXES (for OBJECT in (PLOTPROP BOXPLOT (QUOTE PLOTOBJECTS))
when (AND (PLOTOBJECTSUBTYPE? COMPOUND OBJECT)
(EQ (COMPOUNDSUBTYPE OBJECT)
(QUOTE BOX)))
collect OBJECT))
NEWXPOSITION SECONDBOX SENSELEFT SWAPPEDBOXES)
(SORT BOXES (FUNCTION BOXPLOT.COMPAREFN))
(PLOTPROMPT "Select a new position" BOXPLOT)
(SETQ NEWXPOSITION (STREAMTOWORLDX (fetch XCOORD of (GETPOSITION (fetch
PLOTWINDOW
of BOXPLOT))
)
(fetch PLOTWINDOWVIEWPORT of BOXPLOT)))
[SETQ SECONDBOX (OR (for BOXOBJ in BOXES thereis (GEQ (PLOTOBJECTPROP
BOXOBJ
(QUOTE BOXRIGHT))
NEWXPOSITION))
(CAR (LAST BOXES]
(if (NEQ FIRSTBOX SECONDBOX)
then (SETQ SENSELEFT (LESSP NEWXPOSITION (FQUOTIENT
(FPLUS (PLOTOBJECTPROP SECONDBOX
(QUOTE BOXRIGHT))
(PLOTOBJECTPROP SECONDBOX
(QUOTE BOXLEFT)))
2)))
[SETQ SWAPPEDBOXES (LET* ([FIRSTLEFTOFSECOND (LESSP (PLOTOBJECTPROP
FIRSTBOX
(QUOTE BOXLEFT))
(PLOTOBJECTPROP
SECONDBOX
(QUOTE BOXLEFT]
(LESSPAIR (if FIRSTLEFTOFSECOND
then FIRSTBOX
else SECONDBOX))
(GREATERPAIR (if FIRSTLEFTOFSECOND
then SECONDBOX
else FIRSTBOX))
(FIRSTPART (for BOXOBJ in BOXES
while (LESSP
(PLOTOBJECTPROP
BOXOBJ
(QUOTE BOXLEFT))
(PLOTOBJECTPROP
LESSPAIR
(QUOTE BOXLEFT)))
collect BOXOBJ))
(SECONDPART (for BOXOBJ
in (CDR (MEMB LESSPAIR BOXES))
while (LESSP
(PLOTOBJECTPROP
BOXOBJ
(QUOTE BOXLEFT))
(PLOTOBJECTPROP
GREATERPAIR
(QUOTE BOXLEFT)))
collect BOXOBJ))
(THIRDPART (for BOXOBJ
in (CDR (MEMB GREATERPAIR
BOXES))
collect BOXOBJ)))
(if FIRSTLEFTOFSECOND
then (APPEND FIRSTPART SECONDPART
(if SENSELEFT
then (LIST FIRSTBOX
SECONDBOX)
else (LIST SECONDBOX
FIRSTBOX))
THIRDPART)
else (APPEND FIRSTPART
(if SENSELEFT
then (LIST FIRSTBOX
SECONDBOX)
else (LIST SECONDBOX
FIRSTBOX))
SECONDPART THIRDPART]
(bind (LEFTCOUNTER ← .2)
DX for BOXOBJ in SWAPPEDBOXES
do (if [NOT (EQP LEFTCOUNTER (PLOTOBJECTPROP BOXOBJ (QUOTE
BOXLEFT]
then [SETQ DX (DIFFERENCE LEFTCOUNTER (PLOTOBJECTPROP
BOXOBJ
(QUOTE BOXLEFT]
(TRANSLATEPLOTOBJECT BOXOBJ DX 0.0 BOXPLOT T)
(for POINT in (PLOTOBJECTPROP BOXOBJ (QUOTE
LOWEROUTSIDE))
do (TRANSLATEPLOTOBJECT POINT DX 0.0 BOXPLOT T))
(for POINT in (PLOTOBJECTPROP BOXOBJ (QUOTE
UPPEROUTSIDE))
do (TRANSLATEPLOTOBJECT POINT DX 0.0 BOXPLOT T))
(PLOTOBJECTPROP BOXOBJ (QUOTE BOXLEFT)
LEFTCOUNTER)
(PLOTOBJECTPROP BOXOBJ (QUOTE BOXRIGHT)
(PLUS LEFTCOUNTER .6)))
(fadd LEFTCOUNTER 1.0))
(REDRAWPLOTWINDOW BOXPLOT)))])
(BOXPLOT.WHENADDEDFN
[LAMBDA (BOX PLOT NODRAWFLG) (* jop: " 2-Apr-86 16:16")
(* *)
(PROG [(LOWEROUTSIDE (PLOTOBJECTPROP BOX (QUOTE LOWEROUTSIDE)))
(UPPEROUTSIDE (PLOTOBJECTPROP BOX (QUOTE UPPEROUTSIDE]
(for POINT in LOWEROUTSIDE do (ADDPLOTOBJECT POINT PLOT NODRAWFLG))
(for POINT in UPPEROUTSIDE do (ADDPLOTOBJECT POINT PLOT NODRAWFLG])
(BOXPLOT.WHENDELETEDFN
[LAMBDA (BOX PLOT NODRAWFLG) (* jop: " 2-Apr-86 16:18")
(* *)
(PROG [(LOWEROUTSIDE (PLOTOBJECTPROP BOX (QUOTE LOWEROUTSIDE)))
(UPPEROUTSIDE (PLOTOBJECTPROP BOX (QUOTE UPPEROUTSIDE]
(for POINT in LOWEROUTSIDE do (DELETEPLOTOBJECT POINT PLOT NODRAWFLG T))
(for POINT in UPPEROUTSIDE do (DELETEPLOTOBJECT POINT PLOT NODRAWFLG T])
(BOXPLOT.HISTOGRAM
[DLAMBDA ((BOX COMPOUNDOBJECT)
(BOXPLOT PLOT))
(* jop: "13-Feb-86 18:11")
(HISTOGRAM (PLOTOBJECTPROP BOX (QUOTE BATCH)))])
(BOXPLOT.MAKEBOX
[DLAMBDA ((BATCH VECTOR)
(BOXLEFT FLOATP)
(BOXRIGHT FLOATP)
(DEFAULTLABEL (ONEOF NIL ATOM STRINGP))
(RBATCH (ONEOF NIL ROWSCALAR))
(OBATCH (ONEOF NIL ROWINT)))
(* jop: "13-Feb-86 22:24")
(* *)
(if (OR (NULL RBATCH)
(NULL OBATCH))
then (SETQ RBATCH (CONV.ROWSCALAR BATCH))
(SETQ OBATCH (ORDERROW RBATCH)))
(LET* ((LETTERVALUES (GETLETTERVALUES RBATCH OBATCH))
(N (fetch N of LETTERVALUES))
(BOXMIDDLE (FQUOTIENT (PLUS BOXLEFT BOXRIGHT)
2))
[LINNERFENCE (FDIFFERENCE (fetch LOWERFOURTH of LETTERVALUES)
(TIMES 1.5 (fetch FOURTHSPREAD of LETTERVALUES]
[UINNERFENCE (FPLUS (fetch UPPERFOURTH of LETTERVALUES)
(TIMES 1.5 (fetch FOURTHSPREAD of LETTERVALUES]
[LADJACENT (for I from (PLOT.CEILING (fetch FOURTHDEPTH of LETTERVALUES))
to 1 by -1 until (LESSP (GETRELT RBATCH (GETRELT OBATCH I))
LINNERFENCE)
finally (RETURN (ADD1 I]
[UADJACENT (for I from [PLOT.FLOOR (PLUS 1 (DIFFERENCE N (fetch FOURTHDEPTH
of LETTERVALUES]
to N until (GREATERP (GETRELT RBATCH (GETRELT OBATCH I))
UINNERFENCE)
finally (RETURN (SUB1 I]
[LABEL (OR (if (type? SELARRAY BATCH)
then (FIRSTHIDDENLEVLABEL BATCH))
DEFAULTLABEL
(CONCAT "Array " (SERIALNUMBER BATCH]
(BOXOBJECT (MAKEBOXOBJECT BOXLEFT BOXRIGHT (GETRELT RBATCH (GETRELT OBATCH LADJACENT)
)
(GETRELT RBATCH (GETRELT OBATCH UADJACENT))
LETTERVALUES LABEL)))
(PLOTOBJECTPROP BOXOBJECT (QUOTE BATCH)
BATCH)
(PLOTOBJECTPROP BOXOBJECT (QUOTE BOXLEFT)
BOXLEFT)
(PLOTOBJECTPROP BOXOBJECT (QUOTE BOXRIGHT)
BOXRIGHT)
(PLOTOBJECTPROP BOXOBJECT (QUOTE LETTERVALUES)
LETTERVALUES)
(PLOTOBJECTPROP BOXOBJECT (QUOTE LADJACENT)
(GETRELT RBATCH (GETRELT OBATCH LADJACENT)))
(PLOTOBJECTPROP BOXOBJECT (QUOTE UADJACENT)
(GETRELT RBATCH (GETRELT OBATCH UADJACENT)))
[PLOTOBJECTPROP BOXOBJECT (QUOTE LOWEROUTSIDE)
(for I from (SUB1 LADJACENT) to 1 by -1
collect (CREATEPOINT (create POSITION
XCOORD ← BOXMIDDLE
YCOORD ←(GETRELT RBATCH
(GETRELT
OBATCH I)))
(OR (GETLEVLAB BATCH 1 (GETRELT OBATCH
I))
(GETRELT OBATCH I]
[PLOTOBJECTPROP BOXOBJECT (QUOTE UPPEROUTSIDE)
(bind POINT for I from (ADD1 UADJACENT) to N
collect (CREATEPOINT (create POSITION
XCOORD ← BOXMIDDLE
YCOORD ←(GETRELT RBATCH
(GETRELT
OBATCH I)))
(OR (GETLEVLAB BATCH 1 (GETRELT OBATCH
I))
(GETRELT OBATCH I]
(PLOTOBJECTPROP BOXOBJECT (QUOTE COPYFN)
(FUNCTION COPYBOXPLOT))
(PLOTOBJECTPROP BOXOBJECT (QUOTE WHENADDEDFN)
(FUNCTION BOXPLOT.WHENADDEDFN))
(PLOTOBJECTPROP BOXOBJECT (QUOTE WHENDELETEDFN)
(FUNCTION BOXPLOT.WHENDELETEDFN))
BOXOBJECT)])
(BOXPLOT.SUMMARY
[DLAMBDA ((OBJECT COMPOUNDOBJECT)
(BOXPLOT PLOT)
(LONGFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 17:58")
(SUMMARYWINDOW.PRINT BOXPLOT (LIST (CONCAT "Batch " (PLOTOBJECTPROP OBJECT (QUOTE
OBJECTLABEL)))
(LIST (FUNCTION LETTER.VALUE.DISPLAY)
(PLOTOBJECTPROP OBJECT (QUOTE LETTERVALUES))
LONGFLG)))])
(COPYBOXPLOT
[DLAMBDA ((NEWBOX COMPOUNDOBJECT)
(OLDBOX COMPOUNDOBJECT)
(BOXPLOT PLOT)
(PROPNAME LITATOM))
(* jop: "13-Feb-86 22:29")
(* * Copies the prop list of OLDBOX to NEWBOX)
(SELECTQ PROPNAME
(BATCH (PLOTOBJECTPROP OLDBOX (QUOTE BATCH)))
(LETTERVALUES (PLOTOBJECTPROP OLDBOX (QUOTE LETTERVALUES)))
NIL)])
(COPYHISTOGRAM
[DLAMBDA ((NEWHIST PLOT)
(OLDHIST PLOT)
(PROPNAME LITATOM))
(* jop: "13-Feb-86 22:21")
(* * Copies the prop PROPNAME of OLDHIST to NEWHIST)
(SELECTQ PROPNAME
(N (PLOTPROP OLDHIST (QUOTE N)))
(NBINS (PLOTPROP OLDHIST (QUOTE NBINS)))
(BATCH (* OK to share the original array)
(PLOTPROP OLDHIST (QUOTE BATCH)))
(RBATCH (PLOTPROP OLDHIST (QUOTE RBATCH)))
(OBATCH (PLOTPROP OLDHIST (QUOTE OBATCH)))
(LETTERVALUES (PLOTPROP OLDHIST (QUOTE LETTERVALUES)))
(BININTERVAL (PLOTPROP OLDHIST (QUOTE BININTERVAL)))
(BINEDNUMBERS (PLOTPROP OLDHIST (QUOTE BINEDNUMBERS)))
(MARKS (PLOTPROP OLDHIST (QUOTE MARKS)))
(QUANTILEDISPLAY (PLOTPROP OLDHIST (QUOTE QUANTILEDISPLAY)))
NIL)])
(COPYSCATTERPLOT
[DLAMBDA ((NEWSCATTERPLOT PLOT)
(OLDSCATTERPLOT PLOT)
(PROPNAME LITATOM))
(* jop: " 2-Sep-85 13:59")
(* * Copies the prop list of OLDSCATTERPLOT to NEWSCATTERPLOT)
(SELECTQ PROPNAME
[REGRESSLINE (LET [(OLDREGRESS (PLOTPROP OLDSCATTERPLOT (QUOTE REGRESSLINE]
(if OLDREGRESS
then (for NEWOBJECT in (fetch PLOTOBJECTS of NEWSCATTERPLOT)
as OLDOBJECT in (fetch PLOTOBJECTS of OLDSCATTERPLOT)
thereis (EQ OLDREGRESS OLDOBJECT]
NIL)])
(FIRSTHIDDENLEVLABEL
[DLAMBDA ((A SELARRAY)
(RETURNS LABEL))
(* jop: "11-Mar-85 14:43")
(* * Picks out first non-integer hiddenlevellabel from the list returned by GETHIDDENLEVELLABELS)
(* jop: "25-Feb-85 14:33")
(DPROG ((PAIRS (GETHIDDENLEVLABELS A) LST)
(LAB NIL LABEL)
(RETURNS LABEL))
[for P in PAIRS until (if (LITATOM (CDR P))
then (SETQ LAB (CDR P]
(RETURN LAB))])
(FLIPBOX
[LAMBDA (BOX) (* edited: " 2-Apr-86 23:47")
(* * DESTRUCTIVELY FLIPS X and Y coordinates of BOX)
(bind OBJECTDATA for OBJECT in (fetch COMPONENTS of (fetch OBJECTDATA of BOX))
do (SETQ OBJECTDATA (fetch OBJECTDATA of OBJECT))
(bind X for POINT in (if (PLOTOBJECTSUBTYPE? CURVE OBJECT)
then (fetch CURVEPOINTS of OBJECTDATA)
else (fetch POLYGONPOINTS of OBJECTDATA))
do (SETQ X (fetch XCOORD of POINT))
(replace XCOORD of POINT with (fetch YCOORD of POINT))
(replace YCOORD of POINT with X)))
(bind X POSITION for POINT in (APPEND (PLOTOBJECTPROP BOX (QUOTE LOWEROUTSIDE))
(PLOTOBJECTPROP BOX (QUOTE UPPEROUTSIDE)))
do (SETQ POSITION (fetch POINTPOSITION of (fetch OBJECTDATA of POINT)))
(SETQ X (fetch XCOORD of POSITION))
(replace XCOORD of POSITION with (fetch YCOORD of POSITION))
(replace YCOORD of POSITION with X)) (* Do surgury on the object prop list to remove
unneeded props)
(bind (PROPLST ←(fetch (PLOTOBJECT OBJECTUSERDATA) of BOX))
PTR PROPNAME PROPVALUE for PROP in (QUOTE (BATCH BOXLEFT BOXRIGHT LETTERVALUES))
do (SETQ PTR (MEMB PROP PROPLST))
(if PTR
then (SETQ PROPNAME (CAR PTR))
(SETQ PROPVALUE (CADR PTR))
(DREMOVE PROPNAME PROPLST)
(DREMOVE PROPVALUE PROPLST)))
BOX])
(GETHIDDENLEVLABELS
[DLAMBDA ((A SELARRAY)
(RETURNS LST))
(* jop: "25-Feb-85 13:54" posted: " 1-DEC-78 16:48")
(* * Looks for integer selections on the base array and returns a list of pairs (dim . lev), where dim and/or lev
may be labels or integers)
(DPROG ((AB (fetch BASEARRAY of A) SIMARRAY)
(TT (fetch TTAB of A) ROWPTR)
(TTE NIL TTELT)
(PAIRS NIL LST)
(RETURNS LST))
[for I to (fetch NELTS of TT)
do (SETQ TTE (GETRELT TT I))
(if (EQ (TTELTTYPE TTE)
(QUOTE INTEGER))
then (SETQ PAIRS (CONS (CONS (OR (GETDIMLAB AB I)
I)
(OR (GETLEVLAB AB I TTE)
TTE))
PAIRS]
(RETURN PAIRS))])
(GETLETTERVALUES
[DLAMBDA ((BATCH ROWSCALAR)
(ORDEREDBATCH (ONEOF NIL ROWINT))
(RETURNS LETTERVALUES))
(* jop: "13-Apr-85 20:22")
(* * COMPUTE the Median, Hinges, Eigths, and Extremes of BATCH)
(if (NULL ORDEREDBATCH)
then (SETQ ORDEREDBATCH (ORDERROW BATCH)))
(DPROG ((N (fetch NELTS of BATCH) FIXP)
THEN (DEPTH (FQUOTIENT (ADD1 N)
2) FLOATP)
(LETTERVALUES (create LETTERVALUES
N ← N) LETTERVALUES))
[bind UPPERCODE LOWERCODE CODEDEPTH
first (replace MEDIAN of LETTERVALUES with (GETVALUEATDEPTH BATCH ORDEREDBATCH DEPTH))
(replace MEDIANDEPTH of LETTERVALUES with DEPTH)
for CODE in (QUOTE (FOURTH EIGHTH))
do (SETQ DEPTH (FQUOTIENT (ADD1 (FIX DEPTH))
2))
(SETQ UPPERCODE (PACK* (QUOTE UPPER)
CODE))
(SETQ LOWERCODE (PACK* (QUOTE LOWER)
CODE))
(SETQ CODEDEPTH (PACK* CODE (QUOTE DEPTH)))
(RECORDACCESS LOWERCODE LETTERVALUES NIL (QUOTE REPLACE)
(GETVALUEATDEPTH BATCH ORDEREDBATCH DEPTH))
[RECORDACCESS UPPERCODE LETTERVALUES NIL (QUOTE REPLACE)
(GETVALUEATDEPTH BATCH ORDEREDBATCH (PLUS 1 (FDIFFERENCE N (FIX DEPTH]
(RECORDACCESS CODEDEPTH LETTERVALUES NIL (QUOTE REPLACE)
DEPTH)
finally (replace LOWEREXTREME of LETTERVALUES with (GETRELT BATCH (GETRELT ORDEREDBATCH 1)
))
(replace UPPEREXTREME of LETTERVALUES with (GETRELT BATCH (GETRELT ORDEREDBATCH N]
(RETURN LETTERVALUES))])
(GETSUMMARYWINDOW
[DLAMBDA ((CHARHEIGHT FIXP)
(RETURNS WINDOW))
(* jop: "13-Feb-86 16:32")
(* * RETURNS a summary window CHARHEIGHT characters (in GACHA 10) high)
(PROG ((SUMMARYWINDOW (DECODE.WINDOW.ARG (create POSITION
XCOORD ← 0
YCOORD ← 0)
100
(ITIMES CHARHEIGHT (FONTPROP
(QUOTE (GACHA 10))
(QUOTE HEIGHT)))
"SUMMARY WINDOW" NIL T)))
(WINDOWADDPROP SUMMARYWINDOW (QUOTE REPAINTFN)
(FUNCTION SUMMARY.REPAINTFN))
(WINDOWADDPROP SUMMARYWINDOW (QUOTE RESHAPEFN)
(FUNCTION SUMMARY.RESHAPEFN))
(WINDOWPROP SUMMARYWINDOW (QUOTE SCROLLFN)
(FUNCTION SCROLLBYREPAINTFN))
[WINDOWPROP SUMMARYWINDOW (QUOTE MINSIZE)
(CONS 0 (fetch HEIGHT of (WINDOWPROP SUMMARYWINDOW (QUOTE REGION]
[WINDOWPROP SUMMARYWINDOW (QUOTE MAXSIZE)
(CONS MAX.SMALLP (fetch HEIGHT of (WINDOWPROP SUMMARYWINDOW
(QUOTE REGION]
(RETURN SUMMARYWINDOW))])
(GETVALUEATDEPTH
[DLAMBDA ((ROW ROWSCALAR)
(ORDEREDROW ROWINT)
(DEPTH FLOATP)
(RETURNS SCALAR))
(* jop: "23-Sep-85 15:24")
(if (EQP (PLOT.FLOOR DEPTH)
DEPTH)
then (GETRELT ROW (GETRELT ORDEREDROW (FIX DEPTH)))
else (FQUOTIENT [PLUS (GETRELT ROW (GETRELT ORDEREDROW (PLOT.FLOOR DEPTH)))
(GETRELT ROW (GETRELT ORDEREDROW (PLOT.CEILING DEPTH]
2))])
(HISTOGRAM
[ULAMBDA ((BATCH VECTOR)
(NBINS (ONEOF NIL FIXP))
SHADE)
(* jop: " 2-Apr-86 22:24")
(RESETLST (RESETSAVE (SETCURSOR WAITINGCURSOR)
(LIST (FUNCTION SETCURSOR)
DEFAULTCURSOR))
(LET* ((HISTOGRAM (CREATEPLOT))
(BINMENU (LIST (LIST (QUOTE Values)
(FUNCTION HISTOGRAM.VALUES)
"Output values in bin")))
(RIGHTMENUITEMS (LIST (LIST (QUOTE Change% bins)
(FUNCTION HISTOGRAM.CHANGEBINS)
"Change number of bins"
(LIST (QUOTE SUBITEMS)
(LIST (QUOTE Reset)
(LIST
(FUNCTION HISTOGRAM.RESET)
T)
"Reset range and bin interval to original value")))
(LIST (QUOTE Summary)
(FUNCTION HISTOGRAM.SUMMARY)
"Attach quantile summary"
(LIST (QUOTE SUBITEMS)
(LIST (QUOTE Long)
(LIST
(FUNCTION
HISTOGRAM.SUMMARY)
T)
"Long summary")
(LIST (QUOTE Short)
(FUNCTION HISTOGRAM.SUMMARY)
"Short summary")))
(LIST (QUOTE Display% quantiles)
(FUNCTION HISTOGRAM.DISPLAYQUANTILES)
"Overlay graph of some quantiles")))
(N (GETRELT (fetch SHAPE of BATCH)
1))
(INTFLG (EQ (QUOTE INTEGER)
(AELTTYPE BATCH)))
(RBATCH (CONV.ROWSCALAR BATCH))
(OBATCH (if (HASNILS RBATCH)
then (UERROR "Batch has missing values")
else (ORDERROW RBATCH)))
[XLABEL (if (type? SELARRAY BATCH)
then (FIRSTHIDDENLEVLABEL BATCH)
else (CONCAT "ARRAY " (SERIALNUMBER BATCH]
(YLABEL "Frequency")
(PTITLE (CONCAT "Histogram of " XLABEL)))
[if (NULL NBINS)
then (SETQ NBINS (if (LESSP N 20)
then (FIX (TIMES 2 (SQRT N)))
else (FIX (TIMES 10 (PLOT.LOG10 N]
(if (NULL SHADE)
then (SETQ SHADE SHADE3))
(PLOTPROP HISTOGRAM (QUOTE N)
N)
(PLOTPROP HISTOGRAM (QUOTE NBINS)
NBINS)
(PLOTPROP HISTOGRAM (QUOTE INTFLG)
INTFLG)
(PLOTPROP HISTOGRAM (QUOTE SHADE)
(OR SHADE SHADE3))
(PLOTPROP HISTOGRAM (QUOTE BATCH)
BATCH)
(PLOTPROP HISTOGRAM (QUOTE RBATCH)
RBATCH)
(PLOTPROP HISTOGRAM (QUOTE OBATCH)
OBATCH)
(PLOTPROP HISTOGRAM (QUOTE LETTERVALUES)
(GETLETTERVALUES RBATCH OBATCH))
(* Bin the BATCH)
(PLOTTICS HISTOGRAM (QUOTE BOTTOM)
T T)
(PLOTTICS HISTOGRAM (QUOTE LEFT)
T T)
(PLOTLABEL HISTOGRAM (QUOTE BOTTOM)
XLABEL T)
(PLOTLABEL HISTOGRAM (QUOTE LEFT)
YLABEL T)
(PLOTLABEL HISTOGRAM (QUOTE TOP)
PTITLE T)
(PLOTADDMENUITEMS HISTOGRAM (QUOTE RIGHT)
RIGHTMENUITEMS)
(PLOTMENUITEMS HISTOGRAM (QUOTE BINMENU)
BINMENU)
(if INTFLG
then (PLOTTICFN HISTOGRAM (QUOTE X)
(FUNCTION HISTOGRAM.INTTICFN)
T)
(PLOTSCALEFN HISTOGRAM (QUOTE X)
(FUNCTION HISTOGRAM.INTSCALEFN)
T)
else (PLOTTICFN HISTOGRAM (QUOTE X)
(FUNCTION HISTOGRAM.TICFN)))
(HISTOGRAM.DRAW HISTOGRAM)
(PLOTPROP HISTOGRAM (QUOTE COPYFN)
(FUNCTION COPYHISTOGRAM))
HISTOGRAM))])
(HISTOGRAM.BOXSUMMARY
[DLAMBDA ((BOX COMPOUNDOBJECT)
(HISTOGRAM PLOT))
(* jop: "13-Feb-86 22:04")
(LET* [(STRING (ALLOCSTRING 40))
(STRINGSTREAM (OPENSTRINGSTREAM STRING (QUOTE OUTPUT)))
(FFMT (QUOTE (FLOAT 10 NIL NIL NIL 3]
(PRINTOUT STRINGSTREAM "Adjacent values" .SP 1 .N FFMT (PLOTOBJECTPROP BOX (QUOTE
LADJACENT))
.N FFMT (PLOTOBJECTPROP BOX (QUOTE UADJACENT))
T)
(SUMMARYWINDOW.PRINT HISTOGRAM (LIST (LIST (FUNCTION LETTER.VALUE.DISPLAY)
(PLOTPROP HISTOGRAM (QUOTE
LETTERVALUES)))
STRING)))])
(HISTOGRAM.CHANGEBINS
[DLAMBDA ((HISTOGRAM PLOT))
(* jop: " 2-Apr-86 22:20")
(LET* ((PRMTW (fetch PLOTPROMPTWINDOW of HISTOGRAM))
(INTFLG (PLOTPROP HISTOGRAM (QUOTE INTFLG)))
(BININTERVAL (PLOTPROP HISTOGRAM (QUOTE BININTERVAL)))
(INC (fetch (HISTOGRAM.BINS BININC) of BININTERVAL))
(START (fetch (HISTOGRAM.BINS BINMIN) of BININTERVAL))
(END (fetch (HISTOGRAM.BINS BINMAX) of BININTERVAL))
NBINS)
(TERPRI PRMTW)
[SETQ START (READ (OPENSTRINGSTREAM (PROMPTFORWORD "From " START
"Type start point of bin sequence"
PRMTW)
(QUOTE INPUT]
(SETQ START (if INTFLG
then (PLOT.FLOOR START)
else (FLOAT START)))
[SETQ END (READ (OPENSTRINGSTREAM (PROMPTFORWORD " TO " END
"TYPE END POINT OF BIN SEQUENCE"
PRMTW)
(QUOTE INPUT]
(SETQ END (if INTFLG
then (PLOT.CEILING END)
else (FLOAT END)))
[SETQ INC (READ (OPENSTRINGSTREAM (PROMPTFORWORD " BY " INC "TYPE AN INCREMENT"
PRMTW)
(QUOTE INPUT]
(SETQ INC (if INTFLG
then (PLOT.CEILING INC)
else (FLOAT INC)))
(SETQ NBINS (PLOT.CEILING (FQUOTIENT (DIFFERENCE END START)
INC)))
(SETQ END (PLUS START (TIMES INC NBINS)))
(if INTFLG
then (SETQ NBINS (ADD1 NBINS)))
(PLOTPROMPT (CONCAT "Using: from " START " To " END " By " INC)
HISTOGRAM)
(RESETLST (RESETSAVE (SETCURSOR WAITINGCURSOR)
(LIST (FUNCTION SETCURSOR)
DEFAULTCURSOR))
(PLOTPROP HISTOGRAM (QUOTE BININTERVAL)
(create HISTOGRAM.BINS
BINMIN ← START
BINMAX ← END
BININC ← INC
NBINS ← NBINS))
(PLOTPROP HISTOGRAM (QUOTE NBINS)
NBINS)
(HISTOGRAM.DRAW HISTOGRAM)))])
(HISTOGRAM.COMPUTEMULT
[LAMBDA (MIN MAX INC MUTIPLE) (* jop: "25-Feb-86 12:15")
(* *)
(LET* [(NEWINC (TIMES INC MUTIPLE))
(MINMULT (PLOT.FLOOR (QUOTIENT MIN NEWINC)))
(MAXMULT (PLOT.CEILING (QUOTIENT MAX NEWINC]
(create TICINFO
TICMIN ←(TIMES MINMULT NEWINC)
TICMAX ←(TIMES MAXMULT NEWINC)
TICINC ← NEWINC
NTICS ←(ADD1 (DIFFERENCE MAXMULT MINMULT])
(HISTOGRAM.DELETEQUANTILES
[DLAMBDA ((BOX COMPOUNDOBJECT)
(HISTOGRAM PLOT)
NODRAWFLG)
(* jop: " 2-Apr-86 16:18")
(* * DELETE QUANTILE DISPLAY)
(if BOX
then (DELETEPLOTOBJECT BOX HISTOGRAM NODRAWFLG)
(PLOTPROP HISTOGRAM (QUOTE QUANTILEDISPLAY)
NIL)
(RESCALEPLOT HISTOGRAM (QUOTE Y)
NODRAWFLG))])
(HISTOGRAM.DISPLAYQUANTILES
[DLAMBDA ((HISTOGRAM PLOT)
NODRAWFLG)
(* jop: " 2-Apr-86 22:46")
(* * DISPLAY QUANTILES GRAPHICALLY)
[if (NOT (PLOTMENUITEMS HISTOGRAM (QUOTE BOXMENU)))
then (PLOTMENUITEMS HISTOGRAM (QUOTE BOXMENU)
(LIST (LIST (QUOTE Summary)
(FUNCTION HISTOGRAM.BOXSUMMARY)
"Printout summary statistics")
(LIST (QUOTE Delete)
(FUNCTION HISTOGRAM.DELETEQUANTILES)
"Delete boxplot"]
[if (NULL (PLOTPROP HISTOGRAM (QUOTE QUANTILEDISPLAY)))
then (LET* ((NBINS (PLOTPROP HISTOGRAM (QUOTE NBINS)))
(MAXHEIGHT (PLOTPROP HISTOGRAM (QUOTE MAXFREQ)))
(LINETOP (PLUS MAXHEIGHT 1.5))
(LINEBOTTOM (PLUS MAXHEIGHT .5)))
(PLOTPROP HISTOGRAM (QUOTE QUANTILEDISPLAY)
(FLIPBOX (BOXPLOT.MAKEBOX (PLOTPROP HISTOGRAM (QUOTE BATCH))
LINEBOTTOM LINETOP "Boxplot summary"
(PLOTPROP HISTOGRAM (QUOTE RBATCH))
(PLOTPROP HISTOGRAM (QUOTE OBATCH]
(ADDPLOTOBJECT (PLOTPROP HISTOGRAM (QUOTE QUANTILEDISPLAY))
HISTOGRAM NODRAWFLG)])
(HISTOGRAM.DRAW
[DLAMBDA ((HISTOGRAM PLOT))
(* edited: " 2-Apr-86 23:48")
(* *)
(LET* ((SHADE (PLOTPROP HISTOGRAM (QUOTE SHADE)))
(INTFLG (PLOTPROP HISTOGRAM (QUOTE INTFLG)))
(N (PLOTPROP HISTOGRAM (QUOTE N)))
(RBATCH (PLOTPROP HISTOGRAM (QUOTE RBATCH)))
(OBATCH (PLOTPROP HISTOGRAM (QUOTE OBATCH)))
(BININTERVAL (OR (PLOTPROP HISTOGRAM (QUOTE BININTERVAL))
(LET ((NEWINTERVAL (HISTOGRAM.MAKEBININTERVAL (GETRELT
RBATCH
(GETRELT OBATCH 1))
(GETRELT
RBATCH
(GETRELT OBATCH N))
(PLOTPROP
HISTOGRAM
(QUOTE NBINS))
INTFLG)))
(PLOTPROP HISTOGRAM (QUOTE BININTERVAL)
NEWINTERVAL)
NEWINTERVAL)))
(BINMIN (fetch (HISTOGRAM.BINS BINMIN) of BININTERVAL))
(BINMAX (fetch (HISTOGRAM.BINS BINMAX) of BININTERVAL))
(BININC (fetch (HISTOGRAM.BINS BININC) of BININTERVAL))
(NBINS (fetch (HISTOGRAM.BINS NBINS) of BININTERVAL))
(QUANTILEDISPLAY (PLOTPROP HISTOGRAM (QUOTE QUANTILEDISPLAY)))
BINS MAXFREQ) (* Erase the old image, if any)
(for OBJECT in (COPY (fetch PLOTOBJECTS of HISTOGRAM))
when (AND (PLOTOBJECTSUBTYPE? FILLEDRECTANGLE OBJECT)
(PLOTOBJECTPROP OBJECT (QUOTE FROMHISTOGRAM?)))
do (DELETEPLOTOBJECT OBJECT HISTOGRAM T T))
(if INTFLG
then (SETQ BINMIN (DIFFERENCE BINMIN .5))
(SETQ BINMAX (PLUS BINMAX .5)))
(SETQ BINS (bind (I ← 1)
FREQ for BIN from 1 to NBINS as MARK from (PLUS BINMIN
BININC)
by BININC when (NEQ (SETQ FREQ
(bind (CNT ← 0)
while (AND (ILEQ I N)
(LESSP (GETRELT
RBATCH
(GETRELT OBATCH
I))
MARK))
do (SETQ I (ADD1 I))
(SETQ CNT (ADD1 CNT))
finally (RETURN CNT)))
0)
collect (CONS MARK FREQ))) (* An optimization to speed up adding rectangles to
the plot -- extends the scale once)
[PLOTPROP HISTOGRAM (QUOTE MAXFREQ)
(SETQ MAXFREQ (CDR (for BIN in BINS largest (CDR BIN]
(ADJUSTSCALE? (create EXTENT
MINX ← BINMIN
MAXX ← BINMAX
MINY ← 0
MAXY ← MAXFREQ)
HISTOGRAM) (* Construct the new image)
(RESETLST [RESETSAVE (FLTFMT (QUOTE (FLOAT NIL NIL NIL NIL 5]
(* Round to five significant figures)
(RESETSAVE PRXFLG T)
(bind RECTANGLE LOWMARK HIGHMARK FREQ for BIN in BINS
do (SETQ HIGHMARK (CAR BIN))
(SETQ LOWMARK (DIFFERENCE HIGHMARK BININC))
(SETQ FREQ (CDR BIN))
(SETQ RECTANGLE
(PLOTFILLEDRECTANGLE HISTOGRAM LOWMARK 0 BININC FREQ
(if INTFLG
then (LET ((ILOWMARK (PLOT.CEILING
LOWMARK))
(IHIGHMARK (PLOT.FLOOR
HIGHMARK)))
(if (IEQP ILOWMARK
IHIGHMARK)
then (CONCAT FREQ
" Obs. at "
ILOWMARK)
else (CONCAT FREQ
" Obs. between "
ILOWMARK
" and "
IHIGHMARK)))
else (CONCAT FREQ " Obs. between "
LOWMARK " and " HIGHMARK))
SHADE NIL (QUOTE BINMENU)
T))
(PLOTOBJECTPROP RECTANGLE (QUOTE FROMHISTOGRAM?)
T)
(PLOTOBJECTPROP RECTANGLE (QUOTE LOWMARK)
LOWMARK)
(PLOTOBJECTPROP RECTANGLE (QUOTE HIGHMARK)
HIGHMARK)))
(* Rescale the Histogram)
(if QUANTILEDISPLAY
then (HISTOGRAM.DELETEQUANTILES QUANTILEDISPLAY HISTOGRAM T))
(RESCALEPLOT HISTOGRAM (QUOTE BOTH)
T)
(if QUANTILEDISPLAY
then (HISTOGRAM.DISPLAYQUANTILES HISTOGRAM T))
(* refresh the image)
(REDRAWPLOTWINDOW HISTOGRAM))])
(HISTOGRAM.INTSCALEFN
[LAMBDA (MIN MAX TICINFO) (* jop: " 2-Apr-86 22:50")
(with TICINFO TICINFO (create AXISINTERVAL
MIN ←(DIFFERENCE TICMIN .5)
MAX ←(PLUS TICMAX .5])
(HISTOGRAM.INTTICFN
[LAMBDA (MIN MAX) (* jop: "12-Feb-86 22:38")
(* *)
(LET* ((INTMAX (PLOT.FLOOR MAX))
(INTMIN (PLOT.CEILING MIN))
(TICINFO (DEFAULTTICFN INTMIN INTMAX))
NEWMAX NEWMIN INC NTICS)
[SETQ NEWMIN (IMIN INTMIN (PLOT.CEILING (fetch (TICINFO TICMIN) of TICINFO]
(SETQ INC (PLOT.CEILING (fetch (TICINFO TICINC) of TICINFO)))
[SETQ NTICS (ADD1 (PLOT.CEILING (FQUOTIENT (DIFFERENCE INTMAX NEWMIN)
INC]
[SETQ NEWMAX (IPLUS NEWMIN (ITIMES INC (SUB1 NTICS]
(create TICINFO
TICMIN ← NEWMIN
TICMAX ← NEWMAX
TICINC ← INC
NTICS ← NTICS])
(HISTOGRAM.MAKEBININTERVAL
[LAMBDA (BATCHMIN BATCHMAX NBINS INTFLG) (* jop: "13-Feb-86 16:04")
(* *)
(if INTFLG
then (LET ((NINT (ADD1 (IDIFFERENCE BATCHMAX BATCHMIN)))
MULT)
(if (IGEQ NBINS NINT)
then (create HISTOGRAM.BINS
BINMIN ← BATCHMIN
BINMAX ← BATCHMAX
BININC ← 1
NBINS ← NINT)
else (SETQ MULT (PLOT.CEILING (FQUOTIENT (DIFFERENCE BATCHMAX
BATCHMIN)
NBINS)))
(create HISTOGRAM.BINS
BINMIN ← BATCHMIN
BINMAX ←(PLUS BATCHMIN (TIMES MULT NBINS))
BININC ← MULT
NBINS ← NBINS)))
else (LET [(TICINFO (SCALE BATCHMIN BATCHMAX (ADD1 NBINS]
(create HISTOGRAM.BINS
BINMIN ←(fetch (TICINFO TICMIN) of TICINFO)
BINMAX ←(fetch (TICINFO TICMAX) of TICINFO)
BININC ←(fetch (TICINFO TICINC) of TICINFO)
NBINS ← NBINS])
(HISTOGRAM.RESET
[DLAMBDA ((HISTOGRAM PLOT))
(* jop: " 2-Apr-86 22:20")
(PROG [(N (PLOTPROP HISTOGRAM (QUOTE N]
(RESETLST (RESETSAVE (SETCURSOR WAITINGCURSOR)
(LIST (FUNCTION SETCURSOR)
DEFAULTCURSOR))
[PLOTPROP HISTOGRAM (QUOTE NBINS)
(if (LESSP N 20)
then (FIX (TIMES 2 (SQRT N)))
else (FIX (TIMES 10 (PLOT.LOG10 N]
(PLOTPROP HISTOGRAM (QUOTE BININTERVAL)
NIL)
(HISTOGRAM.DRAW HISTOGRAM)))])
(HISTOGRAM.SUMMARY
[DLAMBDA ((HISTOGRAM PLOT)
(LONGFLG (MEMQ T NIL)))
(* jop: "27-May-85 17:34")
(SUMMARYWINDOW.PRINT HISTOGRAM (LIST (PLOTLABEL HISTOGRAM (QUOTE BOTTOM))
(LIST (FUNCTION LETTER.VALUE.DISPLAY)
(PLOTPROP HISTOGRAM (QUOTE LETTERVALUES))
LONGFLG)))])
(HISTOGRAM.TICFN
[LAMBDA (MIN MAX HISTOGRAM) (* jop: " 2-Apr-86 22:35")
(* *)
(LET* ((RANGE (DIFFERENCE MAX MIN))
(BININTERVAL (PLOTPROP HISTOGRAM (QUOTE BININTERVAL)))
(BININC (fetch (HISTOGRAM.BINS BININC) of BININTERVAL))
(NBINS (fetch (HISTOGRAM.BINS NBINS) of BININTERVAL)))
(bind (MININTERVALLENGTH ← MAX.FLOAT)
MININTERVAL INTERVAL INTERVALLENGTH for MULTIPLE
from (PLOT.CEILING (QUOTIENT RANGE (TIMES BININC 9)))
to (PLOT.CEILING (QUOTIENT RANGE BININC))
do (SETQ INTERVAL (HISTOGRAM.COMPUTEMULT MIN MAX BININC MULTIPLE))
(SETQ INTERVALLENGTH (fetch (TICINFO TICINTERVALLENGTH) of INTERVAL))
(if (LESSP INTERVALLENGTH MININTERVALLENGTH)
then (SETQ MININTERVAL INTERVAL)
(SETQ MININTERVALLENGTH INTERVALLENGTH))
finally (RETURN MININTERVAL])
(HISTOGRAM.VALUES
[DLAMBDA ((RECTANGLE FILLEDRECTANGLEOBJECT)
(HISTOGRAM PLOT))
(* jop: "13-Feb-86 15:45")
(PROG ((N (PLOTPROP HISTOGRAM (QUOTE N)))
(BATCH (PLOTPROP HISTOGRAM (QUOTE BATCH)))
(RBATCH (PLOTPROP HISTOGRAM (QUOTE RBATCH)))
(LOWMARK (PLOTOBJECTPROP RECTANGLE (QUOTE LOWMARK)))
(HIGHMARK (PLOTOBJECTPROP RECTANGLE (QUOTE HIGHMARK)))
SELECTION)
(SETQ SELECTION (LIST (for I from 1 to N when (AND (GEQ (GETRELT RBATCH
I)
LOWMARK)
(LESSP (GETRELT
RBATCH I)
HIGHMARK))
collect I)))
(SUMMARYWINDOW.PRINT HISTOGRAM (AT BATCH SELECTION)))])
(LETTER.VALUE.DISPLAY
[DLAMBDA ((STREAM (SATISFIES (OR (EQ T STREAM)
(EQ NIL STREAM)
(STREAMP STREAM)
(WINDOWP STREAM))))
(LETTERVALUES LETTERVALUES)
(LONGFLG (MEMQ T NIL)))
(* jop: "13-Feb-86 16:50")
(* * Outputs a Letter value summary to stream)
(if (NULL STREAM)
then (SETQ STREAM (OUTPUT)))
(PROG [(MEDIANDEPTH (if (EQP (PLOT.FLOOR (fetch MEDIANDEPTH of LETTERVALUES))
(fetch MEDIANDEPTH of LETTERVALUES))
then (FIX (fetch MEDIANDEPTH of LETTERVALUES))
else (fetch MEDIANDEPTH of LETTERVALUES)))
(FOURTHDEPTH (if (EQP (PLOT.FLOOR (fetch FOURTHDEPTH of LETTERVALUES))
(fetch FOURTHDEPTH of LETTERVALUES))
then (FIX (fetch FOURTHDEPTH of LETTERVALUES))
else (fetch FOURTHDEPTH of LETTERVALUES)))
(EIGHTHDEPTH (if (EQP (PLOT.FLOOR (fetch EIGHTHDEPTH of LETTERVALUES))
(fetch EIGHTHDEPTH of LETTERVALUES))
then (FIX (fetch EIGHTHDEPTH of LETTERVALUES))
else (fetch EIGHTHDEPTH of LETTERVALUES)))
(FFORMAT (QUOTE (FLOAT 10 NIL NIL NIL 3]
(PRINTOUT STREAM "N = " .I5...T (fetch N of LETTERVALUES)
.SP 2 "Depth" .SP 5 "Lower" .SP 5 "Upper")
(if LONGFLG
then (PRINTOUT STREAM .SP 7 "Mid" .SP 4 "Spread"))
(PRINTOUT STREAM T "Median " .SP 2 .N (if (FIXP MEDIANDEPTH)
then (QUOTE (FIX 6))
else (QUOTE (FLOAT 6)))
MEDIANDEPTH .SP 5 .N FFORMAT (fetch MEDIAN of LETTERVALUES))
(PRINTOUT STREAM T "Fourths " .SP 2 .N (if (FIXP FOURTHDEPTH)
then (QUOTE (FIX 6))
else (QUOTE (FLOAT 6)))
FOURTHDEPTH .N FFORMAT (fetch LOWERFOURTH of LETTERVALUES)
.N FFORMAT (fetch UPPERFOURTH of LETTERVALUES))
(if LONGFLG
then (PRINTOUT STREAM .N FFORMAT (FQUOTIENT (FPLUS (fetch UPPERFOURTH
of LETTERVALUES)
(fetch LOWERFOURTH
of LETTERVALUES))
2)
.N FFORMAT (fetch FOURTHSPREAD of LETTERVALUES)))
(PRINTOUT STREAM T "Eighths " .SP 2 .N (if (FIXP EIGHTHDEPTH)
then (QUOTE (FIX 6))
else (QUOTE (FLOAT 6)))
EIGHTHDEPTH .N FFORMAT (fetch LOWEREIGHTH of LETTERVALUES)
.N FFORMAT (fetch UPPEREIGHTH of LETTERVALUES))
[if LONGFLG
then (PRINTOUT STREAM .N FFORMAT (FQUOTIENT (FPLUS (fetch UPPEREIGHTH
of LETTERVALUES)
(fetch LOWEREIGHTH
of LETTERVALUES))
2)
.N FFORMAT (FDIFFERENCE (fetch UPPEREIGHTH of LETTERVALUES)
(fetch LOWEREIGHTH of LETTERVALUES]
(PRINTOUT STREAM T "Extremes" .SP 7 "1" .N FFORMAT (fetch LOWEREXTREME of
LETTERVALUES)
.N FFORMAT (fetch UPPEREXTREME of LETTERVALUES))
[if LONGFLG
then (PRINTOUT STREAM .N FFORMAT (FQUOTIENT (FPLUS (fetch UPPEREXTREME
of LETTERVALUES)
(fetch LOWEREXTREME
of LETTERVALUES))
2)
.N FFORMAT (FDIFFERENCE (fetch UPPEREXTREME of LETTERVALUES)
(fetch LOWEREXTREME of LETTERVALUES]
(PRINTOUT STREAM T))])
(MAKEBOXOBJECT
[LAMBDA (BOXLEFT BOXRIGHT LADJACENT UADJACENT LETTERVALUES LABEL)
(* jop: "13-Feb-86 18:03")
(LET* ((BOXMIDDLE (FQUOTIENT (PLUS BOXLEFT BOXRIGHT)
2))
(N (fetch N of LETTERVALUES))
(MEDIAN (fetch MEDIAN of LETTERVALUES))
(LOWERFOURTH (fetch LOWERFOURTH of LETTERVALUES))
(UPPERFOURTH (fetch UPPERFOURTH of LETTERVALUES))
(BOX (CREATEPOLYGON (LIST (create POSITION
XCOORD ← BOXLEFT
YCOORD ← LOWERFOURTH)
(create POSITION
XCOORD ← BOXRIGHT
YCOORD ← LOWERFOURTH)
(create POSITION
XCOORD ← BOXRIGHT
YCOORD ← UPPERFOURTH)
(create POSITION
XCOORD ← BOXLEFT
YCOORD ← UPPERFOURTH))
NIL 2))
(MEDIANLINE (CREATECURVE (LIST (create POSITION
XCOORD ← BOXLEFT
YCOORD ← MEDIAN)
(create POSITION
XCOORD ← BOXRIGHT
YCOORD ← MEDIAN))
NIL 3))
(LWHISKER (CREATECURVE (LIST (create POSITION
XCOORD ← BOXMIDDLE
YCOORD ← LOWERFOURTH)
(create POSITION
XCOORD ← BOXMIDDLE
YCOORD ← LADJACENT))
NIL 1))
(UWHISKER (CREATECURVE (LIST (create POSITION
XCOORD ← BOXMIDDLE
YCOORD ← UPPERFOURTH)
(create POSITION
XCOORD ← BOXMIDDLE
YCOORD ← UADJACENT))
NIL 1))
(LBAR (CREATECURVE (LIST (create POSITION
XCOORD ← BOXLEFT
YCOORD ← LADJACENT)
(create POSITION
XCOORD ← BOXRIGHT
YCOORD ← LADJACENT))
NIL 1))
(UBAR (CREATECURVE (LIST (create POSITION
XCOORD ← BOXLEFT
YCOORD ← UADJACENT)
(create POSITION
XCOORD ← BOXRIGHT
YCOORD ← UADJACENT))
NIL 1)))
(CREATECOMPOUND (QUOTE BOX)
(LIST BOX MEDIANLINE LWHISKER UWHISKER LBAR UBAR)
LABEL
(QUOTE BOXMENU])
(SCATTERPLOT
[ULAMBDA ((Y (ONEOF VECTOR MATRIX))
(X (ONEOF NIL VECTOR MATRIX))
(CONTROLER (ONEOF NIL SCALAR VECTOR)))
(* jop: "13-Feb-86 23:03")
(* Plots vector YROW against XROW or 1->N)
(RESETLST (RESETSAVE (SETCURSOR WAITINGCURSOR)
(LIST (FUNCTION SETCURSOR)
DEFAULTCURSOR))
(LET* ((SCATTERPLOT (CREATEPLOT))
(RIGHTMENUITEMS (LIST (LIST (QUOTE Coordinates)
(FUNCTION SCATTERPLOT.WORLDCOORD)
"Display world coordinates at cursor position")
(LIST (QUOTE Regress)
(FUNCTION SCATTERPLOT.REGRESS)
"Display a linear regression line")))
[POINTMENUITEMS (APPEND (COPY (PLOTMENUITEMS SCATTERPLOT (QUOTE MIDDLE)
))
(LIST (LIST (QUOTE Coordinates)
(FUNCTION SCATTERPLOT.POINTCOORDS)
"Display point coordinates"]
[YLABEL (OR (if (type? VECTOR Y)
then (if (type? SELARRAY Y)
then (FIRSTHIDDENLEVLABEL Y))
else (if (EQP (CAR (fetch KEEPS of Y))
2)
then (GETDIMLAB Y 2)
else (GETDIMLAB Y 1)))
(CONCAT "ARRAY " (SERIALNUMBER Y]
[XLABEL (OR [if X
then (if (type? VECTOR X)
then (if (type? SELARRAY X)
then (FIRSTHIDDENLEVLABEL X))
else (if (EQP (CAR (fetch KEEPS
of X))
2)
then (GETDIMLAB X 2)
else (GETDIMLAB X 1)))
else (CONCAT 1 " - "
(if (type? VECTOR Y)
then (GETRELT (fetch SHAPE
of Y)
1)
else (if (EQP (CAR (fetch KEEPS
of Y))
2)
then (GETRELT (fetch
SHAPE
of Y)
1)
else (GETRELT (fetch SHAPE
of Y)
2]
(CONCAT "ARRAY " (SERIALNUMBER X]
(PTITLE (CONCAT "Scatterplot of " YLABEL " vs " XLABEL))
(GLYPHS (LIST STAR CROSS CIRCLE))
(NEXTGLYPH GLYPHS)
(GETLABFROMX (if (AND (type? VECTOR Y)
(type? MATRIX X))
then T
else NIL))
(LNUM 1))
(DECLARE (SPECVARS SCATTERPLOT GLYPHS NEXTGLYPH LNUM GETLABFROMX))
(PLOTTICS SCATTERPLOT (QUOTE BOTTOM)
T T)
(PLOTTICS SCATTERPLOT (QUOTE LEFT)
T T)
(PLOTLABEL SCATTERPLOT (QUOTE BOTTOM)
XLABEL T)
(PLOTLABEL SCATTERPLOT (QUOTE LEFT)
YLABEL T)
(PLOTLABEL SCATTERPLOT (QUOTE TOP)
PTITLE T)
(PLOTADDMENUITEMS SCATTERPLOT (QUOTE RIGHT)
RIGHTMENUITEMS)
(PLOTADDMENUITEMS SCATTERPLOT (QUOTE POINTMENU)
POINTMENUITEMS)
(EAPPLY* (FUNCTION SCATTERPLOT.POINTSORCURVES)
(QUOTE (VECTOR VECTOR SCALAR))
Y X CONTROLER)
(RESCALEPLOT SCATTERPLOT (QUOTE BOTH)
T)
(PLOTPROP SCATTERPLOT (QUOTE COPYFN)
(FUNCTION COPYSCATTERPLOT))
(OPENPLOTWINDOW SCATTERPLOT)
SCATTERPLOT))])
(SCATTERPLOT.POINTCOORDS
[DLAMBDA ((POINTOBJECT POINTOBJECT)
(SCATTERPLOT PLOT))
(* jop: "13-Aug-85 15:15")
(DPROG ((POINTPOSITION (fetch POINTPOSITION of (fetch OBJECTDATA of POINTOBJECT)) POSITION)
(XLABEL (CONCAT (OR (PLOTLABEL SCATTERPLOT (QUOTE BOTTOM))
"XCOORD")
" ") STRINGP)
(YLABEL (CONCAT " " (OR (PLOTLABEL SCATTERPLOT (QUOTE LEFT))
"YCOORD")
" ") STRINGP))
(PLOTPROMPT (CONCAT XLABEL (fetch XCOORD of POINTPOSITION)
YLABEL
(fetch YCOORD of POINTPOSITION))
SCATTERPLOT))])
(SCATTERPLOT.POINTSORCURVES
[DLAMBDA ((Y VECTOR)
(X (ONEOF NIL VECTOR))
(CONTROLER (SATISFIES (SCALARP CONTROLER))))
(* jop: " 2-Aug-85 15:36")
(if [AND X (NOT (EQP (GETRELT (fetch SHAPE of Y)
1)
(GETRELT (fetch SHAPE of X)
1]
then (UERROR "VECTOR X AND Y NOT OF SAME SHAPE"))
(if (AND CONTROLER (EQP CONTROLER 1))
then (ADDCURVETOPLOT SCATTERPLOT Y X (OR [if GETLABFROMX
then (OR (if (type? SELARRAY X)
then (FIRSTHIDDENLEVLABEL X))
(if (type? SELARRAY Y)
then (FIRSTHIDDENLEVLABEL Y)))
else (OR (if (type? SELARRAY Y)
then (FIRSTHIDDENLEVLABEL Y))
(if (type? SELARRAY X)
then (FIRSTHIDDENLEVLABEL X]
(CONCAT "LINE " LNUM))
NIL NIL T)
(SETQ LNUM (ADD1 LNUM))
else (ADDPOINTSTOPLOT SCATTERPLOT Y X (CAR NEXTGLYPH)
(for I to (GETRELT (fetch SHAPE of Y)
1)
collect (OR [if GETLABFROMX
then (OR (if X
then (GETLEVLAB X 1 I))
(GETLEVLAB Y 1 I))
else (OR (GETLEVLAB Y 1 I)
(if X
then (GETLEVLAB X 1 I]
I))
(QUOTE POINTMENU)
T)
(SETQ NEXTGLYPH (CDR NEXTGLYPH))
(if (NULL NEXTGLYPH)
then (SETQ NEXTGLYPH GLYPHS)))
NIL])
(SCATTERPLOT.REGRESS
[DLAMBDA ((SCATTERPLOT PLOT))
(* edited: " 2-Apr-86 23:49")
(DPROG ((PLOTOBJECTS (fetch PLOTOBJECTS of SCATTERPLOT) LISTP)
(N 1 FIXP)
(SLOPE NIL FLOATP)
(CONSTANT NIL FLOATP)
(CXX NIL FLOATP)
(CXY NIL FLOATP)
(XBAR NIL FLOATP)
(YBAR NIL FLOATP)
(LINEOBJECT NIL LINEOBJECT))
[if (NULL (PLOTMENU SCATTERPLOT (QUOTE REGRESSMENU)))
then (PLOTMENUITEMS SCATTERPLOT (QUOTE REGRESSMENU)
(APPEND (PLOTMENUITEMS SCATTERPLOT (QUOTE MIDDLE))
(LIST (LIST (QUOTE Coefficients)
(FUNCTION SCATTERPLOT.REGRESSSUMMARY)
"Display coefficients of regress line"]
(if (PLOTPROP SCATTERPLOT (QUOTE REGRESSLINE))
then (DELETEPLOTOBJECT (PLOTPROP SCATTERPLOT (QUOTE REGRESSLINE))
SCATTERPLOT NIL T))
[bind (SX ← 0.0)
(SY ← 0.0)
(SSX ← 0.0)
(SSY ← 0.0)
(SXY ← 0.0)
POSITION for OBJECT in PLOTOBJECTS when (PLOTOBJECTSUBTYPE? POINT OBJECT)
do (SETQ POSITION (fetch POINTPOSITION of (fetch OBJECTDATA of OBJECT)))
(add N 1)
(fadd SX (fetch XCOORD of POSITION))
(fadd SY (fetch YCOORD of POSITION))
(fadd SSX (TIMES (fetch XCOORD of POSITION)
(fetch XCOORD of POSITION)))
(fadd SSY (TIMES (fetch YCOORD of POSITION)
(fetch YCOORD of POSITION)))
(fadd SXY (TIMES (fetch XCOORD of POSITION)
(fetch YCOORD of POSITION)))
finally (SETQ XBAR (QUOTIENT SX N))
(SETQ YBAR (QUOTIENT SY N))
(SETQ CXX (DIFFERENCE (QUOTIENT SSX N)
(TIMES XBAR XBAR)))
(SETQ CXY (DIFFERENCE (QUOTIENT SXY N)
(TIMES XBAR YBAR)))
(SETQ SLOPE (QUOTIENT CXY CXX))
(SETQ CONSTANT (DIFFERENCE YBAR (TIMES SLOPE XBAR]
(SETQ LINEOBJECT (CREATELINE SLOPE CONSTANT "Regression line" NIL (QUOTE REGRESSMENU)))
(PLOTOBJECTPROP LINEOBJECT (QUOTE SLOPE)
SLOPE)
(PLOTOBJECTPROP LINEOBJECT (QUOTE CONSTANT)
CONSTANT)
(PLOTPROP SCATTERPLOT (QUOTE REGRESSLINE)
LINEOBJECT)
(ADDPLOTOBJECT LINEOBJECT SCATTERPLOT))])
(SCATTERPLOT.REGRESSSUMMARY
[DLAMBDA ((RLINE LINEOBJECT)
(SCATTERPLOT PLOT))
(* jop: "12-Feb-86 11:50")
(PLOTPROMPT (CONCAT "Slope: " (PLOTOBJECTPROP RLINE (QUOTE SLOPE))
" Constant: "
(PLOTOBJECTPROP RLINE (QUOTE CONSTANT)))
SCATTERPLOT)])
(SCATTERPLOT.RUNNINGAVERAGE
[DLAMBDA ((SCATTERPLOT PLOT))
(* edited: " 2-Apr-86 23:49")
(DPROG ((PLOTOBJECTS (fetch PLOTOBJECTS of SCATTERPLOT) LISTP)
(PRTWINDOW (fetch PLOTPROMPTWINDOW of SCATTERPLOT))
THEN (N (for OBJECT in PLOTOBJECTS count (PLOTOBJECTSUBTYPE? POINT OBJECT)) FIXP)
THEN (ROWOFXS (create ROWFLOAT
NELTS ← N) ROWFLOAT)
(OROWOFXS NIL ROWINT)
(ROWOFYS (create ROWFLOAT
NELTS ← N) ROWFLOAT)
(SMOOTHPOSITIONS NIL LST)
(SMOOTH NIL CURVEOBJECT)
(SPAN NIL FIXP))
(PRINTOUT PRTWINDOW T)
[SETQ SPAN (EVAL (READ (OPENSTRINGSTREAM (PROMPTFORWORD "Specify span:" 7 NIL
PRTWINDOW]
(if (EVENP SPAN)
then (PLOTPROMPT (CONCAT "Span must be odd " SPAN)
SCATTERPLOT)
(RETURN NIL))
(bind (I ← 1)
POSITION for OBJECT in PLOTOBJECTS when (PLOTOBJECTSUBTYPE? POINT OBJECT)
do (SETQ POSITION (fetch POINTPOSITION of (fetch OBJECTDATA of OBJECT)))
(SETRELT ROWOFXS I (fetch XCOORD of POSITION))
(SETRELT ROWOFYS I (fetch YCOORD of POSITION))
(SETQ I (ADD1 I))) (* Order the X's)
(SETQ OROWOFXS (ORDERROW ROWOFXS))
[SETQ SMOOTHPOSITIONS (bind [RUNNINGY ←(for I from 1 to (IQUOTIENT (SUB1
SPAN)
2)
sum (GETRELT ROWOFYS (GETRELT OROWOFXS I]
(LOWERBOUND ←(IQUOTIENT (SUB1 SPAN)
2))
(UPPERBOUND ←(IDIFFERENCE N (IQUOTIENT (SUB1 SPAN)
2)))
for I from 1 to N declare (TYPE FLOATP RUNNINGY)
collect [if (IGREATERP I LOWERBOUND)
then (SETQ RUNNINGY
(FDIFFERENCE RUNNINGY
(GETRELT
ROWOFYS
(GETRELT OROWOFXS
(IDIFFERENCE
I LOWERBOUND]
[if (ILEQ I UPPERBOUND)
then (SETQ RUNNINGY
(FPLUS RUNNINGY
(GETRELT ROWOFYS
(GETRELT
OROWOFXS
(IPLUS I
LOWERBOUND]
(create POSITION
XCOORD ←(GETRELT ROWOFXS (GETRELT
OROWOFXS I))
YCOORD ←(FQUOTIENT RUNNINGY SPAN]
(SETQ SMOOTH (CREATECURVE SMOOTHPOSITIONS (CONCAT "Running averages of " SPAN)))
(ADDPLOTOBJECT SMOOTH SCATTERPLOT))])
(SCATTERPLOT.RUNNINGREGRESS
[DLAMBDA ((SCATTERPLOT PLOT))
(* edited: " 2-Apr-86 23:50")
(DPROG ((PLOTOBJECTS (fetch PLOTOBJECTS of SCATTERPLOT) LISTP)
(PRTWINDOW (fetch PLOTPROMPTWINDOW of SCATTERPLOT))
THEN (N (for OBJECT in PLOTOBJECTS count (PLOTOBJECTSUBTYPE? POINT OBJECT)) FIXP)
THEN (ROWOFXS (create ROWFLOAT
NELTS ← N) ROWFLOAT)
(OROWOFXS NIL ROWINT)
(ROWOFYS (create ROWFLOAT
NELTS ← N) ROWFLOAT)
(SMOOTHPOSITIONS NIL LST)
(SMOOTH NIL CURVEOBJECT)
(SPAN NIL FIXP))
(PRINTOUT PRTWINDOW T)
[SETQ SPAN (EVAL (READ (OPENSTRINGSTREAM (PROMPTFORWORD
"Specify span:"
(LET [(THIRD (FIXR (TIMES .3 N]
(if (EVENP THIRD)
then (SUB1 THIRD)
else THIRD))
NIL PRTWINDOW]
(if (EVENP SPAN)
then (PLOTPROMPT (CONCAT "Span must be odd " SPAN)
SCATTERPLOT)
(RETURN NIL))
(bind (I ← 1)
POSITION for OBJECT in PLOTOBJECTS when (PLOTOBJECTSUBTYPE? POINT OBJECT)
do (SETQ POSITION (fetch POINTPOSITION of (fetch OBJECTDATA of OBJECT)))
(SETRELT ROWOFXS I (fetch XCOORD of POSITION))
(SETRELT ROWOFYS I (fetch YCOORD of POSITION))
(SETQ I (ADD1 I)))
(SETQ OROWOFXS (ORDERROW ROWOFXS))
[SETQ SMOOTHPOSITIONS (bind (SX ← 0.0)
(SY ← 0.0)
(SSX ← 0.0)
(SXY ← 0.0)
(LOWERBOUND ←(IQUOTIENT (SUB1 SPAN)
2))
(UPPERBOUND ←(IDIFFERENCE N (IQUOTIENT (SUB1 SPAN)
2)))
(X ← 0.0)
(Y ← 0.0)
INDEX first [for I from 1 to LOWERBOUND
do (SETQ INDEX (GETRELT OROWOFXS I))
(SETQ X (GETRELT ROWOFXS INDEX))
(SETQ Y (GETRELT ROWOFYS INDEX))
(SETQ SX (PLUS SX X))
(SETQ SY (PLUS SY Y))
(SETQ SSX (PLUS SSX
(TIMES X X)))
(SETQ SXY (PLUS SXY
(TIMES X Y]
for I from 1 to N
collect [if (IGREATERP I LOWERBOUND)
then (SETQ INDEX (GETRELT OROWOFXS
(IDIFFERENCE
I LOWERBOUND)))
(SETQ X (GETRELT ROWOFXS INDEX))
(SETQ Y (GETRELT ROWOFYS INDEX))
(SETQ SX (FDIFFERENCE SX X))
(SETQ SY (FDIFFERENCE SY Y))
(SETQ SSX (FDIFFERENCE SSX
(TIMES X X)))
(SETQ SXY (FDIFFERENCE SXY
(TIMES X Y]
[if (ILEQ I UPPERBOUND)
then (SETQ INDEX (GETRELT OROWOFXS
(IPLUS I
LOWERBOUND)))
(SETQ X (GETRELT ROWOFXS INDEX))
(SETQ Y (GETRELT ROWOFYS INDEX))
(SETQ SX (FPLUS SX X))
(SETQ SY (FPLUS SY Y))
(SETQ SSX (FPLUS SSX (TIMES X X)))
(SETQ SXY (FPLUS SXY (TIMES X Y]
(SETQ INDEX (GETRELT OROWOFXS I))
(SETQ X (GETRELT ROWOFXS INDEX))
(create POSITION
XCOORD ← X
YCOORD ←(SCATTERPLOT.SMOOTHEDVALUE
X
(if (ILEQ I LOWERBOUND)
then (IPLUS LOWERBOUND I)
elseif (IGREATERP I UPPERBOUND)
then (IPLUS LOWERBOUND
(ADD1 (IDIFFERENCE
N I)))
else SPAN)
SX SY SSX SXY]
(SETQ SMOOTH (CREATECURVE SMOOTHPOSITIONS "Running regression curve" 2))
(ADDPLOTOBJECT SMOOTH SCATTERPLOT))])
(SCATTERPLOT.SMOOTHEDVALUE
[LAMBDA (X N SX SY SSX SXY) (* jop: "16-Aug-85 01:07")
(PROG ((XBAR (QUOTIENT SX N))
(YBAR (QUOTIENT SY N))
CXX CXY SLOPE CONSTANT)
(SETQ CXX (DIFFERENCE (QUOTIENT SSX N)
(TIMES XBAR XBAR)))
(SETQ CXY (DIFFERENCE (QUOTIENT SXY N)
(TIMES XBAR YBAR)))
(SETQ SLOPE (QUOTIENT CXY CXX))
(SETQ CONSTANT (DIFFERENCE YBAR (TIMES SLOPE XBAR)))
(RETURN (PLUS CONSTANT (TIMES SLOPE X])
(SCATTERPLOT.WORLDCOORD
[DLAMBDA ((SCATTERPLOT PLOT))
(* jop: "12-Feb-86 11:37")
(DPROG ((PLOTWINDOW (fetch PLOTWINDOW of SCATTERPLOT) WINDOW)
(PLOTPROMPTWINDOW (fetch PLOTPROMPTWINDOW of SCATTERPLOT) WINDOW)
(PLOTVIEWPORT (fetch PLOTWINDOWVIEWPORT of SCATTERPLOT) VIEWPORT)
(XLABEL (CONCAT (OR (PLOTLABEL SCATTERPLOT (QUOTE BOTTOM))
"X")
" at ") STRINGP)
(YLABEL (CONCAT " " (OR (PLOTLABEL SCATTERPLOT (QUOTE LEFT))
"Y")
" at ") STRINGP)
(OLDCURSORPOS (CONSTANT (create POSITION
XCOORD ← 0
YCOORD ← 0)) LISTP)
(NEWCURSORPOS (CONSTANT (create POSITION)) LISTP)
STARTXCOORDX STARTXCOORDY STARTYCOORDX STARTYCOORDY)
(PRINTOUT PLOTPROMPTWINDOW T XLABEL)
(SETQ STARTXCOORDX (DSPXPOSITION NIL PLOTPROMPTWINDOW))
(SETQ STARTXCOORDY (DSPYPOSITION NIL PLOTPROMPTWINDOW))
(PRINTOUT PLOTPROMPTWINDOW .SP 10 YLABEL)
(SETQ STARTYCOORDX (DSPXPOSITION NIL PLOTPROMPTWINDOW))
(SETQ STARTYCOORDY (DSPYPOSITION NIL PLOTPROMPTWINDOW))
[while (MOUSESTATE UP)
do (SETQ NEWCURSORPOS (CURSORPOSITION NIL PLOTWINDOW NEWCURSORPOS))
(if [NOT (AND (EQP (fetch XCOORD of OLDCURSORPOS)
(fetch XCOORD of NEWCURSORPOS))
(EQP (fetch YCOORD of OLDCURSORPOS)
(fetch YCOORD of NEWCURSORPOS]
then (MOVETO STARTXCOORDX STARTXCOORDY PLOTPROMPTWINDOW)
(PRINTOUT PLOTPROMPTWINDOW .F10.4 (STREAMTOWORLDX (fetch XCOORD
of NEWCURSORPOS)
PLOTVIEWPORT))
(MOVETO STARTYCOORDX STARTYCOORDY PLOTPROMPTWINDOW)
(PRINTOUT PLOTPROMPTWINDOW .F10.4 (STREAMTOWORLDY (fetch YCOORD
of NEWCURSORPOS)
PLOTVIEWPORT))
(replace XCOORD of OLDCURSORPOS with (fetch XCOORD of
NEWCURSORPOS))
(replace YCOORD of OLDCURSORPOS with (fetch YCOORD of
NEWCURSORPOS])])
(SUMMARY.REPAINTFN
[DLAMBDA ((WINDOW WINDOW))
(* jop: "13-Feb-86 16:32")
(* * Mostly copied from the Pretty Print window example in the manual. If OUTPUT is an IDL array, it is pretty
printed, if LISTP , CAR is applied to (CONS WINDOW (CDR of item)) else PRIN1'ed)
[PROG [(OUTPUT (WINDOWPROP WINDOW (QUOTE OUTPUT]
(MOVETO (WINDOWPROP WINDOW (QUOTE TOPX))
(WINDOWPROP WINDOW (QUOTE TOPY))
WINDOW)
(for ITEM in OUTPUT do (if (IDLARRAYP ITEM)
then (PPA ITEM WINDOW)
elseif (LISTP ITEM)
then (APPLY (CAR ITEM)
(CONS WINDOW (CDR ITEM)))
else (printout WINDOW ITEM T]])
(SUMMARY.RESHAPEFN
[LAMBDA (WINDOW) (* jop: "13-Feb-86 16:31")
(* * Copied from example in manual)
(PROG (BOTTOMEXTENT)
(DSPRESET WINDOW)
(WINDOWPROP WINDOW (QUOTE TOPX)
(DSPXPOSITION NIL WINDOW))
(WINDOWPROP WINDOW (QUOTE TOPY)
(DSPYPOSITION NIL WINDOW))
(SUMMARY.REPAINTFN WINDOW)
[SETQ BOTTOMEXTENT (IPLUS (DSPYPOSITION NIL WINDOW)
(FONTPROP WINDOW (QUOTE ASCENT]
(WINDOWPROP WINDOW (QUOTE EXTENT)
(CREATEREGION 0 BOTTOMEXTENT (WINDOWPROP WINDOW (QUOTE WIDTH))
(IDIFFERENCE (WINDOWPROP WINDOW (QUOTE HEIGHT))
BOTTOMEXTENT])
(SUMMARYWINDOW.PRINT
[DLAMBDA ((PLOT PLOT)
OUTPUT)
(* jop: "13-Feb-86 16:32")
(* * Print OUTPUT in SUMMARY window. OUTPUT may be an IDLARRAY , in which case it is pretty printed, or
LETTERVALUES, in which case is LETTERVALUEDISPLAY'ed, or ANY, in which case it is PRIN1'ED.
A SUMMARY window is cached as a PLOT PROP. OUTPUT may be a list, in which case the process is iterated)
(PROG [(SUMMARYWINDOW (WINDOWPROP (fetch PLOTWINDOW of PLOT)
(QUOTE SUMMARYWINDOW]
(if (NULL SUMMARYWINDOW)
then (SETQ SUMMARYWINDOW (GETSUMMARYWINDOW 6))
(WINDOWPROP (fetch PLOTWINDOW of PLOT)
(QUOTE SUMMARYWINDOW)
SUMMARYWINDOW))
(WINDOWPROP SUMMARYWINDOW (QUOTE OUTPUT)
(if (NLISTP OUTPUT)
then (LIST OUTPUT)
else OUTPUT))
(if (NOT (OPENWP SUMMARYWINDOW))
then (ATTACHWINDOW SUMMARYWINDOW (fetch PLOTWINDOW of PLOT)
(QUOTE TOP)
NIL
(QUOTE LOCALCLOSE))
else (SUMMARY.RESHAPEFN SUMMARYWINDOW)))])
)
[DECLARE: EVAL@COMPILE
(DATATYPE HISTOGRAM.BINS (BINMIN BINMAX BININC NBINS))
(DATATYPE LETTERVALUES ((N INTEGER)
(MEDIAN FLOATING)
(MEDIANDEPTH FLOATING)
(LOWERFOURTH FLOATING)
(UPPERFOURTH FLOATING)
(FOURTHDEPTH FLOATING)
(LOWEREIGHTH FLOATING)
(UPPEREIGHTH FLOATING)
(EIGHTHDEPTH FLOATING)
(LOWEREXTREME FLOATING)
(UPPEREXTREME FLOATING))
[ACCESSFNS ((FOURTHSPREAD (FDIFFERENCE (fetch UPPERFOURTH
of DATUM)
(fetch LOWERFOURTH
of DATUM])
]
(/DECLAREDATATYPE (QUOTE HISTOGRAM.BINS)
(QUOTE (POINTER POINTER POINTER POINTER))
(QUOTE ((HISTOGRAM.BINS 0 POINTER)
(HISTOGRAM.BINS 2 POINTER)
(HISTOGRAM.BINS 4 POINTER)
(HISTOGRAM.BINS 6 POINTER)))
(QUOTE 8))
(/DECLAREDATATYPE (QUOTE LETTERVALUES)
(QUOTE (FIXP FLOATP FLOATP FLOATP FLOATP FLOATP FLOATP FLOATP FLOATP FLOATP FLOATP))
(QUOTE ((LETTERVALUES 0 FIXP)
(LETTERVALUES 2 FLOATP)
(LETTERVALUES 4 FLOATP)
(LETTERVALUES 6 FLOATP)
(LETTERVALUES 8 FLOATP)
(LETTERVALUES 10 FLOATP)
(LETTERVALUES 12 FLOATP)
(LETTERVALUES 14 FLOATP)
(LETTERVALUES 16 FLOATP)
(LETTERVALUES 18 FLOATP)
(LETTERVALUES 20 FLOATP)))
(QUOTE 22))
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDTOVAR NLAMA )
(ADDTOVAR NLAML )
(ADDTOVAR LAMA BOXPLOTS)
)
(PUTPROPS IDLPLOT COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (1759 83266 (ADDCURVESTOPLOT 1769 . 2462) (ADDCURVETOPLOT 2464 . 4203) (
ADDFILLEDRECTANGLESTOPLOT 4205 . 6687) (ADDLINESTOPLOT 6689 . 8960) (ADDPOINTSTOPLOT 8962 . 10531) (
ADDPOLYGONSTOPLOT 10533 . 11248) (ADDPOLYGONTOPLOT 11250 . 12982) (BOXPLOTS 12984 . 15458) (
BOXPLOT.COMPAREFN 15460 . 15786) (BOXPLOT.COMPUTETICS 15788 . 16488) (BOXPLOT.DELETE 16490 . 18360) (
BOXPLOT.LABEL 18362 . 19002) (BOXPLOT.MOVE 19004 . 23070) (BOXPLOT.WHENADDEDFN 23072 . 23538) (
BOXPLOT.WHENDELETEDFN 23540 . 24018) (BOXPLOT.HISTOGRAM 24020 . 24260) (BOXPLOT.MAKEBOX 24262 . 27915)
(BOXPLOT.SUMMARY 27917 . 28399) (COPYBOXPLOT 28401 . 28883) (COPYHISTOGRAM 28885 . 29904) (
COPYSCATTERPLOT 29906 . 30572) (FIRSTHIDDENLEVLABEL 30574 . 31206) (FLIPBOX 31208 . 32943) (
GETHIDDENLEVLABELS 32945 . 33861) (GETLETTERVALUES 33863 . 35697) (GETSUMMARYWINDOW 35699 . 36879) (
GETVALUEATDEPTH 36881 . 37429) (HISTOGRAM 37431 . 41369) (HISTOGRAM.BOXSUMMARY 41371 . 42106) (
HISTOGRAM.CHANGEBINS 42108 . 44283) (HISTOGRAM.COMPUTEMULT 44285 . 44777) (HISTOGRAM.DELETEQUANTILES
44779 . 45249) (HISTOGRAM.DISPLAYQUANTILES 45251 . 46549) (HISTOGRAM.DRAW 46551 . 51240) (
HISTOGRAM.INTSCALEFN 51242 . 51495) (HISTOGRAM.INTTICFN 51497 . 52294) (HISTOGRAM.MAKEBININTERVAL
52296 . 53336) (HISTOGRAM.RESET 53338 . 53962) (HISTOGRAM.SUMMARY 53964 . 54376) (HISTOGRAM.TICFN
54378 . 55380) (HISTOGRAM.VALUES 55382 . 56234) (LETTER.VALUE.DISPLAY 56236 . 59903) (MAKEBOXOBJECT
59905 . 62004) (SCATTERPLOT 62006 . 65558) (SCATTERPLOT.POINTCOORDS 65560 . 66284) (
SCATTERPLOT.POINTSORCURVES 66286 . 67946) (SCATTERPLOT.REGRESS 67948 . 70505) (
SCATTERPLOT.REGRESSSUMMARY 70507 . 70877) (SCATTERPLOT.RUNNINGAVERAGE 70879 . 73600) (
SCATTERPLOT.RUNNINGREGRESS 73602 . 77578) (SCATTERPLOT.SMOOTHEDVALUE 77580 . 78168) (
SCATTERPLOT.WORLDCOORD 78170 . 80435) (SUMMARY.REPAINTFN 80437 . 81270) (SUMMARY.RESHAPEFN 81272 .
82026) (SUMMARYWINDOW.PRINT 82028 . 83264)))))
STOP