CodeZine(コードジン)

特集ページ一覧

グリッドデータを散布図で表示する ASP.NET アプリケーションの作成

C1ScatterChartコントロールを使ったWebアプリケーションの作成

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/06/20 14:00

 「ScatterChart for ASP.NET Wijmo」のC1ScatterChartコントロールと、C1GridViewコントロールを使用して、SQL Serverのデータをグリッド表示しながら散布図を表示するWebアプリケーションを作成してみます。

はじめに

 データ解析手法の一つに散布図があります。2種類のデータの相関関係をグラフにしたもので、品質管理(QC)7つ道具の一つにも使われています。

 「ScatterChart for ASP.NET Wijmo」のC1ScatterChartコントロールは、散布図を作成するコントロールです。1つの系列だけでなく複数の系列を1つのグラフに表示したり、データ点にマウスポインタを重ねるとデータ点を大きく表示するアニメーション効果など、単なるグラフではなく、多彩な視覚効果を備えたグラフコントロールになっています。

 今回はこのC1ScatterChartコントロールと、データベースデータをグリッド表示するC1GridViewコントロールを使用して、SQL Serverのデータをグリッド表示しながら散布図を表示するWebアプリケーションを作成してみました。

グリッドデータを用いて散布図を表示
グリッドデータを用いて散布図を表示
データ点にマウスポインタを重ねるとアニメーションでデータ点が大きくなる
データ点にマウスポインタを重ねるとアニメーションでデータ点が大きくなる

対象読者

 Visual Basic 2010/2012、またはVisual C# 2010/2012を使ってプログラムを作ったことがある人。

必要な環境

 Visual Basic 2010/2012、Visual C# 2010/2012、Visual Studio 2010/2012でプログラムが作れる環境。

 対応ブラウザについては、グレープシティ社Webサイトの「クロスブラウザ対応」ページでご確認ください。

 なお、本プログラムは次の環境で開発・動作確認を行っています。

  • OS:Windows 7
  • 開発Tool:Visual Studio 2010、.NET Framework 4
  • ブラウザ:Microsoft Internet Explorer 10

サンプルプログラム実行時の注意事項

[1] Visual StudioでサンプルWebサイトを開く

 Visual Studioをお持ちであれば、「ComponentOne Studio for ASP.NET Wijmo 2013J」トライアル版をインストールし、ソースコード圧縮ファイル「scatterchart_ASP_vb_src.zip」または「scatterchart_ASP_cs_src.zip」を解凍すると作成されるプロジェクトファイルを、Visual Studioで開き実行させてください。

[2] Visual Studioを使わずにサンプルWebサイトを開く

 Visual Studioを使わずに、サンプルWebサイトを直接IISなどのWebサーバで開く場合は、ソースコード圧縮ファイル「scatterchart_ASP_vb_src.zip」または「scatterchart_ASP_cs_src.zip」を解凍すると作成されるプロジェクトファイルを、フォルダ構成を変えずにWebサーバにインストール・登録してください。

 以下は、Microsoft IISサーバにインストールする場合の手順です。

  1. プロジェクトファイルのフォルダを、そのままWebサーバーへ配置します(例:\Inetpub\wwwroot直下へ配置)。
  2. サーバーに配置したアプリケーションフォルダに対して、「アプリケーションへの変換」を実行します。
  3. 「アプリケーションの追加」ダイアログで、「アプリケーションプール」を「Classic .NET AppPool」に設定します。
  4. クライアントのWebブラウザで、Default.aspxファイルを開きます(例:http://localhost/mysplit_vb/Default.aspx)。
注意事項

 UAC(ユーザーアカウント制御)がサポートされているWindows Vista以降のOSで製品のサンプルをコンパイルしようとするとエラーが発生する場合があります。

 これは、UACにより製品サンプルがインストールされているフォルダに書き込みができないため、コンパイル時にエラーが発生するという現象です。Visual Studioを管理者権限で実行するか、サンプルプロジェクト一式をアクセス権のあるフォルダに移動してからコンパイルを行うようにしてください。

 また、Webブラウザでaspxファイルを実行する際にIISサーバでエラーになる場合は、Web.configファイルに以下の1行を追加してください。

<identity impersonate="false" />

コンポーネントのインストール

 トライアル版は、グレープシティのWebページから申し込みできます。

 トライアル申込フォームが表示されますので、必要情報を入力して申し込むとトライアル版のダウンロード手順を記載したE-Mailが送られてきます。その手順にそってダウンロードを行ってください。また、ダウンロードファイルは圧縮ファイルになっていますので、解凍してインストーラを起動します。

 制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールと参照の追加

 「ComponentOne Studio for ASP.NET Wijmo 2013J」をインストールしたら、プロジェクトにコントロールを追加します。

 ツールボックスに専用のタブを作成し、使用するコンポーネントを追加します。

 追加するコンポーネントは、アセンブリ名が「C1.Web.Wijmo.Controls.4」の「C1ScatterChart」「C1GridView」コントロールです。

アセンブリ名が「C1.Web.Wijmo.Controls.4」の「C1ScatterChart」「C1GridView」コントロールを選択する
アセンブリ名が「C1.Web.Wijmo.Controls.4」の「C1ScatterChart」「C1GridView」コントロールを選択する@@

 これらのコントロールを追加すると、プロジェクトに以下のランタイムライブラリへの参照が追加されます。

ファイル 内容
C1.Web.Wijmo.Controls.4 本体アセンブリ

 また、プロジェクトに以下のランタイムライブラリが追加されます。

ファイル 内容
C1.C1Report.4.dll 本体アセンブリ
C1.Web.Wijmo.Controls.4.dll 本体アセンブリ

 なお、.NET Framework 4が必要です。

C1GridViewコントロールの概要

 C1GridViewコントロールについては、過去の記事『多彩な表現形式でデータをグリッド表示するASP.NETアプリケーションの作成』で概要を紹介していますので、詳しくはそちらを参照してください。

C1ScatterChartコントロールの概要

 「ScatterChart for ASP.NET Wijmo」のC1ScatterChartコントロールは、2種類のデータを組み合わせて1つのデータポイントにし、値の相関関係(散布図)をグラフで表示するコントロールです。

身長と体重の相関関係を表示するグラフ(ヘルプより抜粋)
身長と体重の相関関係を表示するグラフ(ヘルプより抜粋)

 散布図は、グラフ領域全体に散らばった単純な数値データポイントを表示するグラフの一つです。変数間の非線形関係を表示する際にも、大きな視覚効果が生まれます。

 また、ただ単にデータをグラフ表示するだけではなく、グラフ要素の高度な視覚効果によって、色、角度、階調度、輝度、スケール、形状を調整して効果を変更することにより、グラフ要素の外観をより見やすいグラフにすることも可能です。

 さらに、ツールチップのラベルを設定することもできるので、データ点へのホバー時、各ポイントと系列に関する情報を持つツールチップテキストを表示できます。ツールチップはユーザーがグラフ上でマウスを動かすと後を追います。

 軸に使用する値には複数のデータタイプを設定でき、X軸はstring/numeric/datetimeの型をサポートし、Y軸はnumeric/datetimeの型をサポートしています。

 各単位の間隔の値や目盛の配置場所を自動的に決定する機能を持っています。

 C1ScatterChartコントロールはIE、Firefox、Safari、Chrome、Operaなどの主要なブラウザをサポートしていますので、作成するWebページを表示するブラウザを選びません。しかも、カスタマイズされたコンテキストメニュー、スマートタグ、および充実したデザイン時サポートを提供するコレクションデザイナを備えており、オブジェクトモデルの操作が簡素化されています。

 スマートタグは、C1ScatterChartで最もよく使用されるプロパティを提供するショートカットタスクメニューです。スマートタグによって、よく使用されるプロパティにすばやく簡単にアクセスできます。

 また、「ScatterChartSeries」と「ChartStyle」コレクションエディターが用意されています。ScatterChartSeriesコレクションエディターは、ユーザーが選択したScatterChartSeriesメンバを追加・削除し、そのプロパティを変更できます。

 ChartStyleコレクションエディターは、ChartStyleメンバを追加・削除し、そのプロパティを変更できます。

スマートタグの内容

 スマートタグには、以下のタスクが表示されます。

データソースの選択

 [データソースの選択]をクリックすると、既存のデータソースや連結する新しいデータソースを選択できるドロップダウンリストが開きます。

シリーズ一覧

 シリーズ一覧項目をクリックすると、C1ScatterChartコントロールにScatterChartSeriesメンバを追加したり、削除したりできる[ScatterChartSeriesコレクションエディター]ダイアログボックスが開きます。

シリーズスタイル

 シリーズスタイル項目をクリックすると、C1ScatterChartコントロールにChartStyleメンバを追加したり、削除したりできる[ChartStyleコレクションエディター]ダイアログボックスが開きます。

シリーズホバースタイル

 シリーズホバースタイル項目をクリックすると、C1ScatterChartコントロールにChartStyleメンバを追加したり、削除したりできる[ChartStyleコレクションエディター]ダイアログボックスが開きます。

CDNの使用

 [CDNの使用]チェックボックスをONにすると、CDNからクライアントリソースがロードされます。デフォルトはOFFです。

CDNパス

 CDNのURLパスを表示します。

バージョン情報

 [バージョン情報]をクリックすると、製品のバージョン情報を確認できるダイアログボックスが表示されます。

C1ScatterChartコントロールのスマートタグ(ヘルプより抜粋)
C1ScatterChartコントロールのスマートタグ(ヘルプより抜粋)

C1ScatterChartコントロールの要素

 C1ScatterChartコントロールは、次の要素で構成されています。

 グラフのXY軸のことで、ChartAxisオブジェクトで表します。次のメンバプロパティを使ってカスタマイズが可能です。

プロパティ 説明
Alignment 軸テキストの配置を示す値。デフォルト値はChartAxisAlignment.Center
AnnoFormatString 注釈の書式文字列を示す値。
AnnoMethod 注釈のメソッドを示す値。デフォルト値はChartAxisAnnoMethod.Value
AutoMajor 主目盛記号の値を自動的に計算するかどうかを示す値。デフォルト値はtrue
AutoMax 軸の最大値を自動的に計算するかどうかを示す値。
AutoMin 軸の最小値を自動的に計算するかどうかを示す値。デフォルト値はTrue
AutoMinor 補助目盛記号の値を自動的に計算するかどうかを示す値。デフォルト値はtrue
Compass 軸の方位を示す値。デフォルト値はChartCompass.South
GridMajor 主グリッド線の情報を提供する値。
GridMinor 副グリッド線の情報を提供する値。
Labels ラベルの情報を提供する値。
Max 軸の最大値を示す値。デフォルト値は0
Min 軸の最小値を示す値。デフォルト値は0
Origin 軸の起点の値を示す値。
Style 軸のスタイルを示す値。
Text 軸のテキストを示す値。
TextStyle 軸のテキストのスタイルを示す値。
TextVisible 軸テキストの表示/非表示を示す値。デフォルト値はTrue
TickMajor 主目盛の情報を提供する値。
TickMinor 補助目盛の情報を提供する値。
UnitMajor 主目盛記号の単位を示す値。デフォルト値は0
UnitMinor 補助目盛記号の単位を示す値。デフォルト値は0
ValueLabels 軸のvalueLabelsのコレクションを表示する値。
Visible 軸の表示/非表示を示す値。デフォルト値はTrue
軸のタイトル

 その軸で何が表示されているかを表すタイトル。

軸の目盛記号

 グラフの測定単位を表示するために軸に直交して表示される線で、TickMajor、TickMinorの各プロパティで設定します。

値の注釈

 データ自体に基づいて数値型の注釈が自動的に生成されます。値の注釈は任意の軸に対し、任意のグラフタイプと任意のデータレイアウトで使用できます。

軸のグリッド線

 グリッド線は、主/副単位間隔ごとに主目盛記号および補助目盛記号と直交して表示されます。

グラフのラベル

 グラフラベルは、重要データポイントを強調表示するのに使用されます。

ヘッダーとフッター

 ヘッダー要素とフッター要素は、グラフに関する説明情報を表示するために使用されます。

凡例

 凡例要素は、グラフの各データ系列に関する情報を表示します。

 凡例は、Legendプロパティによって制御され、以下の主なプロパティを持つChartLegendオブジェクトで表されます。

プロパティ 説明
Text 凡例タイトルに表示するテキストを含みます。
Style 凡例のフォント、向き、色、枠を設定するプロパティを含みます。
Compass 凡例の位置を決定します。
Visible 凡例を表示するかどうかを決定します。
Orientation 凡例の項目を水平または垂直方向に表示するかどうかを決定します。
系列

 系列は、散布図にプロットされるデータで、ScatterChartSeriesオブジェクトで表されます。複数の系列を持つことができ、それぞれの系列は異なる色で表示されます。

データ連結

 サーバー上の外部データソースからのデータ連結をサポートしています。DataBindingプロパティは、DataSourceIDまたはDataSourceプロパティとDataBindingsを設定すると使用可能になります。

C1ScatterChartコントロールのアニメーション

 C1ScatterChartコントロールの系列データをアニメーションで表示できます。アニメーションは、データ点にマウスポインタを重ねた時に作動し、以下の遷移効果と持続時間でカスタマイズできます。

遷移の名前 遷移の説明
EaselnBack バックのイージングイン。開始は遅く、それから加速します。
EaselnCubic 3次型のイージングイン。開始は速度ゼロで、それから加速します。
EaselnOutCubic 3次型のイージングインとイージングアウト。
開始は速度ゼロで、途中まで加速し、それから再び速度ゼロまで減速します。
EaseOutBack バックのイージングアウト。開始は早く、それから減速します。
EaseOutBounce バウンドしながらのイージングアウト。開始は早く、それから減速します。
バウンドの回数は持続時間に関係します。
持続時間が延びれば、バウンドの回数は多くなります。
EaseOutCubic 3次型のイージングインとイージングアウト。
開始は全速で、それからゼロまで減速します。
EaseOutElastic 5次型のイージングアウト。開始は全速で、それからゼロまで減速します。
これはデフォルト設定です。

Webページのデザイン

 では、さっそくアプリケーションを作成していきます。

 サンプルファイルに含まれるSQL Serverのデータ「旅客実績_Data.mdf」をグリッド「C1GridView」コントロールに読み込み、このグリッドデータを取り出してC1ScatterChartコントロールで散布図にします。

 データは、国土交通省の統計資料にある平成22年・23年の「国内定期航空月別運航および運送実績」を利用します。各月の路線運航時間と旅客数の関係を表してみましょう。

 なお、グリッドデータの取り出しや散布図のデータ設定は、すべてコードから行います。

ページのレイアウト

 ページには、C1GridViewコントロールとC1ScatterChartコントロールを配置します。

 「SqlDataSource」は、C1GridViewコントロールにデータベースファイルを設定した時に作成されるオブジェクトです。

ページレイアウト
ページレイアウト

C1GridViewコントロールの作成

 最初にC1GridViewコントロールを配置し、データベースファイルを連結します。データ連結方法は「データソースの構成」ウィザードを使用します。使い方は、過去の記事『多彩な表現形式でデータをグリッド表示するASP.NETアプリケーションの作成』で紹介していますので、そちらをご参照ください。

 ここでは、SQL Serverのデータ「旅客実績_Data.mdf」を使用します。データフィールドはすべて取出し、「運航時間」と「旅客数」をグラフに使用します。

 データを連結したら、C1GridViewコントロールの「Width」プロパティを「700」に設定し、アプリケーションを実行してグリッドにデータが表示されているのを確認してください。

「データソースの構成」ウィザードでクエリを実行し取り出すフィールドを確認
「データソースの構成」ウィザードでクエリを実行し取り出すフィールドを確認
アプリケーションを実行しグリッドにデータが表示されているのを確認する
アプリケーションを実行しグリッドにデータが表示されているのを確認する

C1ScatterChartコントロールの作成

 続いて、C1ScatterChartコントロールをページにドラッグアンドドロップして作成しましょう。C1ScatterChartコントロールの設定はデフォルトのままで、あとはコードでデータ設定やラベルの作成を行います。

 (1)コードウィンドウを開き、最初に「C1.Web.Wijmo.Controls.C1Chart」名前空間への参照を設定してください。次に、独自のメソッド(VBはSubプロシージャ)「setupchart」を作成します。

 (2)C1ScatterChartコントロールにグリッドのデータを設定するには、データ系列用の配列を作成し、これをScatterChartSeriesオブジェクトに設定します。

 まず、Double型の配列を用意します。要素数はグリッドの行数を使います。これは、C1GridViewコントロールのRowsコレクションのCountプロパティから取得します。ただし、Visual Basicの場合のみ、Countプロパティの値から1を差し引いた値を配列の要素数にします。

Visual Basic
Imports C1.Web.Wijmo.Controls.C1Chart

Public Class _Default
    Inherits System.Web.UI.Page

    Private Sub setupchart()
        Dim i As Integer
        Dim cnt As Integer = C1GridView1.Rows.Count - 1
        Dim H221(cnt) As Double
        Dim H222(cnt) As Double
        Dim H231(cnt) As Double
        Dim H232(cnt) As Double
C#
using C1.Web.Wijmo.Controls.C1Chart;

namespace scatterchart_ASP_cs
{
    public partial class _Default : System.Web.UI.Page
    {
        private void setupchart()
        {
            int i;
            int cnt = C1GridView1.Rows.Count;
            double[] H221 = new double[cnt];
            double[] H222 = new double[cnt];
            double[] H231 = new double[cnt];
            double[] H232 = new double[cnt];

 (3)作成した配列にグリッドデータを転送していきます。まずは、平成22年度分のデータ12行を取り出して、2つの配列に格納します。列「運航時間」はC1GridViewコントロールの「Rows(i).Cells(1).Text」で、「旅客数」は「Rows[i].Cells[2].Text」という式でデータにアクセスできます。ただし、Textプロパティの値は文字列なので、Convertクラスを使用してDoubleに変換します。

Visual Basic
'平成22年系列一覧
For i = 0 To cnt
    H221(i) = Convert.ToDouble(C1GridView1.Rows(i).Cells(1).Text)
Next
For i = 0 To cnt
    H222(i) = Convert.ToDouble(C1GridView1.Rows(i).Cells(2).Text)
Next
C#
// 平成22年系列一覧
for (i = 0; i < cnt; i++)
{
    H221[i] = Convert.ToDouble(C1GridView1.Rows[i].Cells[1].Text);
}
for (i = 0; i < cnt; i++)
{
    H222[i] = Convert.ToDouble(C1GridView1.Rows[i].Cells[2].Text);
}

 (4)作成した配列をC1ScatterChartコントロールに設定します。まずは、ScatterChartSeriesクラスのインスタンスを作成し、それをSeriesListプロパティに追加しましょう。

 次に、作成した配列をXY軸のDataオブジェクトにAddRangeメソッドで組み込みます。X軸には列「旅客数」のデータを、Y軸には列「運航回数」のデータを設定します。これで、グリッドのデータをグラフ化することができます。

Visual Basic
Dim series1 = New ScatterChartSeries()
    C1ScatterChart1.SeriesList.Add(series1)
    series1.Data.X.AddRange(H221)
    series1.Data.Y.AddRange(H222)
C#
var series1 = new ScatterChartSeries();
    this.C1ScatterChart1.SeriesList.Add(series1);
    series1.Data.X.AddRange(H221);
    series1.Data.Y.AddRange(H222);

 (5)作成したグラフの凡例ラベルに、グリッドの列見出しを設定します。凡例はX軸のデータなので、グリッドの列「旅客数」の列見出しを設定してください。列見出しはHeaderTextプロパティから取得します。

 そして、凡例を自動的に生成するかどうかを決めるLegendEntryプロパティをTrueにし、凡例を自動作成します。

 また、データ点の形状を決める「MarkerType」プロパティに値「MarkerType.Circle」を設定し、円形のポイント形状にします。

 なお、データ点の形状には以下の値を使うことができます。

メンバ名 説明
Tri 塗りつぶした三角形で表したデータポイント。
InvertedTri 塗りつぶした逆三角形で表したデータポイント。
Box 塗りつぶした四角形で表したデータポイント。
Diamond 塗りつぶしたひし形で表したデータポイント。
Cross 十字線で表したデータポイント。
Circle 中抜きの円で表したデータポイント。
Visual Basic
series1.Label = C1GridView1.Columns(0).HeaderText
    series1.LegendEntry = True
    series1.MarkerType = MarkerType.Circle
C#
series1.Label = C1GridView1.Columns[0].HeaderText;
        series1.LegendEntry = true;
        series1.MarkerType = MarkerType.Circle;

 (6)同様に、平成23年のデータ系列を作成します。このデータは、グリッドの4番目と5番目の列なので、「Rows(i).Cells(4).Text)」「Rows(i).Cells(5).Text)」という式でアクセスできます。

Visual Basic
' 平成23年系列一覧
For i = 0 To cnt
    H231(i) = Convert.ToDouble(C1GridView1.Rows(i).Cells(4).Text)
Next
For i = 0 To cnt
    H232(i) = Convert.ToDouble(C1GridView1.Rows(i).Cells(5).Text)
Next
Dim series2 = New ScatterChartSeries()
C1ScatterChart1.SeriesList.Add(series2)
series2.MarkerType = MarkerType.Circle

series2.Data.X.AddRange(H231)
series2.Data.Y.AddRange(H232)
series2.Label = C1GridView1.Columns(3).HeaderText
series2.LegendEntry = True
C#
// 平成23年系列一覧
for (i = 0; i < cnt; i++)
{
    H231[i] = Convert.ToDouble(C1GridView1.Rows[i].Cells[4].Text);
}
for (i = 0; i < cnt; i++)
{
    H232[i] = Convert.ToDouble(C1GridView1.Rows[i].Cells[5].Text);
}
var series2 = new ScatterChartSeries();
this.C1ScatterChart1.SeriesList.Add(series2);
series2.MarkerType = MarkerType.Circle;

series2.Data.X.AddRange(H231);
series2.Data.Y.AddRange(H232);
series2.Label = C1GridView1.Columns[3].HeaderText;
series2.LegendEntry = true;

 (7)続いて、軸ラベルを作成です。これは、AxisオブジェクトのXY軸それぞれのTextプロパティにラベル用の文字列をグリッドのヘッダーから取得し設定します。

Visual Basic
' ラベルの作成
C1ScatterChart1.Axis.X.Text = C1GridView1.Columns(1).HeaderText
C1ScatterChart1.Axis.Y.Text = C1GridView1.Columns(2).HeaderText
C#
// ラベルの作成
C1ScatterChart1.Axis.X.Text = C1GridView1.Columns[1].HeaderText;
C1ScatterChart1.Axis.Y.Text = C1GridView1.Columns[2].HeaderText;

 (8)最後に、作成したメソッド(プロシージャ)を、Page_Loadイベントハンドラでポストバックされないときに呼び出すようにします。

 以上で完成です。それでは、アプリケーションを実行してみましょう。

 平成22年と23年のデータが円形で色別に表示されています。データ点にマウスポインタを重ねるとデータ点が大きくなるアニメーションが実行されます。

Visual Basic
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        setupchart()
    End If
End Sub
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        setupchart();
    }
}
アプリケーション実行画面
アプリケーション実行画面

まとめ

 グラフコントロールは、単独で使うというよりもアプリケーションの機能の一部として使われることが多いコントロールです。

 C1ScatterChartコントロールも、Webを使ったデータ解析アプリケーションの機能の一つとして使うことができます。データ系列の設定に関しても、特に難しい部分はないので、グリッドコントロールと組み合わせることによって、データ入力とグラフ化を一度に行うことが可能です。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 瀬戸 遥(セト ハルカ)

    8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5