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  {  /**////   /// WebForm2 的摘要说明。  ///   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;j0)  {  objGps.DrawLine(pe,pi[j-1],pi[j]);  }  }    objBitMap.Save(Response.OutputStream,ImageFormat.Gif);//该位图对象以"GIF"格式输出  }  /**//// 系统定义的颜色,有效值0到7,分别为(Blue,Yellow,Red,Orange,Purple,Brown,Pink,Black)  ///   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;  }  /**//// 自定义颜色红色分量值,有效值0到255  /// 自定义颜色绿色分量值,有效值0到255  /// 自定义颜色蓝色分量值,有效值0到255  ///   public static Color GetColor(int red,int green,int blue)  {  Color objColor = new Color();  objColor = Color.FromArgb(red,green,blue);  return objColor;  }  

你还可能感兴趣:使用AspNetPager控件分页

名称栏目:ASP.NET画直方图
文章来源:http://cdiso.cn/article/pshocj.html

其他资讯