C# WPF рисование круговых и столбчатых диаграмм

Рейтинг: 1Ответов: 1Опубликовано: 07.04.2015

Нужно реализовать построение диаграмм, исходя из данных, которые находятся в массиве(массив чисел). В какую сторону нужно рыть? Желательно это все должно рисоваться(возможно на Canvas'е) Юзаю WPF. Заранее благодарен.

Ответы

▲ 2Принят

А почему не вручную? Дел-то на копейку. Для круговых диаграмм, рассчитываем список углов:

var sum = data.Sum();
var angles = data.Select(d => d * 2.0 * Math.PI / sum);

Определяем радиус:

var radius = 100.0;

Теперь код пишется более-менее тривиально:

var startAngle = 0.0;

var centerPoint = new Point(radius, radius);
var xyradius = new Size(radius, radius);

foreach (var angle in angles)
{
    var endAngle = startAngle + angle;

    var startPoint = centerPoint;
    startPoint.Offset(radius * Math.Cos(startAngle), radius * Math.Sin(startAngle));

    var endPoint = centerPoint;
    endPoint.Offset(radius * Math.Cos(endAngle), radius * Math.Sin(endAngle));

    var angleDeg = angle * 180.0 / Math.PI;

    Path p = new Path()
    {
        Stroke = Brushes.Black,
        Fill = Brushes.Red,
        Data = new PathGeometry(
            new PathFigure[]
            {
                new PathFigure(
                    centerPoint,
                    new PathSegment[]
                    {
                        new LineSegment(startPoint, isStroked: true),
                        new ArcSegment(endPoint, xyradius,
                                       angleDeg, angleDeg > 180,
                                       SweepDirection.Clockwise, isStroked: true)
                    },
                    closed: true)
            })
    };
    container.Children.Add(p);

    startAngle = endAngle;
}

Результат:

скриншот