コードの作成
C1Chartコンポーネントは、各部位がそれぞれクラスとして作成され、階層状に組み立てられています。どちらかと言うと、Excel VBAでExcelの各オブジェクトを操作するのに似ています。
今回のプログラムでは、次の3つの機能を実装します。
- あらかじめコードに組み込んだデータを元に、5つのデータを持った1つのデータグループから、単純な横棒グラフを作成する
- データをNumericUpDownコントロールから入力して、その値でグラフを作成する
- 5つのデータを持った2つのデータグループから横棒グラフを作成する
単一データでの単純な横棒グラフの作成
この機能は、ボタン[グラフ作成1]のClickイベントハンドラに作成します。
- まず、あらかじめC1Chartに設定されているデータソースを削除します。
このデータソースは、ChartDataSeriesCollectionコレクションになっており、
ChartData
オブジェクトのSeriewList
プロパティで取得します。1つのデータは1つのデータグループに所属し、ChartDataSeries
オブジェクトで操作されます。グラフでは複数のデータグループを扱いますから、ChartDataSeries
オブジェクトをコレクションで管理します。そこで、SeriesList
プロパティを操作対象にClear
メソッドを実行すると、それまで設定されていたデータソースを消去できます。C1Chart1.ChartGroups(0).ChartData.SeriesList.Clear()
- 次に、グラフで表示する値の範囲を設定します。
C1Chartコンポーネントはデフォルトでは、表示する値の範囲を自動的に設定します。これはこれで便利なのですが、値の範囲の最小値がグラフデータの最小値に設定されてしまう場合があります。そこで、値の範囲を0から10まで、と手動で設定します。値の範囲はグラフのY軸なので、最小値は
ChartArea
クラスのAxisY
クラスのMin
プロパティを使用します。最大値はMax
プロパティを使用します。ここでは、Y軸の最小値を0に、最大値を10にセットします。Me.C1Chart1.ChartArea.AxisY.Min = 0 Me.C1Chart1.ChartArea.AxisY.Max = 10
- 新しいデータテーブルを設定します。
最初は、5つのデータを持った1つのデータグループを作成します。グラフの作成は、データをX軸方向に5個作成し、Y軸に各データの値を設定する、という方法をとります。まず、配列を2つ用意します。1つはX軸に設定するデータの名称で、もう1つはY軸に設定するデータの値を格納します。配列の数が、表示するデータの個数になります。
Dim datanum(4) As String Dim datavalue(4) As Single Dim i As Integer
- For...Nextステートメントを使って配列にデータを格納します。
X軸に設定するデータには、「Data1」「Data2」というデータ名を格納します。Y軸には各データの値を簡単な掛け算で「1,2,3,4,5」という値を格納します。
'X軸がデータの個数、Y軸が各データの値になる For i = 0 To 4 datanum(i) = "Data" & i datavalue(i) = 1 * (i + 1) Next i
- 配列データをグラフのデータソースとして設定します。
まず、
ChartDataSeries
オブジェクトを作成し、ChartDataSeriesCollection
コレクションに追加します。ChartDataSeries
クラスは、グラフ化するデータ、グラフデータの外観を設定するプロパティとスタイルオブジェクトが含まれています。AddNewSeries
メソッドを使用すると、作成と追加を同時に行うことができます。これで、1つのデータグループがデータソースとして組み込まれます。Dim series As C1.Win.C1Chart.ChartDataSeries = _ Me.C1Chart1.ChartGroups(0).ChartData.SeriesList.AddNewSeries()
- 次に、棒グラフの色を設定します。
series.LineStyle.Color = Color.Blue
- そして、CopyDataInメソッドを使用して、X軸とY軸に配列データを設定します。
X軸にはデータの名称が設定され、Y軸には各データの値が設定されます。そして、これらが配列の数だけ設定され横棒グラフとなります。
series.X.CopyDataIn(datanum) series.Y.CopyDataIn(datavalue)
NumericUpDownの値からグラフを作成する
基本的には、配列でグラフデータを作成し表示することに変わりありません。配列にデータを格納する際に、NumericUpDownコントロールから値を取得し配列を作成します。
ここでは、NumericUpDownコントロールを4つ用意し、グラフデータの個数も4個にします。また、値の表示範囲は0~100にし、グラフ化の処理はボタン[グラフ作成-2]のClickイベントハンドラに作成します。
変更するのは、配列の要素数とMax
、Min
プロパティの値、そしてY軸用のデータを格納する配列には、NumericUpDownコントロールのValue
プロパティの値を代入しておきます。
Dim datanum(3) As String Dim datavalue(3) As Single Dim i As Integer 'X軸がデータの個数、Y軸が各データの値になる For i = 0 To 3 datanum(i) = "Data" & i Next i datavalue(0) = Me.NumericUpDown1.Value datavalue(1) = Me.NumericUpDown2.Value datavalue(2) = Me.NumericUpDown3.Value datavalue(3) = Me.NumericUpDown4.Value
これで、NumericUpDownコントロールの数値を変えて[グラフ作成-2]ボタンを押せば、その値でグラフが再描画されるようになります。
2つのデータグループから横棒グラフを作成する
今度は、複数のデータグループをグラフで表示する場合です。同じ種類のデータを複数個比較する場合などによく使われます。
その場合は、データグループごとにChartDataSeries
オブジェクトを追加し、それぞれにデータをセットします。
- Y軸に設定するデータの値用の配列を追加します。
X軸はデータの個数が変わらないので、そのまま1つの配列を使用します。
Dim datanum(4) As String Dim datavalue1(4) As Single Dim datavalue2(4) As Single Dim i As Integer
- Y軸データを2種類作成します。
ここでは、最初のデータグループを1~5までの値にして、2番目のデータグループを5~9の値にします。
For i = 0 To 4 datanum(i) = "Data" & i datavalue1(i) = 1 * (i + 1) datavalue2(i) = 1 * (i + 5) Next i
- ChartDataSeriesオブジェクトを2つ作成します。
Dim series1 As C1.Win.C1Chart.ChartDataSeries = _ Me.C1Chart1.ChartGroups(0).ChartData.SeriesList.AddNewSeries() Dim series2 As C1.Win.C1Chart.ChartDataSeries = _ Me.C1Chart1.ChartGroups(0).ChartData.SeriesList.AddNewSeries()
- それぞれのChartDataSeriesオブジェクトに、X軸とY軸のデータを設定します。
series1.X.CopyDataIn(datanum) series2.X.CopyDataIn(datanum) series1.Y.CopyDataIn(datavalue1) series2.Y.CopyDataIn(datavalue2)
これで、2つのデータグループのデータを横棒グラフで表示できます。
まとめ
ひとまず、C1Chartコンポーネントを使ってデータをフォーム上でグラフ化する処理を使ってみました。オブジェクト構造(クラスの階層)がまだ少し分かりにくいですが、思ったよりも簡単にプログラム実行時にデータをグラフ化できることが分かりました。
自分でグラフの描画処理を実装することを考えれば、手軽にグラフ化できるのはとても嬉しいです。
次回は、さらにグラフの各部位を操作し、いろいろなグラフを作れるようにしてみます。