Нарисуйте аннотированную круговую диаграмму в C#

Пример Нарисуйте отмеченную круговую диаграмму в C# объясняет, как рисовать круговую диаграмму с помеченными фрагментами. В этом примере добавляются аннотации, прикрепленные к срезам по строкам. Следующий код показывает, как программа рисует, накладывает метки и комментирует фрагменты.

См. предыдущие сообщения для получения подробной информации о коде, который рисует и маркирует срезы. Этот пост концентрируется на коде, который рисует радиальные и горизонтальные линии от срезов до их аннотаций.

Прежде чем он начнет цикл через срезы, чтобы нарисовать свои метки и аннотации, код вычисляет значения annotation_rx1 и annotation_ry1. Они дают радиусы, что код может умножаться на синусы и косинусы углов, чтобы получить точку на краю эллипса среза пирога.

Код также вычисляет annotation_rx2 и annotation_ry2, который он может использовать для получения точек под тем же углом, что и точки на краю эллипса, но немного вне эллипса.

Затем программа перебирает фрагменты, обозначая их как в предыдущем примере. Для каждого среза он также рисует короткий радиальный сегмент между точками, рассчитанными с помощью annotation_rx1, annotation_ry1, annotation_rx2 и annotation_ry2 .

Затем, в зависимости от того, больше ли радиальная линия располагается слева или справа, код рисует горизонтальную линию в левую или правую область аннотации. Он заканчивает срез, нарисуя текст аннотации фрагмента как вправо, так и влево.

Этот пример немного хулиган и не обязательно дает хорошие результаты для некоторых наборов данных. Например, если в верхней или нижней части эллипса слишком много очень тонких срезов, их текст аннотации может перекрываться. В этом случае вы можете попытаться нарисовать линии для аннотаций, которые распространяют их отдельно, но это было бы сложно сделать в общем виде и могло бы также привести к уродливым результатам. В качестве альтернативы вы можете изменить значения, чтобы тонкие не были размещены вместе, или вы могли бы изменить начальный угол для первого среза, чтобы группы тонких срезов не были сверху или снизу.

Наконец, из-за того, как методы FillPie и DrawPie измеряют углы, этот пример работает только хорошо, если эллипс представляет собой круг. Если эллипс очень эллиптический, радиальные линии срезов не будут находиться в центрах их срезов и в крайних случаях могут вообще отсутствовать в их срезах.

Источник: http://csharphelper.com/blog/2016/03/draw-an-annotated-pie-chart-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *