FlexChart for WinForms
WinForms ウォータフォールグラフ
WinForms のチャートタイプ > 統計チャート > WinForms ウォータフォールグラフ

ウォータフォールグラフは、初期値に対して増減する中間値が最終的な値に累積的にどう影響するかを図示する統計グラフです。このチャートでは通常、初期値と最終値を青色の合計バーとして表し、増える中間値を緑、減る中間値を赤の浮動縦棒で表します。このチャートは、下の図に示すように、製品収益の変動の表示や利益分析などのシナリオで役立ちます。

WinForms ウォータフォールグラフ

WinForms ウォータフォールグラフの作成

FlexChart で WinForms ウォータフォールグラフを実装するには、ウォータフォール系列を表す Waterfall クラスを使用します。他の系列関連のプロパティとは別に、このクラスはウォータフォール系列に固有のプロパティを提供し(ShowTotal プロパティ、ShowIntermediateTotal プロパティなど)、それを使用して合計列や小計バーを表示するかどうかを指定できます。また、接続線を表示するかどうかも選択できます。さらに、RisingStyle、FallingStyle、TotalStyle、および StartStyle プロパティをそれぞれ設定して、これらの列のスタイルを変更できます。

// 系列をクリアします
flexChart1.Series.Clear();

// FlexChartのX軸をバインドします
flexChart1.BindingX = "Month";

// ウォータフォールの系列を作成します
_waterfall = new C1.Win.Chart.Waterfall() { Binding = "PChange", Name = "Increment,Decrement,Total" };
_waterfall.IntermediateTotalLabels = new string[] { "Q1", "Q2", "Q3", "Q4" };
_waterfall.IntermediateTotalPositions = new int[] { 3, 6, 9, 12 };
_waterfall.Start = 0.15;
_waterfall.StartLabel = (DateTime.Now.Year - 2).ToString(); _waterfall.TotalLabel = (DateTime.Now.Year - 1).ToString();

// ウォータフォールの系列をFlexChartの系列コレクションに追加します
flexChart1.Series.Add(_waterfall);

// データソースを指定します
flexChart1.DataSource = GetProfitStatement();

// タイトルを指定します
flexChart1.Header.Content = string.Format("{0} : Profit Analysis", DateTime.Now.Year - 1);

// Y軸のヘッダーと形式を指定します
flexChart1.AxisY.Title = "Profit Percent(%)";
flexChart1.AxisY.Format = "p0";
' 系列をクリアします
flexChart1.Series.Clear()

' FlexChartのX軸をバインドします
flexChart1.BindingX = "Month"

' ウォータフォールの系列を作成します
_waterfall = New C1.Win.Chart.Waterfall() With {
     .Binding = "PChange",
     .Name = "Increment,Decrement,Total"
}
_waterfall.IntermediateTotalLabels = New String() {"Q1", "Q2", "Q3", "Q4"}
_waterfall.IntermediateTotalPositions = New Integer() {3, 6, 9, 12}
_waterfall.Start = 0.15
_waterfall.StartLabel = (DateTime.Now.Year - 2).ToString()
_waterfall.TotalLabel = (DateTime.Now.Year - 1).ToString()

' ウォータフォールの系列をFlexChartの系列コレクションに追加します
flexChart1.Series.Add(_waterfall)

' データソースを指定します
flexChart1.DataSource = GetProfitStatement()

' タイトルを指定します
flexChart1.Header.Content = String.Format("{0} : Profit Analysis", DateTime.Now.Year - 1)

' Y軸のヘッダーと形式を指定します
flexChart1.AxisY.Title = "Profit Percent(%)"
flexChart1.AxisY.Format = "p0"

上記のサンプルコードは、GetProfitStatement という名前のカスタムメソッドを使用してチャートにデータを提供しています。要件に基づいてデータソースを設定できます。

    /// <summary>
    /// StatisticalChartのデータを作成するメソッド
    /// </summary>
private Random rnd = new Random();
private DataSource _dataHelper = new DataSource().Instance;
public List<Object> GetProfitStatement()
{
    var data = new List<Object>();
    var change = 0.10f;
    for (int i = 0; i < 12; i++)
    {
        change += change >= 0.20f ? -rnd.Next(1, 10) / 100f : rnd.Next(1, 4) / 100f;
        data.Add(new
        {
            Month = _dataHelper.Months[i],
            Change = rnd.Next(1000, 10000) > 5000 ? rnd.Next(1000, 10000) : -rnd.Next(1000, 5000),
            PChange = change,
        });
    }
    return data;
}
''' <summary>
''' StatisticalChartのデータを作成するメソッド
''' </summary>
Private rnd As New Random()
Private _dataHelper As DataSource = New DataSource().Instance
Public Function GetProfitStatement() As List(Of [Object])
    Dim data As List(Of Object) = New List(Of [Object])()
    Dim change As Double = 0.1F
    For i As Integer = 0 To 11
        change += If(change >= 0.2F, -rnd.[Next](1, 10) / 100F, rnd.[Next](1, 4) / 100F)
        data.Add(New With {
             .Month = _dataHelper.Months(i),
             .Change = If(rnd.[Next](1000, 10000) > 5000, rnd.[Next](1000, 10000), -rnd.[Next](1000, 5000)),
             .PChange = change
        })
    Next
    Return data
End Function