Создание круговой диаграммы на C#


В этом материале мы сосредоточимся на создании круговой диаграммы с использованием Microsoft .NET Framework. При этом мы будем использовать классы в пространстве имен System.Drawing.

Зачем?

Диаграммы и/или графики могут быть весьма полезны в программах Windows и веб-приложениях для наглядного отображения информации и статистики. Есть инструменты, такие как Crystal Reports, которые могут быть использованы для создания отчетов. Также есть инструменты, такие как Chart FX, Dundas Chart и TeeChart, которые позволят вам создавать отличные диаграммы и графики для отображения в ваших программах. Тем не менее, эти приложения платные, не всегда возможно их приобрести. Так что давайте научимся с помощью классов в пространстве имен System.Drawing в Microsoft .NET Framework самостоятельно создавать для начала круговую диаграмму.

Основные этапы

Создание диаграммы или графика с помощью платформы Microsoft .NET проще, чем можно было бы ожидать. Степень сложности графика основана на сложности информации, которую вы пытаетесь отобразить и форму, которую вы пытаетесь использовать, чтобы отобразить его.

Основные этапы создания диаграммы или графика следующие:

  • Создайте новое изображение в нужном формате.
  • Нарисуйте желаемую форму, используя классы рисования в пространстве имен System.Drawing.
  • Сохраните изображение в поток (память, файл, и так далее), так чтобы оно потом могло быть использовано.
Создание круговой диаграммы

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace Graph
{
    //<summary>
    //Нарисовать круговую диаграмму, используя данную информацию.
    //</summary>
    public partial class Form1 : Form
    {
        public Bitmap Draws(Color bgCol, int width, int height,
          decimal[] vals)
        {
            // Создаем новый образ и стираем фон
            Bitmap mybit = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            Graphics graphics = Graphics.FromImage(mybit);
            SolidBrush brush = new SolidBrush(bgCol);
            graphics.FillRectangle(brush, 0, 0, width, height);
            brush.Dispose();

            // Создаем кисти для окрашивания на круговой диаграмме
            SolidBrush[] brush2 = new SolidBrush[10];
            brush2[0] = new SolidBrush(Color.Yellow);
            brush2[1] = new SolidBrush(Color.Green);
            brush2[2] = new SolidBrush(Color.Blue);
            brush2[3] = new SolidBrush(Color.Cyan);
            brush2[4] = new SolidBrush(Color.Magenta);
            brush2[5] = new SolidBrush(Color.Red);
            brush2[6] = new SolidBrush(Color.Black);
            brush2[7] = new SolidBrush(Color.Gray);
            brush2[8] = new SolidBrush(Color.Maroon);
            brush2[9] = new SolidBrush(Color.LightBlue);

            // Сумма для получения общего
            decimal all = 0.0m;
            foreach (decimal val in vals)
                all += val;

            // Рисуем круговую диаграмму
            float startZ = 0.0f;
            float endZ = 0.0f;
            decimal current = 0.0m;
            for (int i = 0; i < vals.Length; i++)
            {
                current += vals[i];
                startZ = endZ;
                endZ = (float)(current / all) * 360.0f;
                graphics.FillPie(brush2[i % 10], 0.0f, 0.0f, width,height, startZ, endZ - startZ);
            }

            // Очищаем ресурсы кисти
            foreach (SolidBrush cleanBrush in brush2)
                cleanBrush.Dispose();

            return mybit;
        }


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void Form1_Paint_1(object sender, PaintEventArgs e)
        {
            Color myColor = Color.FromArgb(255, 255, 255);//Задаем белый цвет для фона
            decimal[] vals = { 33, 25, 12, 10, 11, 9 };//Массив значений, числа могут быть любыми, не обязательно в сумме давать 100
            Bitmap myBitmap = Draws(myColor, 300, 300, vals);//Создаем картинку
            Graphics g = e.Graphics;
            g.DrawImage(myBitmap, 5, 5); //Выводим круговую диаграмму на экран в нужных координатах
        }
    }
}
В итоге у вас должно получиться что-то типа этого:



Комментарии к листингу достаточно подробные, так что все должно быть понятно. Вот так просто можно сделать круговую диаграмму с помощью .NET Framework. Если у вас возникли вопросы, необходимо написать программу на заказ для лабораторной, курсовой, дипломной или практической работы - обращайтесь. Низкие цены, быстрое выполнение, высокое качество, гарантированный результат.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, диаграммы, .NET




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




Добрая сказка и немного пропаганды
Для чего нужны конкуренты в создании сайтов
Реализация алгоритма Парето на C#