zoukankan      html  css  js  c++  java
  • ASP.NET画柱状图和折线图

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;

    namespace commonu
    {
        
    /// <summary>
        
    /// WebForm2 的摘要说明。
        
    /// </summary>

        public class WebForm2 : System.Web.UI.Page
        
    {
        
            
    private void Page_Load(object sender, System.EventArgs e)
            
    {

                
    /*自写编码*/
                
    int ImgWidth=600;        //1.[总宽度]            ***图宽度   
                int ImgHeight=300;        //2.[总高度]            ***图高度        
                int ItemNum=1;            //3.[项目数量]            ***图表划分的块            
                int ChildNum=6;            //4.[块数]                ***大块中划分的子项的数量
                float ChildRate=0.6f;    //5.[各块总占空间比率]
                
    //int ChildSpace=15;        //6.[各块间的间距]
                int ChartLeft=80;        //7.[图表左边距]        ***图表距图的左边距离
                int ChartRight=50;        //8.[图表右边距]        ***图表距图的右边距离
                int ChartTop=50;        //9.[图表顶边距]        ***图表距图顶边距离
                int ChartBottom=50;        //10.[图表底边距]        ***图表距图底边距离
                int YMaxValue=5000;        //11.[纵坐标标尺最大值]    ***纵坐标标尺的最大值
                int YItemNum=10;        //12.[纵坐标标尺段数]    ***纵坐标标尺的段数
                int YTop=15;            //13.[距纵轴顶端间隔]
                int YStrStart=35;        //14.[纵坐标标尺文字起始X坐标]
                int XRight=15;            //15.[距横轴右端间隔]
                int XStrStart=20;        //16.[横坐标标尺文字起始Y坐标]
                

                
    //[图表总宽度]=[总宽度]-[图表左边距]-[图表右边距]-[距横轴右端间隔]
                int chartwidth=ImgWidth-ChartLeft-ChartRight-XRight;
                
    //[项目宽度]=[图表总宽度]/[项目数量]
                int itemwidth=chartwidth/ItemNum;
                
    //[各块总占空间比率的实际宽度]=[项目宽度]*[各块总占空间比率]
                int factwidth=Convert.ToInt32(Math.Floor(itemwidth*ChildRate));
                
    //[各块矩形宽度]=[各块总占空间比率的实际宽度]/[块数]
                int rectanglewidth=factwidth/ChildNum;
                
    //[各块间的间距]=([项目宽度]-[各块总占空间比率的实际宽度])/([块数]+1)
                int childspace=Convert.ToInt32(Math.Floor((itemwidth-factwidth)/(ChildNum+1)));

                Graphics objGps;
    //建立画板对象
                Bitmap objBitMap = new Bitmap(ImgWidth,ImgHeight);//建立位图对象
                objGps = Graphics.FromImage(objBitMap);//根据位图对象建立画板对象
                objGps.Clear(Color.White);//设置画板对象的背景色



                
    int[] arrValues={0,0,0,0,0,0};//数据数组
                
    //arrValues[0]=500;
                arrValues[0]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*500/YMaxValue));    //处理显示数据,进行图表数值对应
                arrValues[1]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*700/YMaxValue));
                arrValues[
    2]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*900/YMaxValue));
                arrValues[
    3]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*1000/YMaxValue));
                arrValues[
    4]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*1400/YMaxValue));
                arrValues[
    5]=Convert.ToInt32(Math.Floor((ImgHeight-ChartBottom-ChartTop-YTop)*2200/YMaxValue));
                
    string[] arrValueNames={"0","0","0","0","0","0","0","0","0","0"};//月份

                arrValueNames[
    0= "一月";
                arrValueNames[
    1]="二月";
                arrValueNames[
    2= "三月";
                arrValueNames[
    3]="四月";
                arrValueNames[
    4]="五月";
                arrValueNames[
    5]="六月";
                arrValueNames[
    6= "七月";
                arrValueNames[
    7]="八月";
                arrValueNames[
    8]="九月";
                arrValueNames[
    9]="十月";

                
    //得出矩形宽度,和画图X轴位置

                
    //[项目宽度]=[总宽度]/[项目数量]
                
    //======[各块总占空间比率]=([各块矩形宽度]+[各块间的间距])/[项目宽度]
                
    //[各块总占空间比率的实际宽度]=[项目宽度]*[各块总占空间比率]
                
    //[各块矩形宽度]=([各块总占空间比率的实际宽度]-[各块间的间距]*([块数]))/[块数]
                
    //[一边空余空间宽度]=([项目宽度]-[各块所占空间比率的总宽度])/2  

                System.Drawing.Point[] pi
    =new Point[arrValues.Length];    //定义折线点的对象数组
                System.Drawing.Point[] pit=new Point[3];    //定义坐标三角点的对象数组
                System.Drawing.Pen pe=new Pen(new SolidBrush(GetColor(7)),1f);    //定义画直线的对象
                
    //画纵轴
                objGps.DrawLine(pe,new Point(ChartLeft,ImgHeight-ChartBottom),new Point(ChartLeft,ChartTop));
                
    //画纵轴终点箭头
                pit[0].X=ImgWidth-ChartRight;    //确定三角形三点的位置
                pit[0].Y=ImgHeight-ChartBottom-4;
                pit[
    1].X=ImgWidth-ChartRight;
                pit[
    1].Y=ImgHeight-ChartBottom+4;
                pit[
    2].X=ImgWidth-ChartRight+10;
                pit[
    2].Y=ImgHeight-ChartBottom;
                objGps.FillPolygon(
    new SolidBrush(GetColor(7)),pit);
                
    //画纵轴标尺和标尺描述
                for(int i=1;i<=YItemNum;i++)
                
    {
                    
    //画标尺
                    objGps.DrawLine(pe,new PointF(ChartLeft,ImgHeight-ChartBottom-(ImgHeight-ChartBottom-ChartTop-YTop)/YItemNum*i),new PointF(ChartLeft-5,ImgHeight-ChartBottom-(ImgHeight-ChartBottom-ChartTop-YTop)/YItemNum*i));
                    
    //画描述
                    objGps.DrawString(arrValueNames[i-1].ToString(),new Font("宋体",10),Brushes.Black,new Point(YStrStart,ImgHeight-ChartBottom-(ImgHeight-ChartBottom-ChartTop-YTop)/YItemNum*i-5));
                }

                
    //画横轴
                objGps.DrawLine(pe,new Point(ChartLeft,ImgHeight-ChartBottom),new Point(ImgWidth-ChartRight,ImgHeight-ChartBottom));
                
    //画横轴终点箭头
                pit[0].X=ChartLeft-4;    //确定三角形三点的位置
                pit[0].Y=ChartTop;
                pit[
    1].X=ChartLeft+4;
                pit[
    1].Y=ChartTop;
                pit[
    2].X=ChartLeft;
                pit[
    2].Y=ChartTop-10;
                objGps.FillPolygon(
    new SolidBrush(GetColor(7)),pit);
                
    //画横轴标尺和标尺描述
                for(int i=1;i<=ItemNum;i++)
                
    {
                    objGps.DrawLine(pe,
    new PointF(ChartLeft+itemwidth*i,ImgHeight-ChartBottom),new PointF(ChartLeft+itemwidth*i,ImgHeight-ChartBottom+5));
                    objGps.DrawString(arrValueNames[i
    -1].ToString(),new Font("宋体",10),Brushes.Black,new Point(ChartLeft+childspace+itemwidth*(i-1),ImgHeight-ChartBottom+XStrStart));
                }


                
    for(int j = 0;j<arrValues.Length;j++)//画矩形图和折线图
                {
                    objGps.FillRectangle(
    new SolidBrush(GetColor(j)),(j*(childspace+rectanglewidth))+childspace+ChartLeft,ImgHeight-ChartBottom-arrValues[j],rectanglewidth,arrValues[j]);
                    objGps.DrawRectangle(Pens.Black,(j
    *(childspace+rectanglewidth))+childspace+ChartLeft,ImgHeight-ChartBottom-arrValues[j],rectanglewidth,arrValues[j]);
                    pi[j].X
    =(j*(childspace+rectanglewidth))+childspace+ChartLeft;
                    pi[j].Y
    =ImgHeight-ChartBottom-arrValues[j];
                    pe.SetLineCap(System.Drawing.Drawing2D.LineCap.RoundAnchor,System.Drawing.Drawing2D.LineCap.RoundAnchor,System.Drawing.Drawing2D.DashCap.Round);
                    
    if(j>0)
                    
    {
                        objGps.DrawLine(pe,pi[j
    -1],pi[j]);
                    }

                }


                objBitMap.Save(Response.OutputStream,ImageFormat.Gif);
    //该位图对象以"GIF"格式输出
            }

    /// <param name="itemIndex">系统定义的颜色,有效值0到7,分别为(Blue,Yellow,Red,Orange,Purple,Brown,Pink,Black)</param>
    /// <returns></returns>

            public static Color GetColor(int itemIndex)
            
    {
                Color objColor 
    = new Color();
                
    switch(itemIndex)
                
    {
                    
    case 0:
                        objColor 
    = Color.Blue;
                        
    break;
                    
    case 1:
                        objColor 
    = Color.Yellow;
                        
    break;
                    
    case 2:
                        objColor 
    = Color.Red;
                        
    break;
                    
    case 3:
                        objColor 
    = Color.Orange;
                        
    break;
                    
    case 4:
                        objColor 
    = Color.Purple;
                        
    break;
                    
    case 5:
                        objColor 
    = Color.Brown;
                        
    break;
                    
    case 6:
                        objColor 
    = Color.Pink;
                        
    break;
                    
    default:
                        objColor 
    = Color.Black;
                        
    break;
                }


                
    return objColor;
            }


    /// <param name="red">自定义颜色红色分量值,有效值0到255</param>
    /// <param name="green">自定义颜色绿色分量值,有效值0到255</param>
    /// <param name="blue">自定义颜色蓝色分量值,有效值0到255</param>
    /// <returns></returns>

            public static Color GetColor(int red,int green,int blue)
            
    {
                Color objColor 
    = new Color();
                objColor 
    = Color.FromArgb(red,green,blue);
                
    return objColor;
            }


    我做的时候充分把能用变量的地方尽量有变量,
    方便有兴趣的朋友把次改为组件,方便以后应用,我还会对此进行更新,做成一个组件。
    下面是运行后的图例:
  • 相关阅读:
    学习攻略丨如何进阶为一名Web安全高手?
    审计篇丨PHPcms9.6.3后台XSS审计
    新手篇丨Python任意网段Web端口信息探测工具
    ZZZPHP1.61 代码审计-从SQL注入到Getshell
    FOFA爬虫大法——API的简单利用
    菜鸟如何反转到资深Web安全工程师
    实战经验丨CTF中文件包含的技巧总结
    一名合格的Web安全工程师之成长路径
    CTF丨2019互联网安全城市巡回赛·西安站,我们来了!
    暖春许愿季丨i春秋给你送福利
  • 原文地址:https://www.cnblogs.com/hanguoji/p/277444.html
Copyright © 2011-2022 走看看