На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Создание круговой диаграммы на 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++ в GUI с анимацией
Урок 34. Функциональные выражения JavaScript


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.