配列を使ってグラフを作成する (例題)

4D - Documentation   Fran溝is   English   German   日本語   4D Chartコマンドテーマリスト   4D Chartインデックス   戻る   Previous   Next

version 6.0 (Modified)


以下の2つの節では、CT Chart arrays 関数を使用して、2次元グラフと3次元グラフを作成する例を示します。

データベースのレコードを使用して、グラフの作成をプログラムしたい場合、Creating Graphs from Records in a Database (examples) 節を参照してください。

各項目では、以下の例題について説明します。

・例に使用される状況の説明

・サンプルデータベースの構造

・サンプルデータを使用して、すべてメソッドで作成されたグラフ

・サンプルグラフの作成に使用されたコード

配列を使って2次元グラフを作成する


例えば、部品を製造する企業のエンジニアリング部門の新しいマネージャになったと仮定してください。あなたの新しい業務の1つとして、ご自分が管理する部署が顧客からの支援要求に応答するときの時間を短縮することがあります。

よって、各部署の応答時間を追跡するためにデータベースを設計することにしました。データベースの構造は以下の通りです。

収集した情報を解析するために、去年の各月について、各部署の平均応答時間 (完了日 - 要求日 / 要求数) をグラフ化することにしました。4D Chartを使用して、以下のグラフを生成します。

前述のグラフが生成され、GR RESPONSE メソッドでフォーマットされました。このメソッドは配列にデータを入れ、その配列からグラフを生成してから、軸タイトルや系列のカラーなどのグラフの特定の外観をカスタマイズします。

メソッドの最初の部分は4D コマンドと関数を使用して配列の作成とデータの指定を行っています。項目配列の内容はコードで指定され、系列配列の内容はデータベースから直接取り込まれ、数値配列はデータ操作の結果です。数値配列のサイズは項目配列のサイズを系列配列のサイズで乗算したものと同じです。

このメソッドは、レコードの選択を操作するためにセットを使用します。セットを作成した後は、必要とされるレコードの選択を検索によって変更し、何度でもレコードのオリジナルセットに戻すことができます。このメソッドでは、セットはグラフ全体のレコードの選択に使用されます。各月の各部署のレコードの検索の結果行われる選択で値が決まるので、選択は数値配列へのデータの指定中に変更されます。配列にデータが指定された後、4D Chartコマンドがグラフの作成とその機能の変更のために使用されます。

配列にデータが指定された後、4D Chartコマンドがグラフの作成とその機能の変更のために使用されます。

以下は、GR RESPONSE メソッドのコードです。

   ?`メソッド: GRAPH RESPONSE
   ??`項目: 月Months  of the year
   ??`系列: 部門名
   ??`値: 作業期間の平均(日単位)

   C_LONGINT ($x;$y;$z;$Counter)
   C_LONGINT ($Left;$Top;$Right;$Bottom)
   C_LONGINT ($Left2;$Top2;$Right2;$Bottom2)
   C_LONGINT ($Area;$Chart;$Title;$Locate;$Duration;$Color;$Font)

   ??`項目配列を定義し、値を入れる
   ARRAY STRING (3;$aCategories;12)
   $aCategories{1}:="Jan"
   $aCategories{2}:="Feb"
   $aCategories{3}:="Mar"
   $aCategories{4}:="Apr"
   $aCategories{5}:="May"
   $aCategories{6}:="Jun"
   $aCategories{7}:="Jul"
   $aCategories{8}:="Aug"
   $aCategories{9}:="Sep"
   $aCategories{10}:="Oct"
   $aCategories{11}:="Nov"
   $aCategories{12}:="Dec"

   ??`チャート用のレコード選択を生成する
   ??`後で使用するためにレコードをセットに格納する
   QUERY BY FORMULA ([Response Time];Year of ([Response Time]Request Date)=1993)
   CREATE SET ([Response Time];"sChartData")

   ??`系列配列を部門名で定義し、データを入れる
   ARRAY STRING (20;$aSeries;0)
   DISTINCT VALUES ([Response Time]Department;$aSeries)

   ??`数値の数でチャートを判断する
   ??`(数値の数=項目の数*系列の数)
   ??`数値配列を設定する
   ARRAY REAL ($aValues;12*Size of array($aSeries))

   ??`数値配列にデータを入れる
   ??`各部門で、月ごとの平均作業期間を検出する
   $Counter:=0??`カウンタは数値の数を追跡する
   For ($x;1;Size of array ($aSeries))??`部門の数だけループする
      For ($y;1;12)??`12ヵ月分ループする
         $Counter:=$Counter+1
         QUERY SELECTION ([Response Time];[Response Time]Department=$aSeries{$x})
         QUERY SELECTION BY FORMULA ([Response Time];Month of ([Response Time]Request Date)=$y)
         If (Records in selection ([Response Time])>0)
            $Duration:=0??`インクリメント期間のカウンタ
            For ($z;1;Records in selection ([Response Time]))
               GOTO SELECTED RECORD ([Response Time];$z)
               $Duration:=$Duration+([Response Time]Completion Date-[Response Time]Request Date)
            End for 
            $aValues{$Counter}:=$Duration/Records in selection([Response Time])??
         End if 
         USE SET("sChartData")??`レコードの元のセレクションを復元する
      End for 
   End for 

   ??`インターフェース要素を隠す
   CT SET DISPLAY (Area;1;0)??`メニューを隠す
   CT SET DISPLAY (Area;2;0)??`チャートツールを隠す
   CT SET DISPLAY (Area;3;0)??`オブジェクトツールを隠す
   CT SET DISPLAY (Area;6;0)??`スクロールバーを隠す
   CT SET DISPLAY (Area;9;0)??`ルーラーを隠す

   ??`棒グラフを作成する
   $Chart:=CT Chart arrays (Area;2;1;$aCategories;$aSeries;$aValues)

   ??`項目軸と数値軸のタイトルを追加する
   CT SET TITLE ATTRIBUTES (Area;$Chart;2;2;3;"Response Time in Days")
   CT SET TITLE ATTRIBUTES (Area;$Chart;0;3;0;"Month Request Was Received")

   ??`系列のカラーを設定する(緑、黄色、青)
   CT SET CHART FILL ATTRIBUTES (Area;$Chart;8;100;3;CT Index to color (10))
   CT SET CHART FILL ATTRIBUTES (Area;$Chart;8;200;3;CT Index to color (2))
   CT SET CHART FILL ATTRIBUTES (Area;$Chart;8;300;3;CT Index to color (7))

   ??`凡例位置を上部中央、横方向に設定する
   CT SET LEGEND ATTRIBUTES (Area;$Chart;1;0;0;0;7;0;0)

   ??`チャートタイトルを左上隅に追加する
   $Title:=CT Draw text (Area;1;1;300;3;"Average Response Time Per Department")

   ??`チャートタイトルをフォーマットする(Osaka , 14ポイント, 太字, 中央揃え, 黒)
   $Color:=CT Index to color (16)
   $Font:=CT Font number ("Palatino")
   CT SET TEXT ATTRIBUTES (Area;$Title;$Font;14;1;$Color;1)

   ??`ウインドウのオブジェクトを中央揃えするためにチャートエリアの寸法を検出する
   CT GET AREA BOUNDARY (Area;1;$Left;$Top;$Right;$Bottom)

   ??`チャートのウインドウサイズを50ポイント小さく再定義する
   CT SIZE (Area;$Chart;$Right-50;$Bottom-50)

   ??`チャートを中央揃えする
   CT GET BOUNDARY (Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Area;$Chart;$Locate;$Top2)

   ??`チャートタイトルを中央揃えする
   CT GET BOUNDARY (Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Area;$Title;$Locate;$Top2)

      `チャートを10ポイント下げる
   CT GET BOUNDARY (Area;$Chart;$Left;$Top;$Right;$Bottom)
   CT MOVE (Area;$Chart;$Left;$Top+10)

   ??`すべのオブジェクトの選択を解除する
   CT SELECT (Area;-1;0)

配列を使って3次元グラフを作成する


例えば、教育プログラムの西日本地区担当者であり、該当地区の生徒達のテストスコアが向上したかどうかを判断したいと仮定します。データベースには、テスト日付と出身地にタグが付いて、該当地区の生徒のスコアが保存されています。

Note: これは、Creating Graphs from Records in a Database (example) 節にある Creating a Two-Dimensional Graph with the Series Defined by Data in Records の項目で使用したのと同じサンプルデータベースです。

毎年複数のテスト日があるので、データベースから直接データをグラフ化することはできません。その代わりに、データを配列に入れるメソッドを作成し、各年を "項目"、各県を "系列" として使用することができます。

前述のグラフはGRAPH SCORES 3D メソッドを使用して生成されています。このメソッドは配列にデータを入れ、配列からグラフを生成した後、グラフの特定の外観をカスタマイズします。

項目配列の内容はコードに直接指定されます。系列配列の内容はデータベースから取られます。数値配列の内容は年ごとの各都道府県のテストスコアの平均です。数値配列のサイズは項目配列のサイズを系列配列のサイズで乗算したものと同じです。

4D Chartコマンドを使用すると、4D Chartメニューバー、スクロールバー、ルーラ、ツールパレットは隠されます。4D Chartエリアは入力不可に設定され、ユーザはそのエリアのオブジェクトを選択したり、それに対する変更をまったく行えなくなります。

以下は、GRAPH SCORES 3D メソッドのコードです。

   ??`メソッド: GRAPH SCORES 3D
   ??`項目: 調査年
   ??`系列: メンバーの県
   ??`値: ストスコア

   C_LONGINT ($x;$y;$z;$Counter)
   C_LONGINT ($Left;$Top;$Right;$Bottom)
   C_LONGINT ($Left2;$Top2;$Right2;$Bottom2)
   C_LONGINT ($Area;$Chart;$Title;$Locate;$Score;$Color;$Font;$Rect)

   ??`項目配列を定義し、データを指定する
   ARRAY STRING (4;$aCategories;2)
   $aCategories{1}:="1992"
   $aCategories{2}:="1993"

   ??`数値配列を設定する
   ALL RECORDS ([Test Scores])
   ARRAY STRING (2;$aSeries;0)
   DISTINCT VALUES ([Test Scores]State;$aSeries)

   ??`Dimension the values 配列
   ??`(グラフへの数値の数=項目*系列)
   ARRAY REAL ($aValues;2*Size of array ($aSeries))

        `数値配列を判断し、データを指定する
        `各県に対し、平均ストスコアを検出する
   $Counter:=0??`カウンタは数値を追跡する
   For ($x;1;Size of array ($aSeries))??`県の数だけループする
      For ($y;1;2)??`2年間だけループする
         $Counter:=$Counter+1
         QUERY([Test Scores];[Test Scores]State=$aSeries{$x})
         QUERY SELECTION BY FORMULA([Test Scores];
                     String(Year of([Test Scores]Test Date))=$aCategories{$y})
         If (Records in selection([Test Scores])>0)
            $Score:=0??`スコアの合計を保持する
            For ($z;1;Records in selection ([Test Scores]))
               GOTO SELECTED RECORD ([Test Scores];$z)
               $Score:=$Score+[Test Scores]Score
            End for 
               `スコアの平均を出す
            $aValues{$Counter}:=$Score/Records in selection ([Test Scores])?? 
         End if 
      End for 
   End for 

   ??`セレクションしいるものを戻す
   ALL RECORDS ([Test Scores])

   ??`インタフェース要素を隠す
   CT SET DISPLAY (Area;1;0)??`4D Chartメニューバーを隠す
   CT SET DISPLAY (Area;2;0)??`チャートツールを隠す
   CT SET DISPLAY (Area;3;0)??`オブジェクトツールを隠す
   CT SET DISPLAY (Area;6;0)??`スクロールバーを隠す
   CT SET DISPLAY (Area;9;0)??`ルーラを隠す

   ??`3D 棒グラフを作成する
   $Chart:=CT Chart arrays (Area;100;1;$aCategories;$aSeries;$aValues)

   ??`別の軸タイトルを表示または隠す
   CT SET TITLE ATTRIBUTES (Area;$Chart;0;3;0;"Year Tested")
   CT SET TITLE ATTRIBUTES (Area;$Chart;1;1;0;"State")??`タイトルを隠す
   CT SET TITLE ATTRIBUTES (Area;$Chart;2;2;3;"Average Score (in Points)")

   ??`凡例位置を上部中央、横方向に設定する
   CT SET LEGEND ATTRIBUTES (Area;$Chart;1;0;0;0;7;0;0)

   ??`チャートタイトルを左上隅に追加する
   $Title:=CT Draw text (Area;1;1;350;3;"Member State Test Scores")

   ??`チャートタイトルをフォーマットする(MゴシックBBB, 14ポイント, 太字, 中央揃え, 青)
   $Color:=CT Index to color (7)
   $Font:=CT Font number ("Geneva")
   CT SET TEXT ATTRIBUTES (Area;$Title;$Font;14;1;$Color;1)

   ??`中央揃えのためにウインドウの寸法を取得する
   CT GET AREA BOUNDARY (Area;1;$Left;$Top;$Right;$Bottom)

   ??`チャートをウインドウサイズから50ポイント小さく変更する
   CT SIZE (Area;$Chart;$Right-50;$Bottom-50)

   ??`チャートを横方向に中央揃えする
   CT GET BOUNDARY (Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Area;$Chart;$Locate;$Top2)

   ??`タイトルを横方向に中央揃えする
   CT GET BOUNDARY (Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Right-$Left)-($Right2-$Left2))/2
   CT MOVE (Area;$Title;$Locate;$Top2)

   ??`チャートをタイトルから10ポイント分下げる
   CT GET BOUNDARY (Area;$Chart;$Left;$Top;$Right;$Bottom)
   CT MOVE (Area;$Chart;$Left;$Top+10)

   ??`チャートとタイトルに灰色の矩形で枠組みをする
   $Rect:=CT Draw rectangle (Area;$Left-2;$Top2-2;$Right+2;$Bottom+2+10;0)
   CT SET FILL ATTRIBUTES (Area;$Rect;3;CT Index to color (13))

   ??`すべのオブジェクトを縦方向に中央揃えする
   CT GET AREA BOUNDARY (Area;1;$Left;$Top;$Right;$Bottom)
   CT GET BOUNDARY (Area;-1;$Left2;$Top2;$Right2;$Bottom2)
   $Locate:=(($Bottom-$Top)-($Bottom2-$Top2))/2
   CT MOVE (Area;-1;$Left2;$Locate)

   ??`灰色の矩形を奥に下げる
   CT SELECT (Area;-1;0)??`すべの選択を解除する
   CT SELECT (Area;$Rect;1)??`矩形を選択する
   CT DO COMMAND (Area;24002)??`背面を送る
   CT SELECT (Area;-1;0)??`すべの選択を解除する

   ??`すべのオブジェクトの選択を解除する
   CT SELECT (Area;-1;0

参照

データベース内のレコードを使ってグラフを作成する (例題).


4D - Documentation   Fran溝is   English   German   日本語   4D Chartコマンドテーマリスト   4D Chartインデックス   戻る   Previous   Next