C*********************************************************************** C SUBROUTINE PCDF GENERATES A PRINTER PLOT OF THE SAMPLE CUMULATIVE C DISTRIBUTION FUNCTION(CDF). INPUT IS THE ORDER STATISTICS, SAMPLE C SIZE AND UPPER AND LOWER SCALING LIMITS ON THE RANGE OF X(THE DATA). C C CALLING ARGUMENTS: C N THE SAMPLE SIZE C A THE ARRAY CONTAINING THE ORDER STATISTICS C XU UPPER SCALING LIMIT C XL LOWER SCALING LIMIT C INDEX IF EQUAL TO 1 THEN CALCULATE THE PLOT C IF EQUAL TO 2 THEN PRINT THE PLOT C C THE PROGRAM GENERATES A PRINTER PLOT OF THE SAMPLE CDF IN A SPACE C 100 CHARACTERS WIDE BY 50 CHARACTERS HIGH. THE X-AXIS IS TRUNCATED C AT THE LIMITS XU, XL. THE Y-AXIS RANGES FROM 0. TO 1. THE ACTUAL C PROGRAMING ONLY REQUIRES THE CONSTRUCTION OF AN ARRAY 1 BY 100 C WHICH IS ISOMORPHIC TO A SCALED SAMPLE CDF PLOTTED ON A SPACE C 100 BY 50 CHARACTERS. C THIS VERSION HAS BEEN CHANGED SO THAT A 51 BY 100 ARRAY(PLOT) IS ALSO C GENERATED AS AN INTERNAL GRAPH. THIS ARRAY IS RETURNED TO THE MAIN C PROGRAM SO IT MAY BE OVER-WRITTEN WITH THE PLOT OF A FITTED DISTRI- C BUTION THEN CALLING THIS ROUTINE WITH INDEX.EQ.2 WILL PRINT THIS C GRAPH. C*********************************************************************** SUBROUTINE PCDF (A,N,XL,XU,INDEX) C*********************************************************************** C DECLARATIONS C*********************************************************************** CHARACTER*1 PLOT(51,68) CHARACTER*1 TI(50) CHARACTER*1 LINE(100), AST, BLK, DASH, TIC DIMENSION A(1), NS(101), XAXIS(14), YAXIS(50) C*********************************************************************** C COMMON STATEMENTS C*********************************************************************** COMMON /SPLOT/ PLOT C*********************************************************************** C DATA STATEMENTS C*********************************************************************** DATA AST /'*'/, BLK /' '/, DASH /'-'/, TIC /'+'/ DATA YAXIS /1.00,.98,.96,.94,.92,.90,.88,.86,.84,.82,.80,.78,.76,. 1 74,.72,.70,.68,.66,.64,.62,.60,.58,.56,.54,.52,.50,.48,.46,.44,.4 2 2,.40,.38,.36,.34,.32,.30,.28,.26,.24,.22,.20,.18,.16,.14,.12,.10 3 ,.08,.06,.04,.02/ DATA TI /' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', 1 'C','u','m','u','l','a','t','i','v','e',' ','P','r','o','b','a', 2 'b','i','l','i','t','y',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', 3 ' ',' ',' ',' '/ IF (INDEX.EQ.2) GO TO 220 C C GENERATE THE ARRAY NS. NS(J) IS THE NUMBER OF SAMPLE POINTS LESS C THAN OR EQUAL TO XL+(J+.5)*DVAR, WHERE DVAR (XU-XL)/100. C DO 10 J=1,65 10 NS(J)=0 NS0=0 DVAR=(XU-XL)/65. XJ=XL+.5*DVAR DO 20 I=1,N IF (A(I).GT.XJ) GO TO 30 20 NS0=NS0+1 C C NS0 IS THE NUMBER OF SCALED SAMPLE POINTS LESS THAN OR EQUAL TO .5 C 30 NS(1)=NS0 DO 60 J=1,65 XJ=XJ+DVAR 40 IF (A(I).GT.XJ) GO TO 50 NS(J)=NS(J)+1 I=I+1 IF (I.GT.N) GO TO 70 GO TO 40 50 NS(J+1)=NS(J) 60 CONTINUE 70 IF (J.GE.65) GO TO 90 DO 80 M=J,65 80 NS(M)=N 90 YSCALE=50./REAL(N) DO 100 J=1,65 100 NS(J)=(REAL(NS(J))*YSCALE)+.001 C C NS IS NOW COMPUTED. IT IS ISOMORPHIC TO A SCALED SAMPLE CDF. NEXT C PRINT THIS CDF. C DO 110 J=1,65 LINE(J)=DASH IF (NS(J).EQ.50) LINE(J)=AST 110 CONTINUE DO 120 J=5,65,5 120 LINE(J)=TIC DO 130 J=1,65 130 PLOT(1,J)=LINE(J) C C THIS PRINTS THE TOP LINE OF THE PLOT. NEXT PRINT LINES 49 TO 1. C DO 170 I=2,50 K=50-I+1 LINE(1)=BLK IF (NS(2).LT.K) GO TO 140 IF ((NS(1).GE.K).AND.(NS0.LE.K)) LINE(1)=AST 140 DO 150 J=2,65 LINE(J)=BLK IF ((NS(J+1).LT.K).OR.(NS(J-1).GT.K)) GO TO 150 IF (NS(J).LT.K) GO TO 150 LINE(J)=AST 150 CONTINUE DO 160 J=1,65 160 PLOT(I,J)=LINE(J) 170 CONTINUE C NOW PRINT THE BOTTOM LINES(X-AXIS AND SCALE) C LINE(1)=DASH IF (NS(1).EQ.0) LINE(1)=AST DO 180 J=2,65 LINE(J)=DASH IF (NS(J-1).EQ.0) LINE(J)=AST 180 CONTINUE DO 190 J=5,65,5 190 LINE(J)=TIC DO 200 J=1,65 200 PLOT(51,J)=LINE(J) XAXIS(1)=XL XAXIS(14)=XU DVAR=(XU-XL)/13. DO 210 I=2,13 210 XAXIS(I)=XL+REAL(I-1)*DVAR IF (INDEX.EQ.1) RETURN C C ARRAY PLOT STORES THE GRAPH IN REVERSE LINE ORDER AND WITHOUT LABELS. C THUS LINE K OF THE GRAPH IS ROW 51-K OF 'PLOT', FOR K 0,...50. C 220 WRITE (6,240) YAXIS(1),TIC,(PLOT(1,K),K=1,65),DASH,YAXIS(1) DO 230 I=2,50 230 WRITE (6,250) TI(I),YAXIS(I),DASH,(PLOT(I,K),K=1,65), 1 DASH,YAXIS(I) WRITE (6,260) TIC,(PLOT(51,K),K=1,65),DASH WRITE (6,270) (XAXIS(I),I=1,13,2) WRITE (6,280) (XAXIS(I),I=2,14,2) C*********************************************************************** C FORMAT STATEMENTS C*********************************************************************** RETURN C 240 FORMAT (3X,F4.2,67A1,F4.2) 250 FORMAT (1X,A1,1X,F4.2,67A1,F4.2) 260 FORMAT (3X,'0.00',67A1,'0.00') 270 FORMAT (3X,7G10.3) 280 FORMAT (8X,7G10.3) END