c#代码画图

说明:此示例代码在我做的一个项目中  不过还是可以学习一下

一:直角坐标系显示数据

先看效果图:

代码:

        private List<int> Conuts = new List<int>();

        public List<int> Conuts1
        {
            get { return Conuts; }
            set { Conuts = value; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

            StaffSystemDataContext dc = new StaffSystemDataContext();
            var Deps = dc.PropertyMappings.Where(p => p.PropertyName.Equals("DepartmentID"));
            foreach (var dep in Deps)
            {
                var Pros = dc.Projects.Where(p => p.DepartmentID.Equals(dep.PropertyValue));
                Conuts1.Add(Pros.Count());
            }
            //画图初始化
            Bitmap bMap = new Bitmap(500, 500);
            Graphics gph = Graphics.FromImage(bMap);
            gph.Clear(Color.White);
            //中心点
            PointF cPt = new PointF(40, 420);
            //X轴三角形
            PointF[] xPt = new PointF[3] { new PointF(cPt.Y + 15, cPt.Y), new PointF(cPt.Y, cPt.Y - 8), new PointF(cPt.Y, cPt.Y + 8) };
            //Y轴三角形
            PointF[] yPt = new PointF[3] { new PointF(cPt.X, cPt.X - 15), new PointF(cPt.X - 8, cPt.X), new PointF(cPt.X + 8, cPt.X) };
            //图表标题
            gph.DrawString("部门项目汇总图表", new Font("宋体", 14), Brushes.Black, new PointF(cPt.X + 60, cPt.X));
            //画X轴
            gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.Y, cPt.Y);
            gph.DrawPolygon(Pens.Black, xPt);
            gph.FillPolygon(new SolidBrush(Color.Black), xPt);
            gph.DrawString("部门", new Font("宋体", 12), Brushes.Black, new PointF(cPt.Y + 10, cPt.Y + 10));
            //画Y轴
            gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.X, cPt.X);
            gph.DrawPolygon(Pens.Black, yPt);
            gph.FillPolygon(new SolidBrush(Color.Black), yPt);
            gph.DrawString("项目数", new Font("宋体", 12), Brushes.Black, new PointF(0, 7));
            //画Y轴刻度
            for (int i = 1; i <= 10; i++)
            {
                gph.DrawString(i.ToString(), new Font("宋体", 11), Brushes.Black, new PointF(cPt.X - 30, cPt.Y - i * 30 - 6));
                gph.DrawLine(Pens.Black, cPt.X - 3, cPt.Y - i * 30, cPt.X, cPt.Y - i * 30);
            }
            //画X轴项目
            int a = 1;
            foreach (var dep in Deps)
            {

                gph.DrawString(dep.PropertyMeaning.Substring(0, 1), new Font("宋体", 11), Brushes.Black, new PointF(cPt.X + a * 30 - 5, cPt.Y + 5));
                gph.DrawString(dep.PropertyMeaning.Substring(1, 1), new Font("宋体", 11), Brushes.Black, new PointF(cPt.X + a * 30 - 5, cPt.Y + 20));
                gph.DrawString(dep.PropertyMeaning.Substring(2, 1), new Font("宋体", 11), Brushes.Black, new PointF(cPt.X + a * 30 - 5, cPt.Y + 35));
                a++;
            }
            for (int i = 1; i <= Deps.Count(); i++)
            {
                //画点
                gph.DrawEllipse(Pens.Black, cPt.X + i * 30 - 1.5F, cPt.Y - Conuts1[i - 1] * 30 - 1.5F, 3, 3);
                gph.FillEllipse(new SolidBrush(Color.Black), cPt.X + i * 30 - 1.5F, cPt.Y - Conuts1[i - 1] * 30 - 1.5F, 3, 3);
                //画数值
                gph.DrawString(Conuts1[i - 1].ToString(), new Font("宋体", 11), Brushes.Black, new PointF(cPt.X + i * 30, cPt.Y - Conuts1[i - 1] * 30));
                //画折线
                if (i > 1)
                    gph.DrawLine(Pens.Red, cPt.X + (i - 1) * 30, cPt.Y - Conuts1[i - 2] * 30, cPt.X + i * 30, cPt.Y - Conuts1[i - 1] * 30);
            }
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            bMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            Response.ClearContent();
            Response.ContentType = "image/Png";
            Response.BinaryWrite(ms.ToArray());
            gph.Dispose();
            bMap.Dispose();
            Response.End();
        }

注意:这里的坐标都是从左上角开始算   而且必须使用最后的一小段代码将其转化为图片

二:绘制圆形效果

 StaffSystemDataContext dc = new StaffSystemDataContext();
            var Deps = dc.PropertyMappings.Where(p => p.PropertyName.Equals("DepartmentID"));

            //创建画图对象
            int width = 800, height = 800;
            Bitmap bitmap = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(bitmap);
            try
            {
                //清空背景色
                g.Clear(Color.White);
                Pen pen1 = new Pen(Color.Red);

                Brush brush1 = new SolidBrush(Color.PowderBlue);
                Brush brush2 = new SolidBrush(Color.Blue);
                Brush brush3 = new SolidBrush(Color.Wheat);
                Brush brush4 = new SolidBrush(Color.Orange);
                Brush brush5 = new SolidBrush(Color.Gray);
                Brush brush6 = new SolidBrush(Color.Red);
                Brush brush7 = new SolidBrush(Color.White);
                Brush[] brs = new Brush[] { brush1, brush2, brush3, brush4, brush5, brush6 };
                Font font1 = new Font("Courier New", 16, FontStyle.Bold);
                Font font2 = new Font("Courier New", 8);
                g.FillRectangle(brush7, 0, 0, width, height);    //绘制背景图
                g.DrawString("员工部门比例饼形图", font1, brush2, new Point(80, 20));  //书写标题
                int piex = 100, piey = 60, piew = 200, pieh = 200, sum = 0;
                var Pros = dc.Projects.Where(p => p.DepartmentID != null);
                sum = Pros.Count();
                int a = 0;
                float j = 0;
                foreach (var dep in Deps)
                {
                    var Prods = dc.Projects.Where(p => p.DepartmentID.Equals(dep.PropertyValue));
                    //计算角度
                    float angle = Convert.ToSingle((360 / Convert.ToSingle(sum)) * Convert.ToSingle(Prods.Count()));
                    //绘制员工所占比例
                    //FieldInfo fi = type.GetField("ddd" + i.ToString());
                    //temp += fi.GetValue(this).ToString();
                    //Type type = this.GetType();
                    //Brush fi = (Brush)type.GetField("brush" + a.ToString());
                    g.FillPie(brs[a], piex, piey, piew, pieh, j, angle);
                    a++;
                    j = j + angle;
                }

                //绘制标识
                g.DrawRectangle(pen1, 50, 280, 400, 300);  //绘制范围框
                //绘制小矩形
                int le = 320, b = 0;
                foreach (var dep in Deps)
                {
                    var Prods = dc.Projects.Where(p => p.DepartmentID.Equals(dep.PropertyValue));
                    g.FillRectangle(brs[b], 90, le, 20, 10);
                    g.DrawString("" + dep.PropertyMeaning + "员工占公司总人数比例:" + Convert.ToSingle(Prods.Count()) * 100 / Convert.ToSingle(sum) + "%", font2, brs[b], 120, le);
                    le += 40;
                    b++;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("有错!!!");
            }
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            Response.ClearContent();
            Response.ContentType = "image/Png";
            Response.BinaryWrite(ms.ToArray());
            g.Dispose();
            bitmap.Dispose();
            Response.End();
时间: 2024-10-13 01:16:49

c#代码画图的相关文章

画图工具

亿图ppt画图visioONENOTE 如果是由实验数据来做图的话,我个人首推origin.数据导入到做图直至最后的对线形.图例.坐标轴.框图等的修饰的操作都非常容易操作,而且很容易上手.(于是乎我很不理解@章佳杰 同学说的“Origin也用过,不过用的比较少,他对画图方面的操作还是少了点,要修改一些样式之类的不方便.”这句话……)其他如流程图,示意图之类的另当别论,visio.甚至直接用Word.PPT之类都可以很方便来绘制,更不用说Illustrator这种神器了. 如果画示意图,用visi

R语言-画图(下)

在上一篇文章中,Mayuyu介绍了R中的一些常见的画图,本文就来详细介绍各种画图的用法. 1. 散点图 画图如下 由于平台的问题,中文显示不出来. 下面是用plot画折线,如下代码 画图结果 多条曲线的效果,代码如下 画图效果如下 画分布函数密度图,代码如下 画图结果如下 2. R的内置数据集 R中有很多的内置数据,只需要输入命令data()就知道有哪些数据集了.

[转]html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法

前面的文章我已经讲了3种在canvas中画曲线的方法:arc,arcTo以及quadraticCurveTo.他们都有一个共同点,就是他们画的曲线都只能偏向一边,今天讲的bezierCurveTo与他们最大的不同点就是有两个控制点,即可以画出S形的曲线了. bezierCurveTo,也就是所谓的贝赛尔曲线了,如果你学过某些画图工具,就能马上理解. bezierCurveTo的语法如下: ctx.bezierCurveTo(x1,y1,x2,y2,x,y);他的参数我照例解释一下,其中的(x1,

用c#操作visio画图

要想通过.net画visio图,要先将visio的com组件导入,就是在引用中添加visio的com组件,导入玩之后就可以写代码画图了.贴个简单的示例代码,便于大家理解: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

[读书笔记]机器学习:实用案例解析(2)

第2章  数据分析 #machine learing for heckers #chapter 2 library(ggplot2) heights.weights <- read.csv("ML_for_Hackers/02-Exploration/data/01_heights_weights_genders.csv", header = TRUE, sep = ",") #不同区间宽度的直方图 ggplot(heights.weights, aes(x

[ html canvas bezierCurveTo ] canvas绘图 bezierCurveTo ()属性研究实例演示

前面的文章我已经讲了3种在canvas中画曲线的方法:arc,arcTo以及quadraticCurveTo.他们都有一个共同点,就是他们画的曲线都只能偏向一边,今天讲的bezierCurveTo与他们最大的不同点就是有两个控制点,即可以画出S形的曲线了. bezierCurveTo,也就是所谓的贝赛尔曲线了,如果你学过某些画图工具,就能马上理解. bezierCurveTo的语法如下: 1 ctx.bezierCurveTo(x1,y1,x2,y2,x,y); 他的参数我照例解释一下,其中的(

8-原谅我这一生不羁放纵爱作图之matplotlib(上)

回想群主刚进希捷时,收到一封Advanced 6 sigma training的报名通知邮件,虽然更好的选择是从零学起,但选日不如撞日,于是很冲动地报名参加了,从此走上了数据分析的不归路!6 sigma黑带毕业后,老板把我当成部门吉祥物供着,一旦有数据分析的任务都要找我.在迎合老板的过程中,群主奇迹般地从一个小白蜕变为一个作图达人!从前车马慢,作图只会柱状图,后来CDF,等高线图,散点矩阵,矩形树图,气泡图等都尝试了一遍.直到有一天,历经繁华的群主不小心点开perceptual edge这个网站

Leetcode 416. Partition Equal Subset Sum

416. Partition Equal Subset Sum Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 1

Windows下TEX排版论文攻略—CTeX、JabRef使用心得

笔者刚刚接触到TEX排版,相关知识完全空白,用了两天时间学习并完成了一篇论文的完整排版. 期间遇到不少小问题,着实辛苦,分享至上,现将其解决办法总结归纳,共同学习. ? ? 一.工具介绍 TeX是一个很好排版工具,在学术界十分流行,特别是数学.物理学和计算机科学界. CTeX是TeX中的一个版本,指的是CTeX 中文套装的简称.CTeX中文套装是基于 Windows 下的 MiKTeX系统,集成了编辑器 WinEdt及其他的处理软件,并增加了对中文的完整支持. BibTeX是一种格式和一个程序,