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;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"格式输出 } /**//// 系统定义的颜色,有效值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; }

posted on 2008-09-12 13:31  风乔  阅读(277)  评论(0编辑  收藏  举报

导航