// // plot1.pls // // The plotting stuff is not necessarily useful; // the calculation of the axes, however, IS useful! // // (C) Copyright 1996, Carlsberg Laboratory, Dept. of Chemistry // // PAGE ndata%:=360 DIM xy(ndata%,2) FOR i%:=1 TO ndata% DO xy(i%,1):=i% xy(i%,2):=SIN(i%/180*PI) NEXT i% PDEVICE "gl" PINIT "/tmp/mk1.ps",devxmin,devxmax,devymin,devymax plotdata(ndata%,xy(,)) DIM tmp$ OF 1 PRINT "Press return to finish: ", INPUT tmp$ PPAGE PFINISH PROC plotdata(n%,REF xy(,)) CLOSED IMPORT devxmin,devxmax,devymin,devymax PROC scale2(min1,max1,ntick1%,REF min2,REF max2,REF ntick2,REF tick,REF ndec%) d:=(max1-min1)/ntick1% ld:=LOG(d)/LOG(10) ild:=INT(ld) ndec%:=0 IF ild<0 THEN ndec%:=-ild fld:=10^(ld-ild) tick:=10^ild IF fld>5 THEN tick:=tick*10 ndec%:=ndec%-1 IF ndec%<0 THEN ndec%:=0 ELIF fld>2 THEN tick:=tick*5 ELIF fld>1 THEN tick:=tick*2 ENDIF min2:=FLR(min1/tick)*tick max2:=FLR(max1/tick+0.99999)*tick ENDPROC scale2 FUNC xtrans(x) RETURN vxmin+(x-xlow)/(xhigh-xlow)*(vxmax-vxmin) ENDFUNC xtrans FUNC ytrans(y) RETURN vymin+(y-ylow)/(yhigh-ylow)*(vymax-vymin) ENDFUNC ytrans xhigh:=xy(1,1) xlow:=xy(1,1) yhigh:=xy(1,2) ylow:=xy(1,2) FOR i%:=2 TO n% DO IF xy(i%,1)xhigh THEN xhigh:=xy(i%,1) IF xy(i%,2)yhigh THEN yhigh:=xy(i%,2) NEXT i% // set up the coordinate system. charsize:=0.3 ntick%:=6 // plotting viewport, in cm: vxmin:=devxmin vymin:=devymin vxmax:=devxmax vymax:=devymax //title: vymax:=vymax-2*charsize //labels: vymin:=vymin+2.1*charsize vxmin:=vxmin+4*charsize //depends upon no. of digits PNOCLIP //border PCOLOR 5 PDENSITY 1 PTHICK 1 PMOVE vxmin,vymin PDRAW vxmax,vymin PDRAW vxmax,vymax PDRAW vxmin,vymax PDRAW vxmin,vymin //axes scale2(xlow,xhigh,ntick%,xlowa,xhigha,nxaxis,xtick,xndec%) scale2(ylow,yhigh,ntick%,ylowa,yhigha,nyaxis,ytick,yndec%) PRINT "xlow: ",xlow," xhigh: ",xhigh PRINT "xlowa: ",xlowa," xhigha: ",xhigha," xtick: ",xtick PRINT "ylow: ",ylow," yhigh: ",yhigh PRINT "ylowa: ",ylowa," yhigha: ",yhigha," ytick: ",ytick PCOLOR 5 PDENSITY 1 PTHICK 1 PTEXTSTYLE charsize,6 x:=xlowa WHILE x<=xhigha DO IF x>=xlow AND x<=xhigh THEN PTEXT xtrans(x),vymin-0.5*charsize,STR$(x) PMOVE xtrans(x),vymin PDRAW xtrans(x),vymin+charsize/2 PMOVE xtrans(x),vymax PDRAW xtrans(x),vymax-charsize/2 ENDIF x:=x+xtick ENDWHILE PTEXTSTYLE charsize,8 y:=ylowa WHILE y<=yhigha DO IF y>=ylow AND y<=yhigh THEN PTEXT vxmin-1*charsize,ytrans(y),STR$(y) PMOVE vxmin,ytrans(y) PDRAW vxmin+charsize/2,ytrans(y) PMOVE vxmax,ytrans(y) PDRAW vxmax-charsize/2,ytrans(y) ENDIF y:=y+ytick ENDWHILE // plot the points: PCLIP vxmin,vymin,vxmax,vymax PCOLOR 1 PDENSITY 1 PTHICK 0 PRECTANGLESTYLE 2,1 msize:=charsize*0.03 FOR i%:=1 TO n% DO x:=xtrans(xy(i%,1)) y:=ytrans(xy(i%,2)) IF FALSE THEN PMOVE x-msize,y-msize PDRAW x+msize,y+msize PMOVE x-msize,y+msize PDRAW x+msize,y-msize ELIF TRUE THEN PRECTANGLE x-msize,ytrans(0),msize*2,y-ytrans(0) ELSE PMOVE x,ytrans(0) PDRAW x,y ENDIF NEXT i% PNOCLIP ENDPROC plotdata