zoukankan      html  css  js  c++  java
  • ASP.net用Graphics实现的统计图(折线图、柱状图、饼图)

    一.折线图

    转载ASP.net用Graphics实现的统计图(折线图、柱状图、饼图)
    代码:

    private void CreateImage()
            {
                int height = 480, width = 700;
                Bitmap image = new Bitmap(width,height);
                Graphics g = Graphics.FromImage(image);
                try
                {
                      //清空图片背景
                    g.Clear(Color.White);

    Font font = new Font("Arial",9,FontStyle.Regular);
                    Font font1 = new Font("宋体",20,FontStyle.Bold);
                    Font font2 = new Font("Arial",8,FontStyle.Regular);

    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),Color.Blue,Color.BlueViolet,1.2f,true);
                    g.FillRectangle(Brushes.AliceBlue,0,0,width,height);

    Brush brush1 = new SolidBrush(Color.Blue);
                    Brush brush2 = new SolidBrush(Color.SaddleBrown);

    g.DrawString("北京市 2013年XX统计折线图",font1,brush1,new PointF(85,30));

    //画图片的边框线
                    g.DrawRectangle(new Pen(Color.Blue),0,0,image.Width-1,image.Height-1);

    Pen mypen = new Pen(brush,1);
                    Pen mypen2 = new Pen(Color.Red,2);

    //绘制线条
                    //绘制纵向线条
                    int x = 60;
                    for (int i = 0; i < 8; ++i)
                    {
                        g.DrawLine(mypen,x,80,x,340);
                        x += 80;
                    }
                    Pen mypen1 = new Pen(Color.Blue,3);
                    x = 60;
                    g.DrawLine(mypen1,x,82,x,340);

    //绘制横向线条
                    int y = 106;
                    for (int i = 0; i < 10; ++i)
                    {
                        g.DrawLine(mypen,60,y,620,y);
                        y += 26;
                    }
                    g.DrawLine(mypen1,60,y-26,620,y-26);

    //x轴
                    String[] n = {"第一期","第二期","第三期","第四期","上半年","下半年","全年统计" };
                    x = 45;
                    for (int i = 0; i < 7; i++)
                    {
                        g.DrawString(n[i].ToString(),font,Brushes.Red,x,348);
                        x += 77;
                    }
                    //y轴
                    String[] m = { "220人","200人","175人","150人","125人","100","75人","50人","25人"};
                    y = 100;
                    for (int i = 0; i < 9;++i )
                    {
                        g.DrawString(m[i].ToString(),font,Brushes.Red,10,y);
                        y += 26;
                    }

    int[] Count1 = { 28,60,56,44,88,110,198};
                    int[] Count2 = { 15,24,25,13,39,38,37};

    //显示折线效果
                    Font font3 = new Font("Arial",10,FontStyle.Bold);
                    SolidBrush mybrush = new SolidBrush(Color.Red);
                    Point[] points1=new Point[7];
                    Point[] points2 = new Point[7];
                    int startX = 60;
                    int startX1=58;
                    for (int t = 0; t < 7; ++t)
                    {
                        points1[t].X = startX; points1[t].Y = 340 - Count1[t];
                        points2[t].X = startX; points2[t].Y = 340 - Count2[t];
                        startX += 80;
                        //绘制数字
                        g.DrawString(Count1[t].ToString(),font3,Brushes.Red,startX1,points1[t].Y-20);
                        g.DrawString(Count2[t].ToString(),font3,Brushes.Green,startX1+1,points2[t].Y-15);
                        startX1 += 80;
                    }
                    //绘制折线
                    g.DrawLines(mypen2,points1);

    Pen mypen3 = new Pen(Color.Green,2);
                    g.DrawLines(mypen3,points2);

    //绘制标识
                    g.DrawRectangle(new Pen(Brushes.Red),180,390,250,50);
                    g.FillRectangle(Brushes.Red,270,402,20,10);//绘制小矩形
                    g.DrawString("报名人数",font2,Brushes.Red,292,400);

    g.FillRectangle(Brushes.Green,270,422,20,10);
                    g.DrawString("通过人数",font2,Brushes.Green,292,420);

    System.IO.MemoryStream ms = new MemoryStream();
                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    Response.ClearContent();
                    Response.ContentType = "image/Jpeg";
                    Response.BinaryWrite(ms.ToArray());


                }
                catch (Exception e)
                {
                  
                }finally
                {
                    image.Dispose();
                    image.Dispose();
                }
            }

    二.柱状图

     

    转载ASP.net用Graphics实现的统计图(折线图、柱状图、饼图)

    代码:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Drawing;

    using System.Drawing.Drawing2D;

    namespace zhuzhuangtu

    {

        public partial class _Default : System.Web.UI.Page

        {

            protected void Page_Load(object sender, EventArgs e)

            {

                CreateImage();

            }

            private void CreateImage()

            {

                int height = 500, width = 700;

                Bitmap image = new Bitmap(width, height);

                //创建Graphics类对象

                Graphics g = Graphics.FromImage(image);

                try

                {

                    //清空图片背景色

                    g.Clear(Color.Red);

                    Font font = new Font("Arial", 10, FontStyle.Regular);

                    Font font1 = new Font("宋体", 20, FontStyle.Bold);

     

                    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.BlueViolet, 1.2f, true);

                    g.FillRectangle(Brushes.WhiteSmoke, 0, 0, width, height);

     

                    g.DrawString("河北省" + " " + "2010年" + "成绩统计柱状图", font1, brush, new PointF(70, 30));

     

                    //画图片的边框线

                    g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

     

                    Pen mypen = new Pen(brush, 1);

                    //绘制斜线

                    //绘制横向线条

                    int x = 100;

                    for (int i = 0; i < 14; i++)

                    {

                        g.DrawLine(mypen, x, 80, x, 340);

                        x = x + 40;

                    }

                    Pen mypen1 = new Pen(Color.Blue, 2);

                    x = 60;

                    g.DrawLine(mypen1, x, 80, x, 340);

     

                    //绘制纵向线条

                    int y = 106;

                    for (int i = 0; i < 9; ++i)

                    {

                        g.DrawLine(mypen, 60, y, 620, y);

                        y = y + 26;

                    }

                    g.DrawLine(mypen1, 60, y, 620, y);

     

                    //x轴

                    string[] n = { "第一期", "第二期", "第三期", "第四期", "上半年", "下半年", "全年统计" };

                    x = 78;

                    for (int i = 0; i < 7; ++i)

                    {

                        g.DrawString(n[i].ToString(), font, Brushes.Blue, x, 348);  //设置文字内容及输出

                        x = x + 78;

                    }

                    //y轴

                    string[] m = { "250", "225", "200", "175", "150", "125", "100", "75", "50", "25", "0" };

                    y = 72;

                    for (int i = 0; i < 10; ++i)

                    {

                        g.DrawString(m[i].ToString(), font, Brushes.Blue, 25, y);  //设置文字内容及输出

                        y = y + 26;

                    }

                    //绘制柱状图

                    x = 80;

                    Font font2 = new Font("Arial",10,FontStyle.Bold);

                    SolidBrush mybrush = new SolidBrush(Color.Red);

                    SolidBrush mybrush2 = new SolidBrush(Color.Green);

     

                    int[] Count1 = {39,111,71,40,150,111,261 };

                    int[] Count2 = { 26, 68, 35, 14, 94, 49, 114 };

     

                    //共7期

                    for (int i = 0; i < 7; ++i)

                    {

                        g.FillRectangle(mybrush, x, 340 - Count1[i], 20, Count1[i]);

                        g.DrawString(Count1[i].ToString(), font2, Brushes.Red, x, 340 - Count1[i] - 15);

                        x += 20;

                        g.FillRectangle(mybrush2, x, 340 - Count2[i], 20, Count2[i]);

                        g.DrawString(Count2[i].ToString(), font2, Brushes.Green, x, 340 - Count2[i] - 15);

                        x += 60;

                    }

     

                    //绘制标识

                    Font font3 = new Font("Arial",10,FontStyle.Regular);

                    g.DrawRectangle(new Pen(Brushes.Blue),170,400,250,50);

                    g.FillRectangle(Brushes.Red,270,410,20,10);

                    g.DrawString("报名人数",font3,Brushes.Red,292,408);

     

                    g.FillRectangle(Brushes.Green,270,430,20,10);

                    g.DrawString("通过人数",font3,Brushes.Green,292,428);

     

                    System.IO.MemoryStream ms = new System.IO.MemoryStream();

                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

                    Response.ClearContent();

                    Response.ContentType = "image/Jpeg";

                    Response.BinaryWrite(ms.ToArray());

     

                }

                catch (Exception e)

                {

                }

                finally

                {

                    g.Dispose();

                    image.Dispose();

                }

            }

        }

    }

    三 .饼状图

     转载ASP.net用Graphics实现的统计图(折线图、柱状图、饼图)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.IO;
    using System.Collections;
    namespace zhexian
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                CreateImage();
            }
            private void CreateImage()
            {
                //int height = 480, width = 700;
                //Bitmap image = new Bitmap(width,height);
                //Graphics g = Graphics.FromImage(image);
                try
                {
                      //清空图片背景
                    //g.Clear(Color.White);
                    Font fontlegend = new Font("verdana",9);
                    Font fonttitle = new Font("verdana",10,FontStyle.Bold);
                    float Total = 0.0f, tmp;
                    Total = Convert.ToSingle(50);

                    //背景宽
                    int width = 350;
                    int bufferspace = 15;
                    int legendheight = fontlegend.Height * 10 + bufferspace;
                    int titleheight = fonttitle.Height + bufferspace;
                    int height = width + legendheight + titleheight + bufferspace;
                    int pieheight = width;
                    Rectangle pierect = new Rectangle(0,titleheight,width,pieheight);

                    //加上各种随即色
                    ArrayList colors = new ArrayList();
                    Random rnd = new Random();
                    for (int i = 0; i < 2;++i )
                    {
                        colors.Add(new SolidBrush(Color.FromArgb(rnd.Next(255),rnd.Next(255),rnd.Next(255))));
                    }

                    //创建一个bitmap实例
                    Bitmap objbitmap = new Bitmap(width,height);
                    Graphics objgraphics = Graphics.FromImage(objbitmap);

                    //画一个白色背景
                    objgraphics.FillRectangle(new SolidBrush(Color.White),0,0,width,height);

                    //画一个亮黄色背景
                    objgraphics.FillRectangle(new SolidBrush(Color.Beige),pierect);

                    //以下为画饼图(有几行row画几个)
                    float currentdegree = 0.0f;

                    //画通过人数
                    objgraphics.FillPie((SolidBrush)colors[1],pierect,currentdegree,Convert.ToSingle(-45));
                    currentdegree += -45;


                    //画未通过人数
                    objgraphics.FillPie((SolidBrush)colors[0], pierect,currentdegree,Convert.ToSingle(-315));
                    //以下为生成主标题              
                    SolidBrush blackbrush = new SolidBrush(Color.Black);
                    SolidBrush bluebrush = new SolidBrush(Color.Blue);
                    string title = "机关单位成绩统计饼状图";
                    StringFormat stringFormat = new StringFormat();
                    stringFormat.Alignment = StringAlignment.Center;
                    stringFormat.LineAlignment = StringAlignment.Center;

                    objgraphics.DrawString(title,fonttitle,blackbrush,new Rectangle(0,0,width,titleheight),stringFormat);

                    //列出各字段与得数目
                    objgraphics.DrawRectangle(new Pen(Color.Red,2),0,height+10-legendheight,width,legendheight+50);
                    objgraphics.DrawString("-----------统计信息----------",fontlegend,blackbrush,20,height-legendheight+fontlegend.Height*1+1);
                    objgraphics.DrawString("统计单位:XX学校",fontlegend,blackbrush,20,height-legendheight+fontlegend.Height*3+1);
                    objgraphics.DrawString("统计年份:2013年",fontlegend,blackbrush,20,height-legendheight+fontlegend.Height*4+1);
                    objgraphics.DrawString("统计期数:34",fontlegend,blackbrush,20,height-legendheight+fontlegend.Height*5+1);


                    System.IO.MemoryStream ms = new MemoryStream();
                    objbitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    Response.ClearContent();
                    Response.ContentType = "image/Jpeg";
                    Response.BinaryWrite(ms.ToArray());
                    objbitmap.Dispose();
                    objbitmap.Dispose();

                }
                catch (Exception e)
                {
                  
                }
            }
        }
    }

  • 相关阅读:
    Django Rest framework基础使用之Request/Response
    Django Rest framework基础使用之 serializer
    python基础(一)
    python实现本地图片上传到服务区
    开发中遇到的问题记录
    九、xadmin菜单分组管理
    leetcode-7-整数翻转
    leetcode-6-Z 字形变换
    leetcode-5-最长回文子串
    leetcode-3-无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/hutie1980/p/12924771.html
Copyright © 2011-2022 走看看