次のページ 前のページ 目次へ

3. 利用編

3.1 ウインドウのサイズを変えたいのですが.

SWPACK の内部変数 IWIDTHIHEIGHT を設定すると変わ ります.

環境変数の指定方法の詳細に関しては MATH1マニュアルの『概要/内 部変数』を参照して下さい.

なお, ウインドウ・マネージャーでサイズを変えようとしても, 図の サイズは変わりません.

以後内部変数の変更については例1〜4までのいずれの方法も適用でき ます.

3.2 ウインドウの表示位置を固定したいのですが.

SWPACK の内部変数 IPOSXIPOSY で, グラフィック・ ウィンドウの位置を指定できます.

CALL SWISET('IPOSX', 30)
CALL SWISET('IPOSY', 30) 
これは左上(原点)から右に30ピクセル, 下に30ピクセルの位置を原点と したウィンドウが生成される例です. X Windows システムではリソース 設定で geometry エントリに負値を指定すると x 方向は右から, y方向 は下からの値に読み替えられますが, ここではそのようにならないこと に注意が必要です.

3.3 PostScript 出力ファイル名を dcl.ps 以外に変えたいのですが.

SWPACK の内部変数 FNAME を設定すると変わります. 例え ば, プログラムで

CALL SWCSET('FNAME', 'foo') 
とすると, PostScript 出力ファイル名は foo.ps になりま す. また, X Window システムにおけるのウィンドウダンプしたファ イル名は foo.xwd になります. 詳しくは GRPH1 のマニュ アルの 7.8.1 節を参照して下さい.(また, SWCSETも参考になるでしょう.)

3.4 コーナーのマーク(┐)を消したいのですが.

SGPACK の内部変数 LCORNER.FALSE. にするとコーナー マークは描かれません;

CALL SGLSET('LCORNER', .FALSE.)
また, コーナーマーク付きで描かれた PostScript の図からコーナー マークを除去するツールとして dclpsrmcm があります.

因みに dcl-5.3 からは規定値として LCORNER の値が .FALSE. となっているため, コーナーマークは描かれません.

3.5 フォントを変えたいのですが.

SGPACK の内部変数 IFONT を 2 にすると, 高品位フォントを使 用することができます.

CALL SGISET('IFONT', 2)
ただし, 出力結果のファイルのサイズが少し大きくなります.

PostScript の図の場合, dclpsfont を使用すれば Times-Roman や Helvetica, Courier などの PostScript フォントを 使用することができます. 記号は一部を除いて PostScript ベクトル 情報に変換されます.

3.6 座標軸の太さや色を変えたいのですが.

U[XYZ]PACK で座標軸を描いているいる場合, 座標軸のライン・イン デクス(線の太さや色などの属性) は, 内部変数 INDEXT0, INDEXT1, INDEXT2 によって管理されています. このうち, パッケージでに用いられいるのはINDEXT1INDEXT2です.

となっていますので, 例えばプログラム中で
CALL UZISET('INDEXT1', 44)
CALL UZISET('INDEXT2', 29)
とすることにより座標軸は太くなり, 軸と大きい刻みは赤に, 小さい 刻みは青になります. 詳しくは GRPH2 マニュアルの U[XYZ]PACK の 章の『LLA における属性の指定方法』および UZpGET/UZpSET のパラ メーターの説明の項を参照してください.

3.7 グラフがビューポートをはみ出てしまいます.

CALL SGLSET('LCLIP', .TRUE.)
のようにして, SGPACK の内部変数 LCLIP.TRUE. にす ると, それ以降の描画命令全てに対してクリッピングが行なわれ, ビューポートからはみ出した部分は描かれなくなります. クリッピン グを途中で止めたい場合には以下のようにします.
CALL SGLSET('LCLIP', .FALSE.)

3.8 ポーラーステレオが円からはみ出して四角く描画されてしまいます.

ポーラーステレオに依らず, いずれかの地図投影を SGSTRN 或 は GRSTRN によって指定している時に, ある緯度・経度の範囲 でクリッピングをするには

CALL SGSTXY(西端経度, 東端経度, 南端緯度, 北端緯度)
と指定します. ポーラーステレオの場合には円形にクリッピングさ れます.

因みに SGSTXY に関する記述はマニュアルにありません. 次期 改訂では記載されることでしょう.

参考までにサンプルプログラムを添付します.

      PROGRAM TEST

      CALL GROPN(1)                          ! 画面に出力
      CALL GRFRM
   
      CALL GRSVPT(0.2, 0.8, 0.2, 0.8)
      CALL GRSTRN(31)
      CALL UMSCWD(90.0, 90.0, 75.0)          ! 円形のウィンドウを設定
      CALL SGSTXY(-180.0, 180.0, 15.0, 90.0) ! 描画範囲を指定
      CALL UMPFIT
      CALL GRSTRF

      CALL SGLSET('LCLIP', .TRUE.)
      CALL UMPMAP('coast_world')
      CALL UMPGLB                            ! 緯経線と地球の輪郭を描く
      CALL GRCLS

      STOP
      END ! PROGRAM TEST

3.9 ポートレート(縦方向)に出力したいのですが.

SGOPN あるいは GROPN で図形出力装置をオープンする とき, 負の値を入力すれば画面を縦長に使うように指定できます.

既に出力してしまった PostScript の図は dclpsrot を用いるこ とにより, 全体を90度回転させることができます. ETC マニュアルの 第 3 章には, sgksrot を用いて PostScript の図を LaTeX に 組み込む方法が記されています.

sgksrot は既に obsolete なので, dclpsrot と読み替えて 頂ければ問題ありませんが, 次のマニュアル改訂では修正されている ことでしょう.

3.10 Bourne shell 系のシェルでは, 環境変数で DCL 内部変数を指定できないのですが.

sh 系のシェルは ":"が演算子として用いられるため, DCL 内部変数を 例えば

  $ export SW:IHEIGHT=480
のように設定することができません. そこで
  $ export DCLENVCHAR=_
  $ export SW_IHEIGHT=480
のように環境変数 DCLENVCHAR を設定し, 外部からパッケージ名と内部 変数名のセパレータを変更することによって, 内部変数の値を環境変数 によって指定できるようになります.

3.11 コマンドラインオプションで内部変数を指定できません.

お使いのFortranコンパイラにサービス関数 GETARG()IARGC() が用意されていないからだと思います. 管理者に相談さ れることをお奨め致します.

3.12 SWCSET でカラーマップや出力ファイル名が変更できません.

関数 SWCSETSGOPN 或は GROPN の後で呼ばれていま せんか? カラーマップ(規定値はcolormap_01.x11)や出力ファイル名(規 定値はdcl.ps)は SGOPN 或は GROPN から呼ばれる関数 SWDOPN 内で確定されます. したがって, プログラム内でカラーマッ プや出力ファイル名を変更したい場合には, SGOPN 或は GROPN の前で SWCSET を呼ばねばなりません.

3.13 math2 の FFTPACK は本当に任意の長さのデータについて高速フーリエ変換ができるのですか?

その通りです. といっても高速フーリエ変換(FFT)となるのは, データ 長が 2nや (2i)(3j)(5k)のような場合の時で, データ長が素数の場合には単なるデジタルフーリエ変換となります. 時 系列解析でデータ数が多い場合には, 最初或は最後のデータを1個や2個 削ったところで結果が大きく変わることはありませんから, うまく約数 の多いデータ数に調節してあげると計算速度の向上に繋がるでしょう.

3.14 UDPACKで等高線を描いたときに, コンターラベルが図中にまったく表示されないことがあります

UDPACK で描かれるラベル付きの等値線は, GRPH1 の SGpGET/SGpSET が 管理する内部変数 'LCHAR' を .TRUE. に設定して,実際には線分を描 く下位ルーチンによって描かれてます. ラベル付き線分の描画において, ラベルを付けるか付けないかに影響する内部変数は以下の通りです. これらの内部変数を適宜調節すると等値線のラベルが表示されるように なります.

内部変数 説明 規定値
FWC 文字列を描くための空白域の幅を全文字幅を単位としてどれだけとるかを指定する係数 1.25
CWL 1サイクルあたり,線分部分の長さを文字高を単位として何文字分とるかを指定する係数 30.0
LBUFF 折線の終わりが文字列を描くべき空白部分であるとき, そこを線分で結ぶためのバッファリングをするかどうかを指定する. .TRUE.の時にバッファリングを行い, .FALSE. の時にはしない .TRUE.
NBUFF バッファリングをするときその長さを指定する 20
LCURV 折線のなす角が大きなところなどではラベルを書かないことを指定する. 正確には, LCURV が .TRUE. で, かつ文字を書くべきスペースが次のパラメタ RCURV の係数以下のときラベルを書かない..FALSE. の時にはラベルを書く .TRUE.
RCURV LCURV が .TRUE. で, かつ文字を書くべきスペースが次のパラメタ RCURV の係数以下のときラベルを書かない. 1.0

3.15 UETONE でべた塗りをすると三角形の白抜きが発生するんですが.

これは src/grph2/uepack/uearea.f の不具合のようですが, dcl-5.3以 降では修正されています.

3.16 等値線図で, 横軸のタイトルが等値線間隔のメッセージよりも下に描かれてしまいます.

等値線間隔のメッセージとタイトルの両方とも描く場合には, 座標軸 →等値線の順に描くとタイトルが上, 等値線間隔のメッセージが下に なります.

UDPACK が描くコンター間隔に関するメッセージは, そのときの座標軸 情報(もっとも外まで文字が描かれている位置; 具体的には UZRGET の管理する内部変数'ROFFXB')をカンニングして描かれます. そしてメッ セージを描いたあと, その情報はより外側の位置情報に置き換わります.

そのため, 次に座標軸を描こうとするとタイトルがメッセージより下に 描かれることになります.

こういうときには, ある状態の座標軸情報を覚えるルーチン UZPSAV を適当なタイミング(座標軸を描く前)に呼んでおいて, メッセージを描 いたあとで UZPRST を使って UZPSAV を呼んだ状態に戻して やればいいかと思います.

3.17 等値線図で, 等値線のラベルの有効桁数を 3 桁から変更したいのですが.

UDCNTR を呼ぶ前に, UDSFMT を用いると等高線ラベルのフォー マットを指定することができます. 例えば整数4桁の場合,

        CALL UDSFMT('(i4)')
とします.

フォーマットについての詳細は「MISC1」マニュアルの FMTLIB を参照 してください.

3.18 地図投影で, ビューポートを変えても地図の縦横比が変わりません.

地図上の描画をする場合には縦横比が投影方法によって自動的に決定さ れますので, 自分が定めた縦横比を持つ仮想画面に描くことはできませ ん.

また, 縦横比が自動的に決定されることから, 指定したビューポート内 に地図がおさまらない場合もあります. その場合は,

        CALL GLRGET('rundef', rundef)
        CALL GRSVPT(vxmin, vxmax, rundef, rundef)
と x 方向のビューポートを指定し, y 方向のビューポートを自動決定 させるとビューポートにおさまります.

3.19 前項のようにビューポートの y座標を不定にしたとき, 実際に使われる vymin, vymax の値を取得したいのですが, sgrget('vymin', vymin)では取得できません.

GRSTRF を呼んだ後で

        CALL SGQVPT(vxmin, vxmax, vymin, vymax)
とすると, ビューポートの四隅の座標を取得することが出来ます(GRPH1 マニュアル 2.5.1 SGSVPT 参照).

3.20 ベクトル図で, 地図を描いた後にユニットベクトルが表示されません.

ビューポートの外に地図を描かないために, クリッピングを設定してい ませんか. 地図を描いた後は, クリッピングを設定解除しておきましょ う.

        CALL SGLSET('LCLIP', .TRUE.)
        CALL UMPMAP('coast_world')
        CALL SGLSET('LCLIP', .FALSE.)

3.21 海岸線を描くだけでなく, 陸地部分を特定の色で塗りたいのですが.

dcl-5.3 以降では正式に陸地部分を特定の色あるいはパターンで塗るルー チンを導入致しました. 陸地塗り潰しにはサブルーチン UMFMAP を用います. 使い方は海岸線を描く UMPMAP と同じで, 引数とし て海岸線データのファイル名を指定します. 塗り潰しの色やパターンを 変更したい場合には,

        CALL UMISET('IPATLAND', 2999)
とします. これは色が赤(色番号2)のべた塗り(パターン番号999)に設定 する方法です. また湖を陸地とは別の色で塗りたい場合には,
        CALL UMLSET('LFILLAKE', .TRUE.)
        CALL UMISET('IPATLAKE', 2999)
とします. 上記3つの内部変数の規定値は以下の通りです.
          IPATLAND : 1999    : 黒のべた塗り
          IPATLAKE : 9999    : シアンのべた塗り
          LFILLAKE : .false. : 湖は塗りつぶさない

尚, このべた塗りに対応した海岸線データは現在までのところ,

coast_world
coast_japan
のみです. また Fortran90 版 DCL にはまだ導入されておりません.

3.22 海岸線を描くように, 中国の省境が描きたいのですが.

DCLのパッケージには国境(border_world), アメリカの州境界 (state_usa), 日本の県境(pref_japan), 大陸のプレート境界 (plate_world)のデータが内包されております. これらは, 海岸線デー タも含めて, Fortranバイナリデータですが, もともとのデータは ASCII 形式で以下のような緯度・経度の並びになっています.

       N       I  maxLAT  minLAT  maxLON  minLON
 LAT0001 LON0001 LAT0002 LON0002 LAT0003 LON0003 LAT0004 LON0004 LAT0005 LON0005
 LAT0006 LON0006 ....
     .....                       LAT_N/2 LON_N/2
ここで N はデータの個数(地点数×2), I はデータのインデクス値です では, I=1 が海岸線, I=2 が湖岸線を表すとしております. maxLAT, minLAT, maxLON, minLON はセグメントの北端緯度, 南端緯度, 東端経 度, 西端経度を表します. データは(緯度, 経度)の組が繰り返され, 各 行に5点分(10個のデータ)が収められています. 言うまでもありません が, (LAT0001,LON0001)〜(LAT_N/2,LON_N/2)は連続した折線でなければ なりません. 従って複数の折線の集合としてデータを構成する場合には (これが一般的ですが), 上のようなデータの塊が複数連続したものとな ります. 緯度・経度のデータは Fortran のF型書式指定で '(F8.3)' で 書かれています. このような形式のデータを準備した後に, パッケージ の src/env1/mapdata/ 以下にある cvmapd というコマンドを用いて,
        % echo province_china.asc province_china | ./cvmapd
とすることにより, province_china というバイナリデータができます ので, このデータを UMPMAP に渡してあげれば, 中国の省境を描 くことができます.

海岸線のように塗り潰しを行えるデータにするためには, 上の一塊のデー タの並びは任意の折線に対するものではなく, 一筆書きとなった海岸線 あるいは境界線に対するものとなります. また閉じた海岸線・境界線は 反時計回りに辿らねばなりません. 但し N の最大値は塗り潰しを行う ルーチンの都合で 16384 となっています.

3.23 dcl-5.2或はそれ以前のバージョンからdcl-5.3に更新したらカラーマップが使えなくなりました.

dcl-5.3 よりカラーマップの参照方法の仕様変更がなされました. これ までは

        ./colormap.x11
        DUPATH/colormap.x11
        DSPATH/colormap.x11
の順番に直接カラーマップファイル colormap.x11 を探しにいっていま したが, dcl-5.3 からは, まず
        ./cmaplist
        DUPATH/cmaplist
        DSPATH/cmaplist
の順番に複数のカラーマップファイルが定義されているリスト cmaplist を探索し, 次に SWPACK の内部変数 ICLRMAP で定義されてい る値に対応する順番のファイルを同様の順番に探しに行くようになりま した. 規定値では ICLRMAP=1 なので, 探索するカラーマップファイル の規定値は cmaplist の1番目のファイル colormap_01.x11 となります. ここで DUPATH は DCL の各種データを保存しておくユーザ用のパス名, DSPATH はそれらのオリジナルがインストールされているパス名を表し ます. dcldbs コマンドで DSPATH の確認をすることができます.

dcl-5.2 以前までのように自分の作成したカラーマップファイル (mycolormap.x11) を読ませたい場合には, DUPATHあるいはカレントディ レクトリに

        1
        mycolormap My_Original_ColorMap
という cmaplist を置くだけで実現できます. cmaplist の 1行目はデー タの個数, 2行目以降はファイル名, コメントの組を記載します.

3.24 鉛直σ座標系の数値モデルの計算結果を用いて鉛直断面図を描きたいのですが.

dcl-5.3.1 以降のバージョンには, 堀之内さんによる座標変換ルーチン の拡張が含まれており, それにより鉛直σ座標系で表現されたの3次元 変数の鉛直断面図を手軽に描くことができます. 詳細についてはパッケー ジ内の README_itr51 をご覧下さい. サンプルプログラムも記載してあ ります. σ座標系の描画例はパッケージ内の IMG_g2pk02.png でもご覧 頂けます.

3.25 DCLで作成した PostScript ファイルを TeX 文書に取り込む際に余白を取りたいのですが.

主に2種類の方法があるかと思います. 1つは TeX 側で適切な BoundingBox を設定してあげることです.

          \includegraphics*[llx,lly][urx,ury]{file.eps}
と指定すると, 左下 (llx,lly) から右上 (urx,ury) までの領域をクリッ ピングしてくれます.

上記方法はクリッピングする位置が分かっている場合にはよいのですが, 通常は gv のような PostScript Viewer で位置を予め調べておくか, 或は試行錯誤で適切な位置を探す必要があります. そこで DCLではお手 軽に余白を取って新しい BoundingBox を設定するスクリプト dclpsmargin を用意しております. 余白は完全に消去するわけではなく, 規定値では図の長辺の 5% の余白を残すようにしてありますが, -m オ プションによりその割合を調節することも可能です. 図にコーナーマー クが存在する場合にはコーナーマークで囲まれた領域にクリッピングさ れるだけですから, 予めコーナーマークを削除しておくことが望ましい でしょう. 「コーナーマークを消したい」 を参照下さい.


次のページ 前のページ 目次へ