reid@decwrl.dec.com (Brian Reid) (01/29/88)
Here's a file that prints a bunch of fake graphs of sales against time. I put this together originally as part of an argument with somebody over whether GKS or PostScript had a more compact representation. I took his GKS file and recoded it (by hand, admittedly) in PostScript. Mine was about a factor of 8 smaller). %! % GKS example with some little PostScript-only games played. % Brian Reid, 13 June 1985. /vsc 10.0 def % vertical scale is 0.1 (horiz is ok) /llbl [(Jan)(Feb)(Mar)(Apr)(May)(Jun)(Jul)(Aug)(Sep)(Oct)(Nov)(Dec)]def /stxt /Courier findfont .35 scalefont def /ntxt /Helvetica findfont .30 scalefont def /axlbl /Helvetica findfont .46 scalefont def /ltxt /Times-Roman findfont .6 scalefont def /GKD 50 dict def /xdf {exch def} def /markx [1. 2. 3. 4. 5. 6. 7. 8. 9.]def /marky [.37 .5 .32 .8 .6 .7 .6 .3 .5]def /bars [.1 .4 .29 .2 .55 .6 .4 .2 .34]def %--------------------- % (str) x y cshow /cshow{GKD begin /ctry xdf /ctrx xdf /cstr xdf cstr stringwidth pop 2 div ctrx exch sub ctry moveto cstr show end}def % draw a big dot at current position /drawdot{gsave currentpoint newpath moveto currentpoint lineto lwid 2 mul setlinewidth stroke grestore}def % xarray yarray /pointfunc linewidth polyline /polyline{GKD begin gsave 1 setlinecap 1 setlinejoin /lwid xdf /ptfunc exch load def /my xdf /mx xdf newpath 0 1 my length 1 sub {/i xdf mx i get my i get i 0 eq {moveto}{lineto}ifelse ptfunc} for lwid setlinewidth stroke grestore end}def % llx lly urx ury lwid filltype fbox /fbox{GKD begin /tfill xdf /lw2 xdf /ury xdf /urx xdf /lly exch lw2 add def /llx xdf newpath llx lly moveto llx ury lineto urx ury lineto urx lly lineto closepath gsave clip gsave tfill setgray fill grestore lw2 2 mul setlinewidth stroke grestore end }def %--------- /maxrand 2 31 exp 1 sub def /onegraph { 0 1 8 {/ix exch def marky ix rand maxrand div .7 mul dup /vval exch def put bars ix rand maxrand div .6 mul .7 add vval mul dup .8 gt {pop .8} if put } for gsave 30 30 scale 4 7 translate -1.2 -1.2 10.5 10.5 0 0.975 fbox ltxt setfont 2.2 8.7 7.8 9.7 0 0 fbox 1 setgray (Sales of #00000) dup 10 rand maxrand div 89999 mul cvi 10000 add ( ) cvs putinterval 5 9 cshow 0 setgray % draw axes newpath 0 9.5 moveto 0 0 lineto 10 0 lineto .05 setlinewidth stroke % put Y axis tickmarks .025 setlinewidth stxt setfont gsave newpath 10{-.17 0 moveto 0 0 lineto 0 1 translate}repeat stroke grestore % put X axis tickmarks 1 1 9 {dup llbl exch 1 sub get exch -0.3 cshow} for % put X axis label axlbl setfont (Calendar Month) 5 -1 cshow % put Y axis label gsave 90 rotate (Units Sold (thousands)) 4.5 .7 cshow stxt setfont 0 1 9 {dup ( ) cvs exch 0.25 cshow}for grestore % draw the boxes 0 1 8{/i xdf i .65 add 0 i 1.35 add bars i get vsc mul .02 .76 fbox}for % draw the X's and connect them with a "polyline" markx [ marky {vsc mul}forall ] /drawdot .1 polyline % put a label along the graph gsave markx 0 get marky 0 get vsc mul translate marky 1 get marky 0 get sub vsc mul markx 1 get markx 0 get sub atan rotate .1 0.18 moveto ntxt setfont (Predicted) show grestore grestore showpage } def 10 {onegraph} repeat