Plotting packages for the Sun (summary) (very long post)

From: Matthew Gertz (mwgertz+@cs.cmu.edu)
Date: Thu Jun 11 1992 - 09:12:35 CDT


(Note: I can't take credit for this. It was forwarded to me from a
friend at JPL, where it has apparently bounced around for a week or two.
The original author said to go ahead and post it to the net, with the
normal disclaimers about accuracy, etc. It does a pretty good job of
summarizing the various possibilities, and at the end there is a
postscript file which apparently charts the various packages against
each other (I haven't looked at it yet)). With all this in mind,
here is the summary of graphics packages. I apologize for taking up so
much bandwidth with this, but since people have expressed an interest,
here it is...)

----- Begin Included Message -----

Newsgroups: jpl.mail.sun-managers
From: don@mars.dgrc.doc.ca (Donald McLachlan)
Subject: SUMMARY: scientific plotiing tools
Organization: Internet
Date: Fri, 1 May 1992 16:42:32 GMT

First, my original request.

----- Begin Included Message -----

We are looking for a scientific plotting tool/package which can be
used stand-alone, or be called from within a C or Fortran program.

It would be nice to use an emerging standard, or a current (de-facto?)
standard.

Please let me know what you use. Do you like it? Good/bad points, etc.
As usual, I will post a summary.

Thanks, Don

----- End Included Message -----

Well, as I expected the responses look a bit like a scatter-graph. Here is
a highly compressed review of the products recommended, and the number of
people who recommended each

Package Replies
Gnuplot 2 - good interactive PD software.
                          - Supports Postscript
                          - no programatic interface, but can open a
                            pipe to it and do it that way. (prog | gnuplot)
IMSL 2 - interactive; C/Fortran callable, free trial avail.
PVWave 1
Figaro from Liant corp 2 - C and Fortran callable
                          - Phigs based
                          - Figaro+ is long winded but complete
                          - FigGraph is a higher level interface.
                          - sort of like an updated DISSPLA.
Uniras 1
Mongo 1 - PD
                          - Well written
                          - easy to use plotting package.
Super Mongo (smongo) 1 - Improved version of Mongo
                          - better IO device support
                          - ~$250
{ both Mongo packages have interactive and funtion interfaces and are
  quick and easy to learn}
GMT 1 - PD
                          - clean C code
                          - lots of documentation
                          - supports postscript output
xvgr - OpenLook/Sun 2 - PD, described as powerful
xmgr - Motif/HP/DEC/RS6000
NCAR Autograph 1
ACE/gr 1 - PD
                          - good XY plotting tool for X
                          - good funtions/options, many std output formats
TempleGraph 1 - good for quick looks and some data manipulation.
ATAPLOT 1 - Very established product developed on HP
                          - should run on most reasonable UNIX platforms now.

There was one very special reply from hal@mpl.UCSD.EDU, who provided his
results of 4 months of work evaluating many plotting packages. I am includeing
his whole reply for the common benefit on the net. His only request was

        "Feel free to post this to the net with a disclaimer about
        accuracy (I sure don't guarantee it but I think I have most
        of it right)."

----- Begin Included Message -----

>From hal@mpl.UCSD.EDU Tue Apr 28 13:17:57 1992
Return-Path: <hal@mpl.UCSD.EDU>
Received: from ucsd.edu by mars.dgrc.doc.ca (4.1/SMI-4.1)
        id AA03011; Tue, 28 Apr 92 13:17:44 EDT
Received: from lambis.ucsd.edu by ucsd.edu; id AA06541
        sendmail 5.64/UCSD-2.2-sun via SMTP
        Tue, 28 Apr 92 10:23:08 -0700 for don@mars.dgrc.doc.ca
Received: by lambis.UCSD.EDU (4.1/UCSDPSEUDO.3-MPL.1)
        id AA05099 for don@mars.dgrc.doc.ca; Tue, 28 Apr 92 10:23:04 PDT
Date: Tue, 28 Apr 92 10:23:04 PDT
From: hal@mpl.UCSD.EDU (Hal Skelly)
Message-Id: <9204281723.AA05099@lambis.UCSD.EDU>
To: don@mars.dgrc.doc.ca
Subject: Re: plotting packages
Content-Type: X-sun-attachment
Status: RO

----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Content-Lines: 14

Dear Don,

I've just spent (and continue to spend) the last 4 months trying out plotting
software for the Marine Physical Lab, Scripps Institution of Oceanography.
I'm enclosing a text summary and graphic table of comparisons. Most of our
data is in a local binary file format know as (suprisingly) SIO data. Most of
our users are concerned with an easy interface between that format and any
package. I have noted however the input options available. Virtually all of
them read raw ascii input. Feel free to post this to the net with a disclaimer
about accuracy (I sure don't guarantee it but I think I have most of it right).

         Hal Skelly, System Administrator for the Marine Physical Lab
           Scripps Institution of Oceanography, Univ. of Calif. San Diego
              Internet: hal@mpl.ucsd.edu, voice (619) 534-5954
----------
X-Sun-Data-Type: postscript-file
X-Sun-Data-Description: postscript-file
X-Sun-Data-Name: graphtable.ps
X-Sun-Content-Lines: 1392

%!
%%BoundingBox: (atend)
%%Pages: (atend)
%%DocumentFonts: (atend)
%%EndComments
%
% FrameMaker PostScript Prolog 3.0, for use with FrameMaker 3.0
% Copyright (c) 1986,87,89,90,91 by Frame Technology Corporation.
% All rights reserved.
%
% Known Problems:
% Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1
/FMversion (3.0) def
% Set up Color vs. Black-and-White
        /FMPrintInColor systemdict /colorimage known
                systemdict /currentcolortransfer known or def
% Uncomment this line to force b&w on color printer
% /FMPrintInColor false def
/FrameDict 195 dict def
systemdict /errordict known not {/errordict 10 dict def
                errordict /rangecheck {stop} put} if
% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk
FrameDict /tmprangecheck errordict /rangecheck get put
errordict /rangecheck {FrameDict /bug true put} put
FrameDict /bug false put
mark
% Some PS machines read past the CR, so keep the following 3 lines together!
currentfile 5 string readline
00
0000000000
cleartomark
errordict /rangecheck FrameDict /tmprangecheck get put
FrameDict /bug get {
        /readline {
                /gstring exch def
                /gfile exch def
                /gindex 0 def
                {
                        gfile read pop
                        dup 10 eq {exit} if
                        dup 13 eq {exit} if
                        gstring exch gindex exch put
                        /gindex gindex 1 add def
                } loop
                pop
                gstring 0 gindex getinterval true
                } def
        } if
/FMVERSION {
        FMversion ne {
                /Times-Roman findfont 18 scalefont setfont
                100 100 moveto
                (FrameMaker version does not match postscript_prolog!)
                dup =
                show showpage
                } if
        } def
/FMLOCAL {
        FrameDict begin
        0 def
        end
        } def
        /gstring FMLOCAL
        /gfile FMLOCAL
        /gindex FMLOCAL
        /orgxfer FMLOCAL
        /orgproc FMLOCAL
        /organgle FMLOCAL
        /orgfreq FMLOCAL
        /yscale FMLOCAL
        /xscale FMLOCAL
        /manualfeed FMLOCAL
        /paperheight FMLOCAL
        /paperwidth FMLOCAL
/FMDOCUMENT {
        array /FMfonts exch def
        /#copies exch def
        FrameDict begin
        0 ne dup {setmanualfeed} if
        /manualfeed exch def
        /paperheight exch def
        /paperwidth exch def
        /yscale exch def
        /xscale exch def
        currenttransfer cvlit /orgxfer exch def
        currentscreen cvlit /orgproc exch def
        /organgle exch def /orgfreq exch def
        setpapername
        manualfeed {true} {papersize} ifelse
        {manualpapersize} {false} ifelse
        {desperatepapersize} if
        end
        } def
        /pagesave FMLOCAL
        /orgmatrix FMLOCAL
        /landscape FMLOCAL
/FMBEGINPAGE {
        FrameDict begin
        /pagesave save def
        3.86 setmiterlimit
        /landscape exch 0 ne def
        landscape {
                90 rotate 0 exch neg translate pop
                }
                {pop pop}
                ifelse
        xscale yscale scale
        /orgmatrix matrix def
        gsave
        } def
/FMENDPAGE {
        grestore
        pagesave restore
        end
        showpage
        } def
/FMFONTDEFINE {
        FrameDict begin
        findfont
        ReEncode
        1 index exch
        definefont
        FMfonts 3 1 roll
        put
        end
        } def
/FMFILLS {
        FrameDict begin
        array /fillvals exch def
        end
        } def
/FMFILL {
        FrameDict begin
         fillvals 3 1 roll put
        end
        } def
/FMNORMALIZEGRAPHICS {
        newpath
        0.0 0.0 moveto
        1 setlinewidth
        0 setlinecap
        0 0 0 sethsbcolor
        0 setgray
        } bind def
        /fx FMLOCAL
        /fy FMLOCAL
        /fh FMLOCAL
        /fw FMLOCAL
        /llx FMLOCAL
        /lly FMLOCAL
        /urx FMLOCAL
        /ury FMLOCAL
/FMBEGINEPSF {
        end
        /FMEPSF save def
        /showpage {} def
        FMNORMALIZEGRAPHICS
        [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall
        fx fy translate
        rotate
        fw urx llx sub div fh ury lly sub div scale
        llx neg lly neg translate
        } bind def
/FMENDEPSF {
        FMEPSF restore
        FrameDict begin
        } bind def
FrameDict begin
/setmanualfeed {
%%BeginFeature *ManualFeed True
         statusdict /manualfeed true put
%%EndFeature
        } def
/max {2 copy lt {exch} if pop} bind def
/min {2 copy gt {exch} if pop} bind def
/inch {72 mul} def
/pagedimen {
        paperheight sub abs 16 lt exch
        paperwidth sub abs 16 lt and
        {/papername exch def} {pop} ifelse
        } def
        /papersizedict FMLOCAL
/setpapername {
        /papersizedict 14 dict def
        papersizedict begin
        /papername /unknown def
                /Letter 8.5 inch 11.0 inch pagedimen
                /LetterSmall 7.68 inch 10.16 inch pagedimen
                /Tabloid 11.0 inch 17.0 inch pagedimen
                /Ledger 17.0 inch 11.0 inch pagedimen
                /Legal 8.5 inch 14.0 inch pagedimen
                /Statement 5.5 inch 8.5 inch pagedimen
                /Executive 7.5 inch 10.0 inch pagedimen
                /A3 11.69 inch 16.5 inch pagedimen
                /A4 8.26 inch 11.69 inch pagedimen
                /A4Small 7.47 inch 10.85 inch pagedimen
                /B4 10.125 inch 14.33 inch pagedimen
                /B5 7.16 inch 10.125 inch pagedimen
        end
        } def
/papersize {
        papersizedict begin
                /Letter {lettertray letter} def
                /LetterSmall {lettertray lettersmall} def
                /Tabloid {11x17tray 11x17} def
                /Ledger {ledgertray ledger} def
                /Legal {legaltray legal} def
                /Statement {statementtray statement} def
                /Executive {executivetray executive} def
                /A3 {a3tray a3} def
                /A4 {a4tray a4} def
                /A4Small {a4tray a4small} def
                /B4 {b4tray b4} def
                /B5 {b5tray b5} def
                /unknown {unknown} def
        papersizedict dup papername known {papername} {/unknown} ifelse get
        end
        /FMdicttop countdictstack 1 add def
        statusdict begin stopped end
        countdictstack -1 FMdicttop {pop end} for
        } def
/manualpapersize {
        papersizedict begin
                /Letter {letter} def
                /LetterSmall {lettersmall} def
                /Tabloid {11x17} def
                /Ledger {ledger} def
                /Legal {legal} def
                /Statement {statement} def
                /Executive {executive} def
                /A3 {a3} def
                /A4 {a4} def
                /A4Small {a4small} def
                /B4 {b4} def
                /B5 {b5} def
                /unknown {unknown} def
        papersizedict dup papername known {papername} {/unknown} ifelse get
        end
        stopped
        } def
/desperatepapersize {
        statusdict /setpageparams known
                {
                paperwidth paperheight 0 1
                statusdict begin
                {setpageparams} stopped pop
                end
                } if
        } def
/savematrix {
        orgmatrix currentmatrix pop
        } bind def
/restorematrix {
        orgmatrix setmatrix
        } bind def
/dmatrix matrix def
/dpi 72 0 dmatrix defaultmatrix dtransform
    dup mul exch dup mul add sqrt def
/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def
/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
/DiacriticEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
/numbersign /dollar /percent /ampersand /quotesingle /parenleft
/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
/two /three /four /five /six /seven /eight /nine /colon /semicolon
/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
/udieresis /dagger /.notdef /cent /sterling /section /bullet
/paragraph /germandbls /registered /copyright /trademark /acute
/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
/periodcentered /quotesinglbase /quotedblbase /perthousand
/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
] def
/ReEncode {
        dup
        length
        dict begin
        {
        1 index /FID ne
                {def}
                {pop pop} ifelse
        } forall
        0 eq {/Encoding DiacriticEncoding def} if
        currentdict
        end
        } bind def
/graymode true def
        /bwidth FMLOCAL
        /bpside FMLOCAL
        /bstring FMLOCAL
        /onbits FMLOCAL
        /offbits FMLOCAL
        /xindex FMLOCAL
        /yindex FMLOCAL
        /x FMLOCAL
        /y FMLOCAL
/setpattern {
         /bwidth exch def
         /bpside exch def
         /bstring exch def
         /onbits 0 def /offbits 0 def
         freq sangle landscape {90 add} if
                {/y exch def
                 /x exch def
                 /xindex x 1 add 2 div bpside mul cvi def
                 /yindex y 1 add 2 div bpside mul cvi def
                 bstring yindex bwidth mul xindex 8 idiv add get
                 1 7 xindex 8 mod sub bitshift and 0 ne
                 {/onbits onbits 1 add def 1}
                 {/offbits offbits 1 add def 0}
                 ifelse
                }
                setscreen
         {} settransfer
         offbits offbits onbits add div FMsetgray
        /graymode false def
        } bind def
/grayness {
        FMsetgray
        graymode not {
                /graymode true def
                orgxfer cvx settransfer
                orgfreq organgle orgproc cvx setscreen
                } if
        } bind def
        /HUE FMLOCAL
        /SAT FMLOCAL
        /BRIGHT FMLOCAL
        /Colors FMLOCAL
FMPrintInColor
        
        {
        /HUE 0 def
        /SAT 0 def
        /BRIGHT 0 def
        % array of arrays Hue and Sat values for the separations [HUE BRIGHT]
        /Colors
        [[0 0 ] % black
         [0 0 ] % white
         [0.00 1.0] % red
         [0.37 1.0] % green
         [0.60 1.0] % blue
         [0.50 1.0] % cyan
         [0.83 1.0] % magenta
         [0.16 1.0] % comment / yellow
         ] def
      
        /BEGINBITMAPCOLOR {
                BITMAPCOLOR} def
        /BEGINBITMAPCOLORc {
                BITMAPCOLORc} def
        /BEGINBITMAPTRUECOLOR {
                BITMAPTRUECOLOR } def
        /BEGINBITMAPCOLORc {
                BITMAPTRUECOLORc } def
        /K {
                Colors exch get dup
                0 get /HUE exch store
                1 get /BRIGHT exch store
                  HUE 0 eq BRIGHT 0 eq and
                        {1.0 SAT sub setgray}
                        {HUE SAT BRIGHT sethsbcolor}
                  ifelse
                } def
        /FMsetgray {
                /SAT exch 1.0 exch sub store
                  HUE 0 eq BRIGHT 0 eq and
                        {1.0 SAT sub setgray}
                        {HUE SAT BRIGHT sethsbcolor}
                  ifelse
                } bind def
        }
        
        {
        /BEGINBITMAPCOLOR {
                BITMAPGRAY} def
        /BEGINBITMAPCOLORc {
                BITMAPGRAYc} def
        /BEGINBITMAPTRUECOLOR {
                BITMAPTRUEGRAY } def
        /BEGINBITMAPTRUECOLORc {
                BITMAPTRUEGRAYc } def
        /FMsetgray {setgray} bind def
        /K {
                pop
                } def
        }
ifelse
/normalize {
        transform round exch round exch itransform
        } bind def
/dnormalize {
        dtransform round exch round exch idtransform
        } bind def
/lnormalize {
        0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
        } bind def
/H {
        lnormalize setlinewidth
        } bind def
/Z {
        setlinecap
        } bind def
        /fillvals FMLOCAL
/X {
        fillvals exch get
        dup type /stringtype eq
        {8 1 setpattern}
        {grayness}
        ifelse
        } bind def
/V {
        gsave eofill grestore
        } bind def
/N {
        stroke
        } bind def
/M {newpath moveto} bind def
/E {lineto} bind def
/D {curveto} bind def
/O {closepath} bind def
        /n FMLOCAL
/L {
         /n exch def
        newpath
        normalize
        moveto
        2 1 n {pop normalize lineto} for
        } bind def
/Y {
        L
        closepath
        } bind def
        /x1 FMLOCAL
        /x2 FMLOCAL
        /y1 FMLOCAL
        /y2 FMLOCAL
        /rad FMLOCAL
/R {
        /y2 exch def
        /x2 exch def
        /y1 exch def
        /x1 exch def
        x1 y1
        x2 y1
        x2 y2
        x1 y2
        4 Y
        } bind def
/RR {
        /rad exch def
        normalize
        /y2 exch def
        /x2 exch def
        normalize
        /y1 exch def
        /x1 exch def
        newpath
        x1 y1 rad add moveto
        x1 y2 x2 y2 rad arcto
        x2 y2 x2 y1 rad arcto
        x2 y1 x1 y1 rad arcto
        x1 y1 x1 y2 rad arcto
        closepath
        16 {pop} repeat
        } bind def
/C {
        grestore
        gsave
        R
        clip
        } bind def
        /FMpointsize FMLOCAL
/F {
        FMfonts exch get
        FMpointsize scalefont
        setfont
        } bind def
/Q {
        /FMpointsize exch def
        F
        } bind def
/T {
        moveto show
        } bind def
/RF {
        rotate
        0 ne {-1 1 scale} if
        } bind def
/TF {
        gsave
        moveto
        RF
        show
        grestore
        } bind def
/P {
        moveto
        0 32 3 2 roll widthshow
        } bind def
/PF {
        gsave
        moveto
        RF
        0 32 3 2 roll widthshow
        grestore
        } bind def
/S {
        moveto
        0 exch ashow
        } bind def
/SF {
        gsave
        moveto
        RF
        0 exch ashow
        grestore
        } bind def
/B {
        moveto
        0 32 4 2 roll 0 exch awidthshow
        } bind def
/BF {
        gsave
        moveto
        RF
        0 32 4 2 roll 0 exch awidthshow
        grestore
        } bind def
/G {
        gsave
        newpath
        normalize translate 0.0 0.0 moveto
        dnormalize scale
        0.0 0.0 1.0 5 3 roll arc
        closepath fill
        grestore
        } bind def
/A {
        gsave
        savematrix
        newpath
        2 index 2 div add exch 3 index 2 div sub exch
        normalize 2 index 2 div sub exch 3 index 2 div add exch
        translate
        scale
        0.0 0.0 1.0 5 3 roll arc
        restorematrix
        stroke
        grestore
        } bind def
        /x FMLOCAL
        /y FMLOCAL
        /w FMLOCAL
        /h FMLOCAL
        /xx FMLOCAL
        /yy FMLOCAL
        /ww FMLOCAL
        /hh FMLOCAL
        /FMsaveobject FMLOCAL
        /FMoptop FMLOCAL
        /FMdicttop FMLOCAL
/BEGINPRINTCODE {
        /FMdicttop countdictstack 1 add def
        /FMoptop count 4 sub def
        /FMsaveobject save def
        userdict begin
        /showpage {} def
        FMNORMALIZEGRAPHICS
        3 index neg 3 index neg translate
        } bind def
/ENDPRINTCODE {
        count -1 FMoptop {pop pop} for
        countdictstack -1 FMdicttop {pop end} for
        FMsaveobject restore
        } bind def
/gn {
        0
        { 46 mul
                cf read pop
                32 sub
                dup 46 lt {exit} if
                46 sub add
                } loop
        add
        } bind def
        /str FMLOCAL
/cfs {
        /str sl string def
        0 1 sl 1 sub {str exch val put} for
        str def
        } bind def
/ic [
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
        0
        {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
        {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
        {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
        {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
        {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
        {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
        {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
        {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
        {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
        ] def
        /sl FMLOCAL
        /val FMLOCAL
        /ws FMLOCAL
        /im FMLOCAL
        /bs FMLOCAL
        /cs FMLOCAL
        /len FMLOCAL
        /pos FMLOCAL
/ms {
        /sl exch def
        /val 255 def
        /ws cfs
        /im cfs
        /val 0 def
        /bs cfs
        /cs cfs
        } bind def
400 ms
/ip {
        is
        0
        cf cs readline pop
        { ic exch get exec
                add
                } forall
        pop
        
        } bind def
/wh {
        /len exch def
        /pos exch def
        ws 0 len getinterval im pos len getinterval copy pop
        pos len
        } bind def
/bl {
        /len exch def
        /pos exch def
        bs 0 len getinterval im pos len getinterval copy pop
        pos len
        } bind def
/s1 1 string def
/fl {
        /len exch def
        /pos exch def
        /val cf s1 readhexstring pop 0 get def
        pos 1 pos len add 1 sub {im exch val put} for
        pos len
        } bind def
/hx {
        3 copy getinterval
        cf exch readhexstring pop pop
        } bind def
        /h FMLOCAL
        /w FMLOCAL
        /d FMLOCAL
        /lb FMLOCAL
        /bitmapsave FMLOCAL
        /is FMLOCAL
        /cf FMLOCAL
/wbytes {
        dup
        8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse
        } bind def
/BEGINBITMAPBWc {
        1 {} COMMONBITMAPc
        } bind def
/BEGINBITMAPGRAYc {
        8 {} COMMONBITMAPc
        } bind def
/BEGINBITMAP2BITc {
        2 {} COMMONBITMAPc
        } bind def
/COMMONBITMAPc {
        /r exch def
        /d exch def
        gsave
        translate rotate scale /h exch def /w exch def
        /lb w d wbytes def
        sl lb lt {lb ms} if
        /bitmapsave save def
        r
        /is im 0 lb getinterval def
        ws 0 lb getinterval is copy pop
        /cf currentfile def
        w h d [w 0 0 h neg 0 h]
        {ip} image
        bitmapsave restore
        grestore
        } bind def
/BEGINBITMAPBW {
        1 {} COMMONBITMAP
        } bind def
/BEGINBITMAPGRAY {
        8 {} COMMONBITMAP
        } bind def
/BEGINBITMAP2BIT {
        2 {} COMMONBITMAP
        } bind def
/COMMONBITMAP {
        /r exch def
        /d exch def
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        r
        /is w d wbytes string def
        /cf currentfile def
        w h d [w 0 0 h neg 0 h]
        {cf is readhexstring pop} image
        bitmapsave restore
        grestore
        } bind def
        /proc1 FMLOCAL
        /proc2 FMLOCAL
        /newproc FMLOCAL
/Fmcc {
    /proc2 exch cvlit def
    /proc1 exch cvlit def
    /newproc proc1 length proc2 length add array def
    newproc 0 proc1 putinterval
    newproc proc1 length proc2 putinterval
    newproc cvx
} bind def
/ngrayt 256 array def
/nredt 256 array def
/nbluet 256 array def
/ngreent 256 array def
        /gryt FMLOCAL
        /blut FMLOCAL
        /grnt FMLOCAL
        /redt FMLOCAL
        /indx FMLOCAL
        /cynu FMLOCAL
        /magu FMLOCAL
        /yelu FMLOCAL
        /k FMLOCAL
        /u FMLOCAL
/colorsetup {
        currentcolortransfer
        /gryt exch def
        /blut exch def
        /grnt exch def
        /redt exch def
        0 1 255 {
                /indx exch def
                /cynu 1 red indx get 255 div sub def
                /magu 1 green indx get 255 div sub def
                /yelu 1 blue indx get 255 div sub def
                /k cynu magu min yelu min def
                /u k currentundercolorremoval exec def
                nredt indx 1 0 cynu u sub max sub redt exec put
                ngreent indx 1 0 magu u sub max sub grnt exec put
                nbluet indx 1 0 yelu u sub max sub blut exec put
                ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
        } for
        {255 mul cvi nredt exch get}
        {255 mul cvi ngreent exch get}
        {255 mul cvi nbluet exch get}
        {255 mul cvi ngrayt exch get}
        setcolortransfer
        {pop 0} setundercolorremoval
        {} setblackgeneration
        } bind def
        /tran FMLOCAL
/fakecolorsetup {
        /tran 256 string def
        0 1 255 {/indx exch def
                tran indx
                red indx get 77 mul
                green indx get 151 mul
                blue indx get 28 mul
                add add 256 idiv put} for
        currenttransfer
        {255 mul cvi tran exch get 255.0 div}
        exch Fmcc settransfer
} bind def
/BITMAPCOLOR {
        /d 8 def
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        colorsetup
        /is w d wbytes string def
        /cf currentfile def
        w h d [w 0 0 h neg 0 h]
        {cf is readhexstring pop} {is} {is} true 3 colorimage
        bitmapsave restore
        grestore
        } bind def
/BITMAPCOLORc {
        /d 8 def
        gsave
        translate rotate scale /h exch def /w exch def
        /lb w d wbytes def
        sl lb lt {lb ms} if
        /bitmapsave save def
        colorsetup
        /is im 0 lb getinterval def
        ws 0 lb getinterval is copy pop
        /cf currentfile def
        w h d [w 0 0 h neg 0 h]
        {ip} {is} {is} true 3 colorimage
        bitmapsave restore
        grestore
        } bind def
/BITMAPTRUECOLORc {
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        
        /is w string def
        
        ws 0 w getinterval is copy pop
        /cf currentfile def
        w h 8 [w 0 0 h neg 0 h]
        {ip} {gip} {bip} true 3 colorimage
        bitmapsave restore
        grestore
        } bind def
/BITMAPTRUECOLOR {
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def
        w h 8 [w 0 0 h neg 0 h]
        { cf is readhexstring pop }
        { cf gis readhexstring pop }
        { cf bis readhexstring pop }
        true 3 colorimage
        bitmapsave restore
        grestore
        } bind def
/BITMAPTRUEGRAYc {
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        
        /is w string def
        
        ws 0 w getinterval is copy pop
        /cf currentfile def
        w h 8 [w 0 0 h neg 0 h]
        {ip gip bip w gray} image
        bitmapsave restore
        grestore
        } bind def
/ww FMLOCAL
/r FMLOCAL
/g FMLOCAL
/b FMLOCAL
/i FMLOCAL
/gray {
        /ww exch def
        /b exch def
        /g exch def
        /r exch def
        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
                        b i get .114 mul add add r i 3 -1 roll floor cvi put } for
        r
        } bind def
/BITMAPTRUEGRAY {
        gsave
        translate rotate scale /h exch def /w exch def
        /bitmapsave save def
        /is w string def
        /gis w string def
        /bis w string def
        /cf currentfile def
        w h 8 [w 0 0 h neg 0 h]
        { cf is readhexstring pop
          cf gis readhexstring pop
          cf bis readhexstring pop w gray} image
        bitmapsave restore
        grestore
        } bind def
/BITMAPGRAY {
        8 {fakecolorsetup} COMMONBITMAP
        } bind def
/BITMAPGRAYc {
        8 {fakecolorsetup} COMMONBITMAPc
        } bind def
/ENDBITMAP {
        } bind def
end
        /ALDsave FMLOCAL
        /ALDmatrix matrix def ALDmatrix currentmatrix pop
/StartALD {
        /ALDsave save def
         savematrix
         ALDmatrix setmatrix
        } bind def
/InALD {
         restorematrix
        } bind def
/DoneALD {
         ALDsave restore
        } bind def
%%EndProlog
%%BeginSetup
(3.0) FMVERSION
1 1 612 792 0 1 1 FMDOCUMENT
0 0 /Times-Roman FMFONTDEFINE
32 FMFILLS
0 0 FMFILL
1 .1 FMFILL
2 .3 FMFILL
3 .5 FMFILL
4 .7 FMFILL
5 .9 FMFILL
6 .97 FMFILL
7 1 FMFILL
8 <0f1e3c78f0e1c387> FMFILL
9 <0f87c3e1f0783c1e> FMFILL
10 <cccccccccccccccc> FMFILL
11 <ffff0000ffff0000> FMFILL
12 <8142241818244281> FMFILL
13 <03060c183060c081> FMFILL
14 <8040201008040201> FMFILL
16 1 FMFILL
17 .9 FMFILL
18 .7 FMFILL
19 .5 FMFILL
20 .3 FMFILL
21 .1 FMFILL
22 0.03 FMFILL
23 0 FMFILL
24 <f0e1c3870f1e3c78> FMFILL
25 <f0783c1e0f87c3e1> FMFILL
26 <3333333333333333> FMFILL
27 <0000ffff0000ffff> FMFILL
28 <7ebddbe7e7dbbd7e> FMFILL
29 <fcf9f3e7cf9f3f7e> FMFILL
30 <7fbfdfeff7fbfdfe> FMFILL
%%EndSetup
%%Page: "1" 1
%%BeginPaperSize: Letter
%%EndPaperSize
612 792 1 FMBEGINPAGE
0 12 Q
0 X
0 K
(Color) 46.96 626.17 T
(Cut \050overall\051) 46.96 683.16 T
(X1) 46.96 504.32 T
(1/OpenW) 61.18 504.32 T
(indows/Motif) 107.33 504.32 T
(Fonts) 46.96 718.59 T
(-regions) 88.15 652.86 T
(-points) 88.15 668.01 T
(V) 46.96 698.3 T
(alue locator) 54.29 698.3 T
(PostScript output) 46.96 640.81 T
(Easy 2D graph) 46.96 592.26 T
(Magnify area) 46.96 607.41 T
(Input \050overall\051) 46.96 578.49 T
(-SIO data) 46.96 564.5 T
(-ASCII data) 79.82 550.33 T
(-R,theta) 80.65 531.67 T
(Portable) 46.96 519.49 T
(Interactive \050overall\051) 46.96 486.22 T
(-labels) 74.99 471.07 T
(-plot symbols) 74.99 455.92 T
(-line attributes) 74.99 440.77 T
(Scriptable) 46.96 425.62 T
(Create legend) 46.96 410.48 T
(Overlay plots) 46.96 395.33 T
(Axes arbitrary dir) 46.96 380.18 T
(.) 131.57 380.18 T
(Demo available) 46.96 365.03 T
(Polar plots) 46.96 349.88 T
(Polar plots axis labelling) 46.96 334.73 T
(Contour routines) 46.96 319.58 T
(Page composition) 46.96 304.43 T
(Symbols in 3D graph) 46.96 289.29 T
(3D interactive rotations) 46.96 274.14 T
(Exact inch:inch scaling) 46.96 258.99 T
(Licensing) 46.96 243.84 T
(Cost) 46.96 228.69 T
(PV) 253.57 745 T
(-W) 267.79 745 T
(ave) 282.15 745 T
(KHOROS) 314.64 745 T
(XVGR) 379.44 745 T
(Gnuplot) 437.23 745 T
(PlotXY) 497.69 745 T
(DADisp) 556.33 745 T
(Robot) 622.26 745 T
(Package Name) 194.95 767.32 T
35 728 721 728 2 L
0.5 H
2 Z
N
35 712.82 721 712.82 2 L
N
35 697.64 721 697.64 2 L
N
35 682.46 721 682.46 2 L
N
35 667.27 721 667.27 2 L
N
35 652.09 721 652.09 2 L
N
35 635.11 721 635.11 2 L
N
35 621.73 721 621.73 2 L
N
35 606.55 721 606.55 2 L
N
35 589.16 721 589.16 2 L
N
35 573.4 721 573.4 2 L
N
34.17 561 720.17 561 2 L
N
35 545.82 721 545.82 2 L
N
35 530.64 721 530.64 2 L
N
35 513.92 721 513.92 2 L
N
35 498.77 721 498.77 2 L
N
35 485.09 721 485.09 2 L
N
35 469.91 721 469.91 2 L
N
35 454.73 721 454.73 2 L
N
35 439.55 721 439.55 2 L
N
35 424.36 721 424.36 2 L
N
35 409.18 721 409.18 2 L
N
35 394 721 394 2 L
N
35 378.82 721 378.82 2 L
N
35 348.45 721 348.45 2 L
N
35 363.64 721 363.64 2 L
N
35 333.27 721 333.27 2 L
N
35 318.09 721 318.09 2 L
N
35 302.91 721 302.91 2 L
N
32.14 286.3 718.14 286.3 2 L
N
35 272.55 721 272.55 2 L
N
35 257.36 721 257.36 2 L
N
35 240.4 721 240.4 2 L
N
35 227 721 227 2 L
N
36 738.61 722 738.61 2 L
3 H
N
33.12 755.75 722.25 756.85 2 L
N
35 224.86 721 224.86 2 L
N
33 752 32 223 2 L
N
724 757 723 228 2 L
N
187.6 754.95 186.6 225.95 2 L
N
250.63 755.71 250.63 229.71 2 L
1 H
N
309.74 755 309.74 229 2 L
N
368.85 755 368.85 229 2 L
N
427.96 755 427.96 229 2 L
N
487.07 754.05 487.07 229.05 2 L
N
546.17 756.31 546.17 230.31 2 L
N
605.28 755 605.28 229 2 L
N
(Features:) 89.02 744.32 T
(SIOPS) 202.06 745 T
(hershey) 200.63 718.28 T
(++) 273.39 718.28 T
(++) 332.53 718.28 T
(++) 389.7 718.28 T
(+) 453.9 718.28 T
(-) 514.06 716.83 T
(-) 217.28 703.17 T
(+) 214.19 685.17 T
(+) 214.19 656.17 T
(-) 215.58 670 T
(+/-) 210.53 640.81 T
(-) 215.58 626.17 T
(+) 214.19 595.22 T
(+) 214.19 578.49 T
(+) 214.19 564.5 T
(-) 214.75 550.33 T
(+) 213.84 538.35 T
(-) 216.65 519.49 T
(-) 216.65 504.32 T
(-) 216.65 489.78 T
(+) 215.27 476.21 T
(+) 215.27 459.78 T
(+) 215.27 446.21 T
(+) 215.27 429.07 T
(+) 215.27 416.21 T
(+) 215.27 401.21 T
(+) 215.27 385.5 T
(yes) 210.87 367 T
(+) 215.27 355.5 T
(+) 215.27 324.78 T
(+) 215.27 309.78 T
(-) 216.65 279.07 T
(+) 215.27 264.78 T
(none) 206.99 247 T
(0) 216 231.16 T
(-) 455.29 701.29 T
(-) 455.29 688.43 T
(+/-) 450.24 672.71 T
(-) 455.29 656.29 T
(+) 453.9 640.81 T
(++) 450.52 626.17 T
(-) 455.29 611.29 T
(++) 450.52 595.22 T
(+) 453.9 578.49 T
(via siod) 438.94 564.5 T
(+) 453.07 550.33 T
(+) 453.9 535.57 T
(++) 450.52 519.49 T
(+) 440.28 504.32 T
(++) 450.52 489.86 T
(++) 450.52 474.86 T
(++) 450.52 460.57 T
(++) 450.52 442 T
(+) 453.9 429.14 T
(++) 450.52 412.71 T
(+) 453.9 398.43 T
(+) 453.9 383.43 T
(yes) 449.29 367 T
(+/-) 450.24 352 T
(-) 455.29 337.71 T
(yes) 449.29 322.89 T
(+) 453.9 307 T
(-) 455.29 291.28 T
(-) 455.29 278.43 T
(-) 455.29 262.71 T
(none) 445.63 247 T
(0) 452.26 231.16 T
(-) 215 611.17 T
(+) 393.08 702.88 T
(++) 389.7 684.88 T
(++) 389.7 672.95 T
(++) 389.7 657.88 T
(++) 389.7 640.81 T
(++) 389.7 626.17 T
(-) 394.47 612.88 T
(++) 389.7 595.22 T
(++) 389.7 578.49 T
(via siod) 377.64 564.5 T
(++) 388.87 550.33 T
(-) 394.47 535.44 T
(++) 389.7 519.49 T
(++) 389.7 504.32 T
(+++) 386.32 489.5 T
(+++) 386.32 473.67 T
(+++) 386.32 457.83 T
(+++) 386.32 443.67 T
(+++) 386.32 429.5 T
(++) 389.7 415.33 T
(++) 389.7 400.33 T
(-) 394.47 384.5 T
(yes) 388.47 367 T
(-) 394.47 351.17 T
(-) 394.47 337.83 T
(2D only) 376.98 322.89 T
(+) 392.62 308.59 T
(-) 394.47 291.17 T
(-) 394.47 277 T
(-) 394.47 263.66 T
(none) 384.81 247 T
(0) 393.82 231.16 T
(++) 273.39 703 T
(-) 278.15 688 T
(-) 278.15 671 T
(-) 278.15 658 T
(++) 273.39 640.81 T
(+++) 270.01 626.17 T
(+/-) 273.11 612 T
(++) 273.39 595.22 T
(+++) 270.01 578.49 T
(?+++) 267.34 564.5 T
(+++) 269.17 550.33 T
(?-) 275.49 537 T
(+/-) 273.11 519.49 T
(++) 273.39 504.32 T
(+++) 270.01 490.33 T
(++) 273.39 472 T
(++) 273.39 457 T
(+++) 270.01 442.83 T
(++) 273.39 430.33 T
(++) 273.39 415.33 T
(++) 273.39 401.17 T
(++) 273.39 383.67 T
(yes) 272.16 367 T
(?) 277.49 353.26 T
(-) 278.15 340.33 T
(?) 277.49 322.83 T
(?) 277.49 306.17 T
(?) 277.49 292.83 T
(-) 278.15 276.16 T
(?) 277.49 260.33 T
(fix/float) 260.83 247 T
(1800-5330) 254.52 231.16 T
(-) 514.06 702.72 T
(-) 514.06 687.71 T
(-) 514.06 671.29 T
(-) 514.06 656.29 T
(+/-) 509.01 640.81 T
(++) 509.29 626.17 T
(-) 514.06 610.57 T
(+) 512.67 595.22 T
(+) 512.67 578.49 T
(via siod) 497.14 564.5 T
(+) 511.84 550.33 T
(++) 509.29 519.49 T
(+) 512.67 504.32 T
(-) 514.06 490.57 T
(+) 512.67 475.57 T
(+) 512.67 460.57 T
(+) 512.67 444.86 T
(-) 514.06 430.57 T
(+) 512.67 414.86 T
(+) 512.67 398.43 T
(+) 512.67 382 T
(yes) 508.06 367 T
(-) 514.06 352.71 T
(-) 514.06 339.14 T
(-) 514.06 324.86 T
(+) 512.67 306.28 T
(-) 514.06 290.57 T
(-) 514.06 278.43 T
(none) 504.4 247 T
(0) 513.41 231.16 T
(++) 573.22 718.28 T
(+) 576.6 702 T
(-) 577.99 686.17 T
(-) 577.99 672 T
(-) 577.99 657 T
(-) 577.99 640.81 T
(+) 576.6 626.17 T
(++) 573.22 611.17 T
(-) 577.99 595.22 T
(+) 576.6 578.49 T
(via siod) 561.16 564.5 T
(+) 575.77 550.33 T
(+) 576.6 519.49 T
(++) 573.22 504.32 T
(+) 576.6 489.5 T
(+) 576.6 474.5 T
(+) 576.6 459.5 T
(+) 576.6 444.5 T
(-) 577.99 428.67 T
(+) 576.6 412 T
(+) 576.6 398.67 T
(-) 577.99 382.83 T
(yes) 571.99 367 T
(-) 577.99 352.83 T
(-) 577.99 337.83 T
(-) 577.99 323.67 T
(+) 576.6 292 T
(-) 577.99 276.16 T
(per copy) 559.17 247 T
(NCAR) 670.33 745 T
663.89 755 664.89 223 2 L
N
(Other Packages: Xgobi, GMT) 46 199 T
(,IDL) 189.01 199 T
(+) 633.54 716.17 T
(+) 633.54 702 T
(-) 634.92 684.5 T
(-) 634.92 669.5 T
(-) 634.92 655.33 T
(+) 633.54 640.81 T
(+) 633.54 626.17 T
(-) 634.92 610.33 T
(++) 630.16 594.5 T
(+) 633.54 578.49 T
(via siod) 612.5 564.5 T
(++) 629.32 550.33 T
(-) 634.92 536.17 T
(+) 633.54 519.49 T
(+) 633.54 504.32 T
(++) 630.16 491.17 T
(+) 633.54 474.5 T
(+) 633.54 460.33 T
(+) 633.54 444.5 T
(+) 633.54 429.5 T
(+) 633.54 413.67 T
(+) 633.54 398.67 T
(yes) 628.93 366.17 T
(-) 634.92 352.83 T
(-) 634.92 339.5 T
(+/-) 629.88 323.67 T
(++) 630.16 306.17 T
(-) 634.92 289.5 T
(-) 634.92 278.66 T
(-) 634.92 262.83 T
(none) 625.26 247 T
(0) 634.27 231.16 T
(-) 337.3 702 T
(-) 337.3 684 T
(-) 337.3 675 T
(-) 337.3 657 T
(++) 332.53 640.81 T
(++) 332.53 626.17 T
(+) 335.91 612 T
(+) 335.91 594 T
(+) 335.91 578.49 T
(via siod) 320.47 564.5 T
(++) 331.7 550.33 T
(-) 337.3 540 T
(++) 332.53 519.49 T
(++) 332.53 504.32 T
(++) 332.53 486 T
(++) 332.53 459 T
(++) 332.53 477 T
(++) 332.53 441 T
(+++) 329.15 432 T
(++) 332.53 414 T
(++) 332.53 396 T
(-) 337.3 387 T
(-) 337.3 357 T
(yes) 331.3 369 T
(-) 337.3 333 T
(+) 335.91 324 T
(-) 337.3 306 T
(+) 335.91 297 T
(+) 335.91 279 T
(-) 337.3 261 T
(none) 327.64 247 T
(0) 336.65 231.16 T
(hershey) 668.34 718.67 T
(+) 683.6 640.81 T
(+) 683.6 626.17 T
(+) 683.6 596.17 T
(+) 683.6 519.49 T
(+) 683.6 504.32 T
(\337oat) 676.32 247 T
(750) 677.99 231.16 T
FMENDPAGE
%%EndPage: "1" 0
%%Trailer
%%BoundingBox: 0 0 612 792
%%Pages: 1 -1
%%DocumentFonts: Times-Roman
----------
X-Sun-Data-Type: default
X-Sun-Data-Description: default
X-Sun-Data-Name: graphics.ascii
X-Sun-Content-Lines: 163

Plotting Graphics

1.0 Packages Reviewed

I've selected 9 packages from a field of about twice that number to
present. They range from the existing SIO plot tools to fully
integrated scientific visualization packages. The commercial packages
are PV-Wave, DADisp, and NCAR. The public domain packages are KHOROS,
XVGR, Gnuplot, PlotXY and Robot. Wherever possible, a demo version of
the program is available. There are further packages arriving that have
yet to be evaluated.

On the attached chart is a summary of some of the properties which
users expressed and interest in having available in each package. In
the following descriptions, a few of the left out parameters are
mentioned as well as specific strengths or weaknesses of the programs.

1.1 SIOPS

These are the standard set of tools used at MPL. They include plot2n,
plot3d, countour, gray, polar, label, cut, paste, symplot, solid, etc..
The impetus to change away from these routines is the complexity of the
plot control file and the lack of interactivity in a workstation
windowing environment. These programs have been optimized to read the
SIO data files and users are generally familiar with the plot control
file functions. There are ways to convert the device independant plot
file output to postscript and then preview them on screen but this is
rarely taken advantage of. Many shell scripts have been developed to
use the programs in data processing streams.

1.2 PV-Wave

The ever-popular PV-Wave comes in 2 flavors now. The first is the
familiar Command Language version (CL) which runs under Sunview and the
new version, Wavepoint, which requires OpenWindows 3. These two
programs have been used here at MPL and do credi- ble jobs with SIO
data. The newer version does not have the extensive capability to
inter- face with C and fortran programs (although it can to a limited
extent). It will also employ some of the existing Command Language
scripts developed here and at NOSC. PV-Wave is a program that is widely
used by NOSC and it would be easy to interface between the 2
institutions. The cost is significant. A single floating point license
is $1800 with a $500 per year maintainence fee. A node locked license
for a 4/490 server is $5330 and $1845/yr. maintainence. The node
locked license runs on one server but any number of users may run it
concurrently. If there was a need to take a copy to sea, it can be
converted to 3 float- ing licenses, one of which can go to sea. This is
handled by the lock managing software and requires a current
maintainence fee.

1.3 KHOROS

This is a highly integrated visualization tool from the University of
New Mexico. The 2 programs of most interest are xprism2 and xprism3
which are 2-D and 3-D plotting respectively. It has very good X11
interface tools to change the attributes of some of the plot elements
(axes, legends, titles, etc.). It will take ASCII input from data-files
which are constructed from sio data files via "siod". It will not work
under sunview. It has no polar plotting capabilities that I can find
and it has no interactive means to edit the data once it is presented
on the screen. In order to put multiple graphs on one page, one must
place them via layout dimensions in the postscript output dialog
boxes. The output files are in a format called viff which all khoros
modules understand. There is a way to convert Matlab files to the viff
format.

1.4 XVGR

Another well thought out, X11 compliant, graphics package, xvgr is
described as "graph- ics for exploratory data analysis". It will plot
up to 10 graphs with 30 sets of data per graph with user defined
scaling, labels, symbols, line styles and colors. It can operate in
batch mode which has the especially interesting capability of acting
within a data stream to dis- play a sort of "live" recording like a
strip chart recorder would. It can cut points and regions from a graph.
Input from sio data files is again via siod. I haven't been able to
define any way to do polar plots and it is not set up to do 3-D
graphics. It also has no way to scale by inches in a straightforward
manner. As a public domain package though, we have access to the source
code and can perhaps form the tools that we need.

1.5 Gnuplot

The same people who brought you emacs and gcc (the Free Software
Foundation) now offer a plotting package, gnuplot. This package is a
command driven plotter (e.g. you are given a prompt, gnuplot>, to which
you feed parameter specifications, input data, and the plot command.)
It displays it's graph to an X11 terminal window or to a file in
various for- mats. The data input is fairly flexible for ASCII formats
and it claims to input r,q but I couldn't get it right. While it will
do contour graphics, it will not do general 3-D graphs. It also fails
on the inch:inch scaling parameter. The manipulation of fonts needs to
be done through the direct manipulation of a postscript output file

1.6 PlotXY

This is a very simple command driven plotter which essentially reads in
ASCII data, plots it and stops. It's latest incarnation includes a
postscript output driver so that the results can be edited directly.
It's default output file is `myplot'. While this package is extremely
easy to use and is fairly adaptable, it's lack of GUI, fonts, polar
plot and 3-D seem to put it in the "also ran" category.

1.7 DADisP

This is a very expensive package whose demo tape totally turned me off.
They had several canned demos of graph types that the package could do.
It can do the normal manipulation of graph attributes and text as in
PV-Wave or XVGR. It has a great adaptability factor in it's ability to
manipulate data once it's in the program's workspace. My problem was
that the demo wouldn't let me input any data into it to try it! I
wasn't able to determine it's capability to edit data points
graphically or to do polar plots. The ability to scale the graph to
inches or other data units was also not apparent. All in all, this
package was a disap- pointment compared to it's vaunted reputation.

1.8 Robot

As a public domain package, Robot is a nice X11 application. It does
lack a lot of the flex- ibility of others. I can't get it to change the
scale of the axes to my specifications. It can place text and change
line attributes easily though and has a good page layout facility

1.9 NCAR graphics

I don't have the demo version yet to give an opinion. I do know it is
limited to hershey, stroked fonts but can make them in severel sizes
and thicknesses. It has postscript output and an X11 interface built on
it. This is the package that is frequently used at SDSC for general
use. The output of NCAR (that's National Center for Atmospheric
Research) is the computer graphics metafile (CGM) which is a "quasi"
standard and is adaptable to other packages.

1.10 IDL

IDL is the company from which PV-Wave developed. The latter specialized
in developing a GUI while the original focused on providing a
development environment. This package is probably more suitable to s/w
developers but the sales-rep claims it's very simple to develop
applications in this language. I've been able to get a canned demo
running on lambis, which give some idea of the range of functions
available. This is basically the same as PV-Wave Command Language.
Martin's programs (sort of) run under it. The cost is $7500 for an
node-locked, multi-user server and $2813 for a floating network
license. These prices are after an educational discount. The advantage
of this program is that it allows one to build one's own application
interface and tools to do just the processing needed. It is probably
more suited to software development environments than ours.

3.0 Feature Comparisons

The attached chart is a ROUGH guide to the difference in features
between programs as best as I could determine. One `+' means this
feature is supported while a `-' means it's not. Multiple pluses imply
a particularly good or easily used feature. `+/-' says that a fea- ture
is there but doesn't work in an intuitive or easy manner. Finally, a
blank means that I wasn't able to determine one way or another.

There is an attached postscript document chart as described in 3.0 above.
I couldn't easily convert it to ascii.

----- End Included Message -----

Many thanks to:
        phil@dgbt.doc.ca
        ccarpenter@dw3f.ess.harris.com
        stefan@centaur.astro.utoronto
        era@niwot.scd.ucar.edu
        fetro@biostat.washington.edu
        pls@pegasus.rice.edu
        charest@canr.hydro.qc.ca
        ohnielse@ltf.dth.dk
        rrichter@ph.gmr.com
        djthongs@pheonix.princeton.edu
        eckhard@ikarus.ts.go.dlr.de
        patti@sse.com

Extra special thanks to hal@mpl.UCSD.EDU

----- End Included Message -----

-- 
Matt Gertz, mwgertz+@cs.cmu.edu
Dept. of ECE, The Robotics Institute at Carnegie Mellon University.



This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:06:43 CDT