Имеется набор данных, отображаемый в столбце 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()));
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня macOS, на которую установлен Visual StudioКак именно создать проект с шаблоном Web-application ASP
Изучая различия между LINQ To Entites и LINQ To Objects в EntityFramework - столкнулся с интересной вещью :
Есть приложение, к которому приходит запрос и приложение его обрабатываетВ процессе обработки могут вылезти болячки, которые надо залогировать...