Chart for WPF/Silverlight
カスタムグループ化
グラフ機能 > グループ化と集計 > カスタムグループ化

Chart for WPF では、AggregateGroupSelector プロパティを使用して、カスタムグループ化関数とカスタム集計関数を作成できます。次の例では、カテゴリに基づくカスタム集計関数を作成する方法について説明します。WPF ストアアプリケーションの MainWindow.xaml ページから始めます。

まず、アプリケーションに C1Chart コントロールを追加し、"chart" と名前を付ます。

XAML
コードのコピー
<c1chart:C1Chart Name="chart"></c1chart:C1Chart>

次に、汎用のボタンコントロールを追加し、Click イベントを設定します。

XAML
コードのコピー
<Button Content="New Data" Width="100" Click="Button_Click" />

コードビューに切り替えます。次の using 文をページの先頭に追加します。

コードのコピー
using C1.WPF.C1Chart;
コードのコピー
using C1.Silverlight.C1Chart;

次に、MainWindow() のコンストラクタを次のように編集します。

C#
コードのコピー
public MainWindow()
        {
            InitializeComponent();
            CreateSampleChart();
        }

CreateSampleChart() メソッドを追加します。

C#
コードのコピー
void CreateSampleChart()
 {
  
 }

CreateSampleChart() メソッド内で、項目名を格納する List オブジェクトを作成します。

C#
コードのコピー
var keys = new List<string>{ "oranges", "apples", "lemons", "grapes" };

次に、連結 DataSeries を追加します。

C#
コードのコピー
for (int i = 0; i < 2; i++)
     {
         var ds = new DataSeries()
         {
             ItemsSource = SampleItem.CreateSampleData(40),
             ValueBinding = new Binding() { Path = new PropertyPath("Value") },
             Aggregate = Aggregate.Sum,
             Label = "s" + i
         };

AggregateGroupSelector 関数と、チャートに DataSeries を追加するコードを追加します。ここで、AggregateGroupSelector 関数は、この後に追加する SampleItem クラスから項目名を返します。

C#
コードのコピー
ds.AggregateGroupSelector = (x, y, o) =>
         {
             //カテゴリリストのインデックス
             return keys.IndexOf(((SampleItem)o).Name);
         };
        chart.Data.Children.Add(ds);
     }
     chart.Data.ItemNames = keys;
 }

ユーザーがボタンをクリックするたびに、Button_Click イベントは、古いデータをクリアしてから新しいランダムデータを呼び出します。

C#
コードのコピー
privatevoid Button_Click(object sender, RoutedEventArgs e)
{
   chart.Data.Children.Clear();
    CreateSampleChart();
}

最後に、SampleItem クラスを追加します。これは、チャートコントロールにランダムデータを作成します。

C#
コードのコピー
publicclass SampleItem
{
    publicstring Name { get; set; }
    publicdouble Value { get; set; }
    static Random rnd = new Random();
    publicstatic SampleItem[] CreateSampleData(int cnt)
    {
        var names = newstring[] { "oranges", "apples", "lemons", "grapes" };
        var array = new SampleItem[cnt];
        for (int i = 0; i< cnt; i++)
        {
            array[i] = new SampleItem() { Value = rnd.Next(1, 10), Name = names[rnd.Next(names.Length)] };
        }
        return array;
     }
    }
   }
 }

上のコードとマークアップにより、次の画像のようなアプリケーションが表示されます。

関連トピック