`

C# 画圆饼分析图

    博客分类:
  • .Net
阅读更多

Code:

using System;
using System.Drawing;


    namespace aa    {
        public class Pie
        {
            private Graphics objGraphics; //Graphics 类提供将对象绘制到显示设备的方法
            private Bitmap objBitmap; //位图对象

            private int m_Width = 700; //图像宽度
            private int m_Height = 400; //图像高度
            private string m_Title = "";
            private string m_Unit = "百分比";
            //键
            private string[] m_Keys = new string[]{"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
            //值
            private float[] m_Values = new float[]{21.5f,36.2f,48.7f,55.4f,21.6f,12.8f,99.5f,36.4f,78.2f,56.4f,45.8f,66.4f};
            private Color m_BgColor = Color.Snow; //背景
            private Color m_TextColor = Color.Black; //文字颜色
            private Color m_BorderColor = Color.Black; //整体边框颜色
            //Pie颜色数组
            private Color[] m_PieColor = new Color[]{Color.Green,Color.Red,Color.Yellow,Color.Blue,Color.Orange,Color.Aqua,Color.SkyBlue,Color.DeepPink,Color.Azure,Color.Brown};

            public int Width
            {
                set
                {
                    if(value < 300)
                    {
                        m_Width = 300;
                    }
                    else
                    {
                        m_Width = value;
                    }
                }
                get
                {
                    return m_Width;
                }
            }

            public int Height
            {
                set
                {
                    if(value < 300)
                    {
                        m_Height = 300;
                    }
                    else
                    {
                        m_Height = value;
                    }
                }
                get
                {
                    return m_Height;
                }
            }

            public string Title
            {
                set
                {
                    m_Title  = value;
                }
                get
                {
                    return m_Title;
                }
            }

            public string Unit
            {
                set
                {
                    m_Unit = value;
                }
                get
                {
                    return m_Unit;
                }
            }

            public string[] Keys
            {
                set
                {
                    m_Keys = value;
                }
                get
                {
                    return m_Keys;
                }
            }

            public float[] Values
            {
                set
                {
                    m_Values = value;
                }
                get
                {
                    return m_Values;
                }
            }

            public Color BgColor
            {
                set
                {
                    m_BgColor = value;
                }
                get
                {
                    return m_BgColor;
                }
            }

            public Color TextColor
            {
                set
                {
                    m_TextColor = value;
                }
                get
                {
                    return m_TextColor;
                }
            }

            public Color BorderColor
            {
                set
                {
                    m_BorderColor = value;
                }
                get
                {
                    return m_BorderColor;
                }
            }

            public Color[] PieColor
            {
                set
                {
                    m_PieColor = value;
                }
                get
                {
                    return m_PieColor;
                }
            }

            private Color GetColor(int i) //分配各Pie的颜色
            {
                try
                {
                    if( 0 < i && i < PieColor.Length )
                    {
                        return PieColor[i];
                    }
                    else if( i >= PieColor.Length )
                    {
                        int j = i % PieColor.Length;
                        return PieColor[j];
                    }
                    else
                    {
                        return Color.Green;
                    }
                }
                catch
                {
                    return Color.Green;
                }
            }

            //生成图像并返回bmp图像对象
            public Bitmap CreateImage()
            {
                InitializeGraph();

                DrawRight(ref objGraphics);

                DrawContent(ref objGraphics);

                return objBitmap;
            }

            //初始化和填充图像区域,画出边框,初始标题
            private void InitializeGraph()
            {
            
                //根据给定的高度和宽度创建一个位图图像
                objBitmap = new Bitmap(Width,Height);

                //从指定的 objBitmap 对象创建 objGraphics 对象 (即在objBitmap对象中画图)
                objGraphics = Graphics.FromImage(objBitmap);

                //根据给定颜色(LightGray)填充图像的矩形区域 (背景)
                objGraphics.DrawRectangle(new Pen(BorderColor,1),0,0,Width,Height);
                objGraphics.FillRectangle(new SolidBrush(BgColor),1,1,Width-2,Height-2);

                //初始化标题
                CreateTitle(ref objGraphics);
            }

            //初始化右边说明部分
            private void DrawRight(ref Graphics objGraphics)
            {
                objGraphics.DrawString(String.Format("单位:{0}",Unit),new Font("宋体",10),new SolidBrush(TextColor),Width-95,30);

                Point KeysPoint = new Point(Width-120,50);
                Point KeysTextPoint = new Point(Width-90,50);
                for(int i=0;i < Keys.Length;i++)
                {
                    objGraphics.DrawRectangle(new Pen(BorderColor,1),KeysPoint.X,KeysPoint.Y,21,11);
                    objGraphics.FillRectangle(new SolidBrush(GetColor(i)),KeysPoint.X,KeysPoint.Y,20,10);
                    objGraphics.DrawString(String.Format("{0} {1}",Keys[i],Values[i]),new Font("宋体",10),new SolidBrush(TextColor),KeysTextPoint);
                    KeysPoint.Y +=15;
                    KeysTextPoint.Y += 15;
                }
            }

            private void DrawContent(ref Graphics objGraphics)
            {
                float Sum = 0;
                float StartAngle = 0;
                float SweepAngle = 0;
                float CircleHeight = 0;
                float CircleX = 0;
                float CircleY = 0;

                for(int i=0;i<Values.Length;i++)
                {
                    Sum += Values[i];
                }
                if(Width > Height)
                {
                    CircleHeight = Height - 100;
                }
                else
                {
                    CircleHeight = Width - 150;
                }
                CircleX = (Width - 150)/2 - CircleHeight/2;
                CircleY = Height - 50 - CircleHeight;
                for(int i=0;i<Values.Length;i++)
                {
                    SweepAngle = (Values[i]/Sum)*360;
                    objGraphics.DrawPie (new Pen(BorderColor,1),CircleX,CircleY,CircleHeight,CircleHeight,StartAngle,SweepAngle);
                    objGraphics.FillPie (new SolidBrush(GetColor(i)),CircleX,CircleY,CircleHeight,CircleHeight,StartAngle,SweepAngle);
                    StartAngle += SweepAngle;
                }
            }

            //初始化标题
            private void CreateTitle(ref Graphics objGraphics)
            {
                objGraphics.DrawString(Title,new Font("宋体",16),new SolidBrush(TextColor),new Point(5,5));
            }
        }
    }

 

 

 调用:

Pie pie = new Pie(); //定义一个画图类实例
            DataTable dt = ssih.GetList("1=1 order by dataDate desc");
            string[] kzKeys = {"看多","看平","看空"};
            pie.Keys = kzKeys;
            float[] kzValues = {float.Parse(Convert.ToString(Convert.ToDouble(dt.Rows[0]["zxyc1"].ToString())*100)),float.Parse(Convert.ToString(Convert.ToDouble(dt.Rows[0]["zxyc2"].ToString())*100)),float.Parse(Convert.ToString(Convert.ToDouble(dt.Rows[0]["zxyc3"].ToString())*100))};
            pie.Values = kzValues;
            Bitmap bmp = pie.CreateImage();
            bmp.Save(@"D:\work\cnqsq\Pie.jpg",ImageFormat.Jpeg);
//D:\work\cnqsq\Pie.jpg此目录要有asp_net写入的权限
 

 

 

分享到:
评论

相关推荐

    【 C#资源 】 ScottPlot 免费的开源图标组件库使用的 demo 案例

    它提供了丰富的图表类型,包括线图、散点图、柱状图、热力图、直方图等,并且支持交互式数据可视化。ScottPlot的特点是易于集成、使用简单、性能优越,适用于各种数据分析和可视化的应用场景。 二、主要特点 跨平台...

    C#使用柱形图表分析显示商品走势

    对于搞C#的来说,什么情况都可能遇到,学会使用柱状图、圆饼较等图表来分析数据,也是必不可少的,通过本例子源码你可以了解到如何使用visual C#创建Graphics类对象、清空图片背景色、画图片的边框线、绘制横向线条...

    wpf 绘制饼状图

    综上所述,本项目提供了WPF环境下动态饼状图的实现,通过数据绑定和事件处理,可以方便地进行数据可视化,帮助用户更好地理解和分析数据。如果你希望深入学习,可以解压“PieChartDataBinding.zip”,查看源代码并...

    GDI报表实现

    在这个话题中,我们将深入探讨如何使用GDI来创建圆饼图、树状图和折线图,这些都是数据分析和展示中常见的图表类型。 首先,让我们了解GDI的基础。GDI主要由以下几个核心组件组成: 1. **图形设备上下文(Graphics...

    学生成绩统计,使用柱状图和饼状图

    在IT领域,尤其是在数据分析和可视化方面,"学生成绩统计,使用柱状图和饼状图"是一个典型的项目,它涵盖了编程语言C#的应用、文件存储以及数据可视化的概念。以下将详细介绍这些知识点: 1. **C#**:C#是由微软...

    FastReport设计 详细讲解.doc

    2. 图形与多媒体:FastReport.Net 支持在报表中插入图表,如柱状图和圆饼图,以直观地呈现数据。此外,还可以添加图片和条码,增强报表的视觉效果。 3. 身份验证与数据筛选:在运行报表前,你可以设置弹出对话框...

    一些16*16的小图(gif)适合做系统托盘图标

    压缩包子文件的文件名称“圆饼”表明其中至少有一个图标与圆形或饼状图相关,可能适用于表示进程、状态、资源分配等概念,例如在系统监控或者数据分析的应用中。 综合这些信息,我们可以推测这个压缩包是一个资源...

    Dragonfly DAS自控领域广泛应用的.NET图表控件

    Dragonfly Chart .Net for Windows Form 包括七个图表.Net控件, 属于下列类型, 饼图、环图、条形图、X-Y曲线图、弧度模态图。Dragonfly Chart .Net 提供了两维/三维控件,这些控件已被广泛应用在象工业自动化HMI、...

    研究生科研信息管理系统需求分析.pdf

    - 系统应具备抽象设计原理,能根据多种条件生成统计分析结果,以图表(如直方图、圆饼图、折线图、表格)形式展示,便于理解和决策。 3. **技术选型**: - 开发语言和框架:可采用C# .NET或JSP技术。 - 数据库...

    公司职工管理系统.zip

    3、利用“抽象”设计原理,对系统设计并实现满足多种条件的统计分析功能,有些统计数据要采用图表(直方图、圆饼图、折线图、表格等)的格式呈现; 4、系统开发可采用C#.net技术或JSP技术和数据库(数据库可选MySQL...

Global site tag (gtag.js) - Google Analytics