データ系列が複数ある場合のグラフ
次に、複数のデータ系列をグラフにしてみよう。ここでは、NovellとMicrosoftなど、数社の株価を比較できるようにする。まず、draw_chartサブルーチンを、企業コードが指定できるように変更する。
SUB draw_chart(company_symbols AS String[])
次に、Form_Openを、draw_chartが必要なデータを入手できるように変更する。
PUBLIC SUB Form_Open()
IF make_connection() = TRUE THEN
draw_chart(Array("NOVL", "MSFT"))
END IF
END
Y軸の目盛りを計算する際に使う最高値は、ここではグラフにする企業の株価全体で考える必要がある。そこで、SQL文を次のように変更する。
sql = "select max(value) as max_val from company_history where" &
" company_id in (select id from company_details where " &
" code in ( '" & company_symbols.Join("','") & "'))"
SQLに不慣れな場合はPRINT (sql)を挿入するとよい。実行時に、次のようにSQL文がGambasコンソール・ウィンドウに表示される。
select max(value) as max_val from company_history where company_id in (select id from company_details where code in ( 'NOVL','MSFT'))
これをコピーして直接データベースに適用すれば、求めているデータが得られたかどうかを確認できる。
次に、棒グラフを描くコードを削除(あるいはコメント化)し、折れ線グラフを描くコードを挿入する。FOR EACHループの中に入っているのは、各企業のデータを描くためだ。
FOR EACH symbol IN company_symbols 'All of our code for displaying the line chart for the relevant company NEXT
そして、データを入手するSQLを変更する。
sql = "select date,value from company_history where" & " company_id in (select id from company_details where " & " code = '" & symbol & "')"
ここで、アプリケーションを実行してみよう。企業の数だけ折れ線が描かれるはずだ。しかし、どの折れ線がどの企業を表しているのかわからない。そこで、簡単なSELECT CASE文を挿入して色分けしよう。ループで折れ線を描くたびに線の色を順次変更するのだ。
SELECT CASE chart_color CASE color.black chart_color = color.red CASE color.red chart_color = color.green CASE color.green chart_color = color.yellow CASE ELSE chart_color = color.black END SELECT draw.ForeColor = chart_color
もちろん、このコードはFOR EACHループの中、各企業の折れ線を描く直前に置く必要がある。そして、各企業の記号を対応する色で表示すれば完成だ。
IF x_pos = origin_x THEN draw.Text(symbol, 0, y_pos) END IF
ここでIF文になっているのは、記号が初回の反復でだけ表示されるようにするためだ。コードは新しいxとyの位置が計算された直後に置く必要がある。これで、指定した企業の株価を比較する簡易なグラフは完成だ。
このように、Gambas 2.0アプリケーションでは、データを簡単かつ短時間でグラフにすることができる。
簡単なものからずっと凝ったものまで、さまざまなグラフを含むGambas 2.0プロジェクトを用意した。私のサイトから入手できるので、参考にして欲しい。
