知ってる?! True WinChart for .NETコード編

下記のページには、Windowsフォーム用のチャート生成コンポーネントであるTrue WinChart for .NET 3.0Jを使ってのグラフを作成する基本ステップが紹介されています。

知ってる?! True WinChart for .NET

上記のページで紹介している方法は、プロパティウィンドウとデザイナを使った設定だけでグラフを作成しており、いわゆるノンコーディングな方法となっています。
データは、データベースにあるグラフ用のデータを使うという方法をとっていますが、データベースから取得したデータを加工してグラフのデータソースとするという方法も多く使われるかと思います。
ということで、ここではプロパティウィンドウとデザイナを使った設定はいっさい使わずに、コードだけでグラフを作成する場合の一例をご紹介しておこうと思います。


フォームにC1Chartコントロールを1つ貼り付け、下記のコードを記述します。


Visual Basic

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' C1Chartコントロールを配置したときのデフォルト設定では、グループ0に
    ' 4つのシリーズが設定されているので、それらをすべて削除します。
    C1Chart1.ChartGroups.Group0.ChartData.SeriesList.RemoveAll()
 
    ' 視覚エフェクトを有効にします。
    C1Chart1.VisualEffects.Styles("Default").Enabled = True
 
    ' 凡例を表示します。
    C1Chart1.Legend.Visible = True
 
    ' 凡例の位置を変更します。
    C1Chart1.Legend.Compass = C1.Win.C1Chart.CompassEnum.South
 
    ' X軸のラベルを傾けます。
    C1Chart1.ChartArea.AxisX.AnnotationRotation = -50
 
    ' X軸とY軸の名称を設定します。
    C1Chart1.ChartArea.AxisX.Text = "年月"
    C1Chart1.ChartArea.AxisY.Text = "頭数"
 
    ' XデータのためのListを作成
    Dim XList As New List(Of String)
    Dim iMonth As Integer
 
    For iMonth = 4 To 0 Step -1
        XList.Add(System.DateTime.Now.AddMonths(-iMonth).Year.ToString + "/" _
            + System.DateTime.Now.AddMonths(-iMonth).Month.ToString)
    Next
 
    ' 1つ目のシリーズを作成
    Dim mySeries As C1.Win.C1Chart.ChartDataSeries = C1Chart1.ChartGroups.Group0.ChartData.SeriesList.AddNewSeries()
 
    ' CopyDataInメソッドを使って配列からXデータの値を一度に設定します。
    ' 配列はToArrayメソッドを使ってListから取り出します。
    mySeries.X.CopyDataIn(XList.ToArray)
 
    ' 作成されたXデータの配列の長さ
    Dim xDataLength As Integer = mySeries.X.Length
 
    ' Yデータの作成(直接値を代入)
 
    ' シリーズのラベルは凡例に表示されます。
    mySeries.Label = "カバ"
    ' Yデータの配列の長さをXデータの配列の長さと同じ長さに設定します。
    mySeries.Y.Length = xDataLength
 
    ' 値を直接代入していきます。
    mySeries.Y(0) = 1
    mySeries.Y(1) = 5
    ' 欠損値の設定
    mySeries.Y(2) = C1Chart1.ChartGroups.Group0.ChartData.Hole
    mySeries.Y(3) = 2
    mySeries.Y(4) = 3
 
    ' 2つ目のシリーズを作成
    mySeries = C1Chart1.ChartGroups(0).ChartData.SeriesList.AddNewSeries()
 
    ' 2つ目以降のシリーズでは、AutoEnumerateプロパティをTrueに設定
    ' することで、同じXデータを設定する必要がなくなります。
    mySeries.AutoEnumerate = True
 
    ' シリーズのラベルは凡例に表示されます。
    mySeries.Label = "ワニ"
 
    ' YデータのためのListを作成
    Dim YList As New List(Of Integer)
    Dim i As Integer
    Dim myRandom As New System.Random
 
    For i = 0 To xDataLength - 1
        YList.Add(myRandom.Next(1, 10))
    Next
 
    ' CopyDataInメソッドを使って配列からYデータの値を一度に設定します。
    mySeries.Y.CopyDataIn(YList.ToArray)
 
End Sub


実行すると、このようなグラフが表示されます。



このようなX軸が共通でY軸のみが異なるようなグラフを複数作成する場合、X軸は最初のシリーズだけに設定し、2つ目以降のシリーズはAutoEnumerateプロパティをTrueに設定してやるという部分がポイントになるかと思います。