А почему не вручную? Дел-то на копейку. Для круговых диаграмм, рассчитываем список углов:
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;
}
Результат:
