6.3 複数のデータを1つのグラフに描く

この章のはじめに紹介した uspac1 のプログラムでは, 一つのグラフに 一つのデータをプロットしましたが, 複数のデータを折れ線の属性を変えなが ら1つのグラフに描いてみましょう(uspac2).

まず, 前節で紹介した usspnt ルーチンを3回呼んで xy0, y1, y2 のデータのなかから xy の最大値と最小値 を見つけ, uspfitgrstrf ルーチンで正規化変換を確定しま す. そして, つぎの ussttlusdaxs で座標軸を描きます.

最後に, uuslntuuslni のメソッド(元サブルーチン)で折れ線の属性(線種 と線の太さ)を変更しながら, uulin ルーチンで折れ線を描きます. こ れら UUPACK のメソッド(元サブルーチン)の動作は, この場合には SGPACK の sgplu ルーチンなどと同じです. (便利な機能は次節の例で示します.)

      PROGRAM USPAC2

      PARAMETER( NMAX=201, imax=5 )
      REAL X(NMAX), Y0(NMAX), Y1(NMAX), Y2(NMAX), A(imax)

      PI = 3.14159
      DO 10 I=1,imax
        II = 2*I - 1
        A(I) = (-1)**I *2./(II*PI)
   10 CONTINUE

      DO 20 N=1,NMAX
        X(N)  = 1.*(N-1)/(NMAX-1)
        T     = 2.*PI*X(N)
        IF(T.LT.PI/2. .OR. T.GE.PI*3./2.) THEN
          Y0(N) = 0.
        ELSE
          Y0(N) = 1.
        END IF
        Y1(N) = 0.5 + A(1)*COS(T) 
        Y2(N) = 0.5
        DO 30 I=1,imax
          II = 2*I - 1
          Y2(N) = Y2(N) + A(I)*COS(II*T)
   30   CONTINUE
   20 CONTINUE

      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL sgpwsn
      READ (*,*) IWS

      NumRu::DCL.gropn(iws)
      CALL grfrm

      NumRu::DCL.usspnt(x,y)
      NumRu::DCL.usspnt(x,y)
      NumRu::DCL.usspnt(x,y)
      CALL uspfit
      CALL grstrf

      NumRu::DCL.ussttl(cxttl,cxunit,cyttl,cyunit)
      CALL usdaxs

      NumRu::DCL.uulin(upx,upy)
      NumRu::DCL.uuslnt(itype)
      NumRu::DCL.uuslni(index)
      NumRu::DCL.uulin(upx,upy)
      NumRu::DCL.uuslnt(itype)
      NumRu::DCL.uulin(upx,upy)

      CALL grcls

      END
program uspac2

\resizebox{10cm}{!}{\includegraphics{uspack/uspac2.eps}}
uspac2.f: frame1