c语言编程笔录

首页 > C语言 > c语言

c语言

C# 使用GDI绘制雷达图的实例

更新时间:2023-08-09

前言:

在C#中使用GDI绘制雷达图是一个有趣且有挑战性的任务。雷达图是一种使用多边形来展示数据的图表类型,适用于比较多个连续变量的值。本文将介绍如何使用C#的GDI绘制雷达图的实例。

代码实现:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace RadarChartExample
{
    public partial class Form1 : Form
    {
        private List<DataItem> data;
        
        public Form1()
        {
            InitializeComponent();
            data = new List<DataItem>();
            // 添加数据
            data.Add(new DataItem("Category 1", 8));
            data.Add(new DataItem("Category 2", 6));
            data.Add(new DataItem("Category 3", 7));
            data.Add(new DataItem("Category 4", 9));
            data.Add(new DataItem("Category 5", 5));
            data.Add(new DataItem("Category 6", 4));
        }
        
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            
            int centerX = ClientSize.Width / 2;
            int centerY = ClientSize.Height / 2;
            int radius = Math.Min(centerX, centerY) - 10;
            
            // 绘制雷达图外框
            Pen pen = new Pen(Color.Black, 2);
            g.DrawEllipse(pen, centerX - radius, centerY - radius, radius * 2, radius * 2);
            
            // 绘制雷达图各数据区域
            for (int i = 0; i < data.Count; i++)
            {
                float angle = (360f / data.Count) * i;
                double value = data[i].Value;
                
                // 计算数据点坐标
                double radians = angle * Math.PI / 180;
                int x = (int)(centerX + radius * Math.Cos(radians) * (value / 10));
                int y = (int)(centerY + radius * Math.Sin(radians) * (value / 10));

                // 绘制数据点
                Brush brush = new SolidBrush(Color.Red);
                g.FillEllipse(brush, x - 5, y - 5, 10, 10);
                
                // 绘制数据标签
                g.DrawString(data[i].Label, Font, Brushes.Black, x + 10, y - 5);
                
                // 绘制连线
                g.DrawLine(pen, centerX, centerY, x, y);
                
                brush.Dispose();
            }

            pen.Dispose();
        }
        
        private class DataItem
        {
            public string Label { get; set; }
            public double Value { get; set; }
            
            public DataItem(string label, double value)
            {
                Label = label;
                Value = value;
            }
        }
    }
}

代码解释:

上述代码是一个简单的C# Windows Forms应用程序示例,演示了如何使用GDI绘制雷达图。在Form1的构造函数中,我们创建了一个数据列表data,并为每个数据点分配一个标签和一个数值。

在Form1的Paint事件处理程序中,我们首先计算雷达图的中心点坐标、半径以及雷达图边框的绘制。然后,我们使用Graphics对象绘制外框,并使用循环根据数据点的数值和角度计算数据点的坐标并绘制。

绘制每个数据点时,我们使用SolidBrush来填充数据点的颜色,使用DrawString方法绘制数据标签,并使用DrawLine方法绘制雷达图各数据点之间的连线。

最后,我们在Main方法中创建Form1实例并调用Application.Run方法启动应用程序。

总结:

通过使用C#的GDI,我们可以轻松地实现雷达图的绘制。该示例提供了一个基础框架,可以根据需要进行定制和扩展,如添加坐标轴、调整颜色和样式等。希望这个实例能够帮助你理解如何使用C#和GDI来创建雷达图。