Имеется набор данных, отображаемый в столбце DataGridView. Необходимо в ChartControl построить диаграмму распределения, например, как на изображении.
Диаграмму хотел сделать приблизительно следующим образом:
for (int k = 0; k < OutputDataGridView.Rows.Count-1; k++)
{
chart1.Series[0].Points.AddXY(Double.Parse(OutputDataGridView[0,k].Value.ToString()), frequencyValue);
}
chart1.DataManipulator.Sort(PointSortOrder.Ascending, "X", "Series1");
chart1.DataManipulator.Group("First", 0.1, IntervalType.Number, "Series1");
Возник вопрос, как наиболее адекватно подсчитать частоту, с которой встречается значение в наборе данных, чтоб отображать ее по оси Y.
Наверное, я тупанул по-страшному, ибо, судя по всему, все оказалось проще, чем думал поначалу.
В качестве frequencyValue в AddXY(...) указал единицу, а в chart1.DataManipulator.Group(...) вместо формулы группировки "First" - "Sum".
Диаграмма вроде отображается как нужно.
Можно использовать Linq и не возиться с циклами и счетчиками:
.GroupBy(x => x.Value, (k, v) => new { Value = k, Count = v.Count() });
где Value - свойство, по которому вы хотите сгруппировать набор данных.
Вместо анонимного типа можно преобразовывать сразу в DataPoint:
.GroupBy(x => x.Value, (k, v) => new DataPoint(k, v.Count()));
Сборка персонального компьютера от Artline: умный выбор для современных пользователей