[目次へもどる] [前へ] [次へ]

気温・露点温度・降水量の時系列をグラフにする

では,応用例として気温・露点温度・降水量の時系列のグラフを描いた "meteor.ps"の出力図とソースコードを示します.ちょっと長いですが, いままで説明したないようしか使っていません.配列や制御文を 使えばもっと効率的に描けるのですが・・・ 説明はコメントを見てください.

meteor.jpg
50dpiでA4用紙へ出力
meteor.ps
%!PS-Adobe-3.0

576 0 translate             % Landscape Mode !
90 rotate

28.571429 28.571429 scale   % 単位をcmへ変更
3.0 3.0 translate           % 原点の移動

% 頻繁につかう命令をマクロ定義する.
/M   {moveto}    def
/RM  {rmoveto}   def
/L   {lineto}    def
/RL  {rlineto}   def
/N   {newpath}   def
/C   {closepath} def
/S   {stroke}    def
/F   {fill}      def

% 表示するデータは
% 0時から24時までの
%    降水量    (前1時間積算降水量:1h〜24h)
%    気温      (0hから23h)
%    露点温度  (0hから23h)


% グラフの幅は20cm,高さは10cmとする
/GRAPH_WIDTH   20  def
/GRAPH_HEIGHT  10  def


% グラフの範囲を設定する

% 時間  0 - 24h
/Start_HOUR   0  def
/End_HOUR    24  def

% 温度  -10 - 20deg.
/Start_TEMP  -10 def
/End_TEMP     20 def

% 降水量 0 - 15mm 
/Start_PREC    0 def
/End_PREC     15 def


% 1時間当たりのグラフの幅(cm)
/CMperHOUR  GRAPH_WIDTH   End_HOUR  Start_HOUR  sub  div  def

% 温度1度当たりのグラフの高さ(cm)
/CMperTEMP  GRAPH_HEIGHT  End_TEMP  Start_TEMP  sub  div  def

% 降水量1mm当たりのグラフの高さ(cm)
/CMperPREC  GRAPH_HEIGHT  End_PREC  Start_PREC  sub  div  def

% 時間からx軸の座標に変えるオペレータをつくる
/HOUR2CM { Start_HOUR  sub  CMperHOUR  mul } def 

% 温度からx軸の座標に変えるオペレータをつくる
/TEMP2CM { Start_TEMP  sub  CMperTEMP mul } def 

% 降水量からx軸の座標に変えるオペレータをつくる
/PREC2CM { Start_PREC  sub  CMperPREC mul } def 


%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3時間毎にグリッド線をひく
%%%%%%%%%%%%%%%%%%%%%%%%%%%

% xの値を指定してグラフの高さだけのグリッド線をひく
% マクロを作成する.
/GRID_X { HOUR2CM N 0 M 0 GRAPH_HEIGHT RL S } def

0.8 setgray        % 色はグレーの0.8 
0.03 setlinewidth  % 線の幅は0.3mm

% 3,6,9,12,15,18,21h のグリッド線をひく
 3 GRID_X
 6 GRID_X
 9 GRID_X
12 GRID_X
15 GRID_X
18 GRID_X
21 GRID_X


%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 10deg毎にグリッド線をひく
%%%%%%%%%%%%%%%%%%%%%%%%%%%

% xの値を指定してグラフの高さだけのグリッド線をひく
% マクロを作成する.
/GRID_Y { TEMP2CM N 0 exch M GRAPH_WIDTH 0 RL S } def

0.8 setgray        % 色はグレーの0.8 
0.03 setlinewidth  % 線の幅は0.3mm

% -5,0,5,10,15 deg. のグリッド線をひく
-5 GRID_Y
 0 GRID_Y
 5 GRID_Y
10 GRID_Y
15 GRID_Y


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 念のためグラフ領域をクリップする
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

N
          0             0  M
GRAPH_WIDTH             0  L
GRAPH_WIDTH  GRAPH_HEIGHT  L
          0  GRAPH_HEIGHT  L
C clip


%%%%%%%%%%%%%%
% 降水量を描く
%%%%%%%%%%%%%%

% 降水量は柱でしめす.時間と,その前1時間雨量から
% 柱を一本描くマクロを作る
/PREC_BAR {
	PREC2CM exch HOUR2CM exch  % 値をcmに変える
	dup  3  1  roll            % 降水量のを複製し残す
	% 柱のパスを作る
	N
	M      % すでにスタックの中にある値で移動(柱の右上)
	0 CMperHOUR sub 0 RL    % (柱の左上)
	0 exch sub 0 exch RL    % 残した降水量の値で柱の左下へ
	CMperHOUR  0 RL         % (柱の右下)
	C
	gsave                   % 作ったパスを保存
	0.7 0.9 0.7 setrgbcolor
	F                       % 柱を塗りつぶす
	grestore                % 保存したパスを復元
	0 setgray
	0.03 setlinewidth
	S                       % 柱の輪郭を描く
} def

%前1時間降水量の柱を描く
% hour    rain
     1       0     PREC_BAR
     2       0     PREC_BAR
     3       1     PREC_BAR
     4       3     PREC_BAR
     5       0     PREC_BAR
     6       0     PREC_BAR
     7       2     PREC_BAR
     8       0     PREC_BAR
     9       0     PREC_BAR
    10       0     PREC_BAR
    11       3     PREC_BAR
    12       9     PREC_BAR
    13       6     PREC_BAR
    14       2     PREC_BAR
    15       0     PREC_BAR
    16       1     PREC_BAR
    17       0     PREC_BAR
    18       0     PREC_BAR
    19       0     PREC_BAR
    20       0     PREC_BAR
    21       0     PREC_BAR
    22       0     PREC_BAR
    23       0     PREC_BAR
    24       0     PREC_BAR


%%%%%%%%%%%%
% 気温を描く
%%%%%%%%%%%%

% 前の点から現在の点まで線でつなぐマクロを作成する.
/DRAWLINE {
    TEMP2CM exch HOUR2CM exch 2 copy
    L S N M
} def
/DRAWLINE_Start {
    TEMP2CM exch HOUR2CM exch N M
} def

% 線の色と太さを設定する
0.9 0.5 0.5 setrgbcolor
0.1 setlinewidth

% 気温を線で結ぶ
% hour    temp
     1     8.0     DRAWLINE_Start
     2     7.7     DRAWLINE
     3     6.6     DRAWLINE
     4     5.1     DRAWLINE
     5     4.5     DRAWLINE
     6     4.3     DRAWLINE
     7     5.7     DRAWLINE
     8     7.8     DRAWLINE
     9     9.6     DRAWLINE
    10    10.7     DRAWLINE
    11    11.3     DRAWLINE
    12    13.9     DRAWLINE
    13    13.6     DRAWLINE
    14    10.2     DRAWLINE
    15     6.0     DRAWLINE
    16     2.7     DRAWLINE
    17     1.2     DRAWLINE
    18     0.4     DRAWLINE
    19    -1.7     DRAWLINE
    20    -0.0     DRAWLINE
    21    -0.3     DRAWLINE
    22    -1.7     DRAWLINE
    23    -1.6     DRAWLINE


% 指定した位置を○でプロットするためのマクロを作成
% 円の半径は1時間当たりの長さの5分の1にする
/PLOT_CIRCLE{
    TEMP2CM exch HOUR2CM exch
    N CMperHOUR 5 div 0 360 arc C
    gsave
    1 1 1 setrgbcolor
    F
    grestore
    S
} def

% 線の色と太さを設定する
0.9 0.5 0.5 setrgbcolor
0.05 setlinewidth

% 気温をプロットする
% hour    temp
     1     8.0     PLOT_CIRCLE
     2     7.7     PLOT_CIRCLE
     3     6.6     PLOT_CIRCLE
     4     5.1     PLOT_CIRCLE
     5     4.5     PLOT_CIRCLE
     6     4.3     PLOT_CIRCLE
     7     5.7     PLOT_CIRCLE
     8     7.8     PLOT_CIRCLE
     9     9.6     PLOT_CIRCLE
    10    10.7     PLOT_CIRCLE
    11    11.3     PLOT_CIRCLE
    12    13.9     PLOT_CIRCLE
    13    13.6     PLOT_CIRCLE
    14    10.2     PLOT_CIRCLE
    15     6.0     PLOT_CIRCLE
    16     2.7     PLOT_CIRCLE
    17     1.2     PLOT_CIRCLE
    18     0.4     PLOT_CIRCLE
    19    -1.7     PLOT_CIRCLE
    20    -0.0     PLOT_CIRCLE
    21    -0.3     PLOT_CIRCLE
    22    -1.7     PLOT_CIRCLE
    23    -1.6     PLOT_CIRCLE


%%%%%%%%%%%%%%%%
% 露点温度を描く
%%%%%%%%%%%%%%%%

% 線の色と太さを設定する
0.5 0.5 0.9 setrgbcolor
0.1 setlinewidth

% 露点温度を線で結ぶ
% hour  dewpoint
     1     1.3     DRAWLINE_Start
     2     1.5     DRAWLINE
     3     1.7     DRAWLINE
     4     2.4     DRAWLINE
     5     2.4     DRAWLINE
     6     2.3     DRAWLINE
     7     3.9     DRAWLINE
     8     4.5     DRAWLINE
     9     6.7     DRAWLINE
    10     6.2     DRAWLINE
    11     6.1     DRAWLINE
    12     6.7     DRAWLINE
    13     5.5     DRAWLINE
    14     6.3     DRAWLINE
    15     1.2     DRAWLINE
    16     0.9     DRAWLINE
    17    -1.4     DRAWLINE
    18    -2.6     DRAWLINE
    19    -3.5     DRAWLINE
    20    -2.1     DRAWLINE
    21    -2.4     DRAWLINE
    22    -2.8     DRAWLINE
    23    -2.5     DRAWLINE

% 線の色と太さを設定する
0.5 0.5 0.9 setrgbcolor
0.05 setlinewidth

% 露点温度を線で結ぶ
% hour   dewpoint
     1     1.3     PLOT_CIRCLE
     2     1.5     PLOT_CIRCLE
     3     1.7     PLOT_CIRCLE
     4     2.4     PLOT_CIRCLE
     5     2.4     PLOT_CIRCLE
     6     2.3     PLOT_CIRCLE
     7     3.9     PLOT_CIRCLE
     8     4.5     PLOT_CIRCLE
     9     6.7     PLOT_CIRCLE
    10     6.2     PLOT_CIRCLE
    11     6.1     PLOT_CIRCLE
    12     6.7     PLOT_CIRCLE
    13     5.5     PLOT_CIRCLE
    14     6.3     PLOT_CIRCLE
    15     1.2     PLOT_CIRCLE
    16     0.9     PLOT_CIRCLE
    17    -1.4     PLOT_CIRCLE
    18    -2.6     PLOT_CIRCLE
    19    -3.5     PLOT_CIRCLE
    20    -2.1     PLOT_CIRCLE
    21    -2.4     PLOT_CIRCLE
    22    -2.8     PLOT_CIRCLE
    23    -2.5     PLOT_CIRCLE

%%%%%%%%%%%%%%%%%%%%
% クリップを解除する
%%%%%%%%%%%%%%%%%%%%

initclip


%%%%%%%%%%%%
% 外枠を描く
%%%%%%%%%%%%

0.05 setlinewidth
0 setgray
N
          0             0  M
GRAPH_WIDTH             0  L
GRAPH_WIDTH  GRAPH_HEIGHT  L
          0  GRAPH_HEIGHT  L
C S


%%%%%%%%%%%%%%%%%
% x軸の文字を描く
%%%%%%%%%%%%%%%%%

% 文字の位置と文字を指定して中揃えで描く
% マクロを作る
/X_LABEL {
    exch HOUR2CM 0 M
    0 -0.6 RM
    dup stringwidth pop 2 div 0 exch sub 0 RM
    show
} def
    
% フォントを設定する
/Helvetica findfont 0.5 scalefont setfont
0 setgray

% ラベルを描く
 0 (00) X_LABEL
 3 (03) X_LABEL
 6 (06) X_LABEL
 9 (09) X_LABEL
12 (12) X_LABEL
15 (15) X_LABEL
18 (18) X_LABEL
21 (21) X_LABEL
24 (24) X_LABEL

% 軸タイトルようのフォントを設定する
/Helvetica findfont 0.8 scalefont setfont
0 setgray

% 軸のタイトルを描く
(TIME (JST))
0 -1.8 M
GRAPH_WIDTH 2 div 0 RM                    % 枠の中心に
dup stringwidth pop 2 div 0 exch sub 0 RM % 中揃え
show


%%%%%%%%%%%%%%%%%
% y軸の文字を描く
%%%%%%%%%%%%%%%%%

% 文字の位置と文字を指定して文字を描く
% マクロを作る
/Y_LABEL_T {
    exch TEMP2CM 0 exch M
    -0.2 -0.15 RM
    dup stringwidth pop 0 exch sub 0 RM %  右揃え
    show
} def
/Y_LABEL_P {
    exch PREC2CM GRAPH_WIDTH exch M
    0.2 -0.15 RM
    show
} def
    

% フォントを設定する
/Helvetica findfont 0.5 scalefont setfont
0 setgray

% ラベルを描く
-10 (-10) Y_LABEL_T
 -5 (-5)  Y_LABEL_T
  0 (0)   Y_LABEL_T
  5 (5)   Y_LABEL_T
 10 (10)  Y_LABEL_T
 15 (15)  Y_LABEL_T
 20 (20)  Y_LABEL_T

  0 (0)   Y_LABEL_P
  5 (5)   Y_LABEL_P
 10 (10)  Y_LABEL_P
 15 (15)  Y_LABEL_P

% 軸タイトルようのフォントを設定する
/Helvetica findfont 0.8 scalefont setfont
0 setgray

% 軸のタイトルを描く
(TEMP. DEWPOIN (deg))
gsave
90 rotate      % 軸を回転        
0 1.2 M
GRAPH_HEIGHT 2 div 0 RM                    % 枠の中心に
dup stringwidth pop 2 div 0 exch sub 0 RM  % 中揃え
show
grestore

(PRECIPITATION (mm))
gsave
GRAPH_WIDTH GRAPH_HEIGHT translate  % 右上へ原点を移動して
-90 rotate                          % 軸を回転
0 1.0 M
GRAPH_HEIGHT 2 div 0 RM
dup stringwidth pop 2 div 0 exch sub 0 RM
show
grestore

showpage


[目次へもどる] [前へ] [次へ]