This is a migrated thread and some comments may be shown as answers.

Grouping By Date

1 Answer 59 Views
Chart
This is a migrated thread and some comments may be shown as answers.
Louis
Top achievements
Rank 1
Louis asked on 14 Jun 2011, 04:16 PM
The following code produces a bar chart showing average request amount grouped by year and type:
          
List<RequestData> produceList = new List<RequestData>();
produceList.Add(new RequestData("2", 132, DateTime.Today, "Cash Grants"));
produceList.Add(new RequestData("1", 145, DateTime.Today.AddYears(1), "Cash Grants"));
produceList.Add(new RequestData("3", 149, DateTime.Today.AddYears(1).AddDays(1), "Cash Grants"));
produceList.Add(new RequestData("4", 187, DateTime.Today, "Cash Grants"));
produceList.Add(new RequestData("5", 186, DateTime.Today.AddYears(1), "Matching Gifts"));
produceList.Add(new RequestData("6", 131, DateTime.Today, "Dinners & Events"));
produceList.Add(new RequestData("7", 173, DateTime.Today.AddYears(1), "Dinners & Events"));
produceList.Add(new RequestData("8", 172, DateTime.Today, "Matching Gifts"));
produceList.Add(new RequestData("9", 140, DateTime.Today.AddYears(1), "Cash Grants"));
produceList.Add(new RequestData("10", 129, DateTime.Today, "Dinners & Events"));
produceList.Add(new RequestData("11", 158, DateTime.Today, "Matching Gifts"));
produceList.Add(new RequestData("12", 164, DateTime.Today.AddYears(1).AddDays(1), "Dinners & Events"));
 
SeriesMapping seriesMapping = new SeriesMapping();
seriesMapping.SeriesDefinition = new HorizontalBarSeriesDefinition();
seriesMapping.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Type"));
seriesMapping.GroupingSettings.GroupDescriptors.Add(new ChartYearGroupDescriptor("RequestDate"));
seriesMapping.ItemMappings.Add(new ItemMapping("RequestAmount", DataPointMember.YValue, ChartAggregateFunction.Sum));
seriesMapping.ItemMappings.Add(new ItemMapping("RequestDate", DataPointMember.XCategory));
radChart.SeriesMappings.Add(seriesMapping);
radChart.ItemsSource = produceList;
radChart.DefaultView.ChartArea.AxisX.DefaultLabelFormat = "yyyy";

However, if I change the order of the data so that item 12 comes directly after item 3 like so:
List<RequestData> produceList = new List<RequestData>();
produceList.Add(new RequestData("2", 132, DateTime.Today, "Cash Grants"));
produceList.Add(new RequestData("1", 145, DateTime.Today.AddYears(1), "Cash Grants"));
produceList.Add(new RequestData("3", 149, DateTime.Today.AddYears(1).AddDays(1), "Cash Grants"));
produceList.Add(new RequestData("12", 164, DateTime.Today.AddYears(1).AddDays(1), "Dinners & Events"));
produceList.Add(new RequestData("4", 187, DateTime.Today, "Cash Grants"));
produceList.Add(new RequestData("5", 186, DateTime.Today.AddYears(1), "Matching Gifts"));
produceList.Add(new RequestData("6", 131, DateTime.Today, "Dinners & Events"));
produceList.Add(new RequestData("7", 173, DateTime.Today.AddYears(1), "Dinners & Events"));
produceList.Add(new RequestData("8", 172, DateTime.Today, "Matching Gifts"));
produceList.Add(new RequestData("9", 140, DateTime.Today.AddYears(1), "Cash Grants"));
produceList.Add(new RequestData("10", 129, DateTime.Today, "Dinners & Events"));
produceList.Add(new RequestData("11", 158, DateTime.Today, "Matching Gifts"));
 
SeriesMapping seriesMapping = new SeriesMapping();
seriesMapping.SeriesDefinition = new HorizontalBarSeriesDefinition();
seriesMapping.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Type"));
seriesMapping.GroupingSettings.GroupDescriptors.Add(new ChartYearGroupDescriptor("RequestDate"));
seriesMapping.ItemMappings.Add(new ItemMapping("RequestAmount", DataPointMember.YValue, ChartAggregateFunction.Sum));
seriesMapping.ItemMappings.Add(new ItemMapping("RequestDate", DataPointMember.XCategory));
radChart.SeriesMappings.Add(seriesMapping);
radChart.ItemsSource = produceList;
radChart.DefaultView.ChartArea.AxisX.DefaultLabelFormat = "yyyy";

I get a bar chart with two groupings for the year 2012. Is this a bug or am I doing something wrong?

1 Answer, 1 is accepted

Sort by
0
Tsvetie
Telerik team
answered on 17 Jun 2011, 04:05 PM
Hello Louis,
You code is correct. However, you have not taken into account that the items of the x-axis are bound to the RequestDate field.:
seriesMapping.ItemMappings.Add(new ItemMapping("RequestDate", DataPointMember.XCategory));

As a result, three items are added to the x-axis and the bars are displayed according to these axis items. Please note that the DefaultLabelFormat does not influence the count of the x-axis items, only the text they display. In case you remove the XCategory item mapping, you will see that there will be only two items on the x-axis, just as you expect.

In this case, you can either create a separate column in your data that returns the year ,
seriesMapping.ItemMappings.Add(new ItemMapping("Year", DataPointMember.XCategory));

public int Year
        {
            get
            {
                return this.RequestDate.Year;
            }
        }

or set the labels for the x-axis ticks manually, as demonstrated in our online documentation - http://www.telerik.com/help/wpf/radchart-features-axes-labels.html.

Regards,
Tsvetie
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Tags
Chart
Asked by
Louis
Top achievements
Rank 1
Answers by
Tsvetie
Telerik team
Share this question
or