Нарисуйте круговую диаграмму в C#
В этом примере показано, как рисовать круговую диаграмму, используя методы, описанные в сообщении Залить и нарисовать кусочки пирога в C# .
В этом примере используется следующий метод DrawPieChart для рисования круговой диаграммы для массива значений.
// Рисуем круговую диаграмму. private static void DrawPieChart(Graphics gr, Rectangle rect, Brush[] brushes, Pen[] pens, float[] values) { // Получите общее количество всех углов. float total = values.Sum(); // Рисуем срезы. float start_angle = 0; for (int i = 0; i < values.Length; i++) { float sweep_angle = values[i] * 360f / total; gr.FillPie(brushes[i % brushes.Length], rect, start_angle, sweep_angle); gr.DrawPie(pens[i % pens.Length], rect, start_angle, sweep_angle); start_angle += sweep_angle; } }
Код начинается с использования метода расширения Sum, предоставляемого LINQ, чтобы получить общее количество значений. Затем он перебирает значения, преобразуя их в процент от общего числа. Он покрывает каждый процент в угол развертки и рисует соответствующий кусочек пирога. В коде используется оператор% module, чтобы определить, какие цвета использовать для каждого фрагмента, если количество цветов не соответствует числу срезов. Например, эта программа использует только одно перо для выделения каждого фрагмента.
Следующий код показывает, как программа инициализирует свои данные.
// Щетки, используемые для заполнения кусочков пирога. private Brush[] SliceBrushes = { Brushes.Red, Brushes.LightGreen, Brushes.Blue, Brushes.LightBlue, Brushes.Green, Brushes.Lime, Brushes.Orange, Brushes.Fuchsia, Brushes.Yellow, Brushes.Cyan, }; // Ручки, используемые для выделения кусочков пирога. private Pen[] SlicePens = { Pens.Black }; // Значения данных для диаграммы. private float[] Values = new float[10]; // Сделайте некоторые случайные данные. private void Form1_Load(object sender, EventArgs e) { Random rand = new Random(); for (int i = 0; i < Values.Length; i++) { Values[i] = rand.Next(10, 40); } }
В массиве SliceBrushes используются кисти, используемые при рисовании фрагментов. Массив SlicePens содержит одиночное перо Pens.Black, поэтому все фрагменты выделены черным цветом. Когда форма загружается, обработчик события Load заполняет массив Values случайными значениями. Следующий код показывает, как программа использует метод DrawPieChart, когда форма перерисовывается.
// Рисуем круговую диаграмму. private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.Clear(BackColor); if ((ClientSize.Width < 20) || (ClientSize.Height < 20)) return; e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; Rectangle rect = new Rectangle( 10, 10, ClientSize.Width - 20, ClientSize.Height - 20); DrawPieChart(e.Graphics, rect, SliceBrushes, SlicePens, Values); }
Этот код очищает форму цветом фона. Затем он гарантирует, что клиентская область формы имеет размер не менее 20 на 20 пикселей.