您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C#-绘制统计图(柱状图--折线图--扇形图)
C#绘制统计图(柱状图,折线图,扇形图)统计图形种类繁多,有柱状图,折线图,扇形图等等,而统计图形的绘制方法也有很多,有Flash制作的统计图形,有水晶报表生成统计图形,有专门制图软件制作,也有编程语言自己制作的;这里我们用就C#制作三款最经典的统计图:柱状图,折线图和扇形图;既然是统计,当然需要数据,这里演示的数据存于SqlServer2000中,三款统计图形都是动态生成.其中柱状图我会附上制作步骤,其他两款统计图直接附源码.说明:需求不一样,统计图形绘制后的显示效果也不一样,比如这里柱状图的主要需求是为了比较每一期报名人数与通过人数的差,因此会把两根柱子放在一起会使比较结果一目了然.因此大家可以根据需要灵活绘制.一.柱状图的绘制.绘制步骤如下:1.定义绘图用到的类.intheight=500,width=700;Bitmapimage=newBitmap(width,height);Graphicsg=Graphics.FromImage(image);Penmypen=newPen(brush,1);2.绘制图框.g.FillRectangle(Brushes.WhiteSmoke,0,0,width,height);3.绘制横向坐标线for(inti=0;i14;i++){g.DrawLine(mypen,x,80,x,340);x=x+40;}4.绘制纵向坐标线for(inti=0;i9;i++){g.DrawLine(mypen,60,y,620,y);y=y+26;}5.绘制横坐标值String[]n={第一期,第二期,第三期,第四期,全年};for(inti=0;i7;i++){g.DrawString(n[i].ToString(),font,Brushes.Blue,x,348);x=x+78;}6.绘制纵坐标值String[]m={250,225,200,175,150,125,100“};for(inti=0;i10;i++){g.DrawString(m[i].ToString(),font,Brushes.Blue,25,y);y=y+26;}7.定义数组存储数据库中统计的数据int[]Count1=newint[7];//存储从数据库读取的报名人数int[]Count2=newint[7];//存储从数据库读取的通过人数8.从数据库中读取报名人数与通过人数SqlConnectionCon=newSqlConnection(Server=(Local);Database=committeeTraining;);Con.Open();stringcmdtxt2=SELECT*FROM##CountwhereCompany='+****+';SqlDataAdapterda=newSqlDataAdapter(cmdtxt2,Con);DataSetds=newDataSet();da.Fill(ds);9.将读取的数据存储到数组中Count1[0]=Convert.ToInt32(ds.Tables[0].Rows[0][“count1”].ToString());Count1[1]=Convert.ToInt32(ds.Tables[0].Rows[0][“count3”].ToString());Count2[0]=Convert.ToInt32(ds.Tables[0].Rows[0][“count2”].ToString());Count2[1]=Convert.ToInt32(ds.Tables[0].Rows[0][count4].ToString());10.定义画笔和画刷准备绘图x=80;Fontfont2=newSystem.Drawing.Font(Arial,10,FontStyle.Bold);SolidBrushmybrush=newSolidBrush(Color.Red);SolidBrushmybrush2=newSolidBrush(Color.Green);11.根据数组中的值绘制柱状图(1)第一期报名人数g.FillRectangle(mybrush,x,340-Count1[0],20,Count1[0]);g.DrawString(Count1[0].ToString(),font2,Brushes.Red,x,340-Count1[0]-15);(2)第一期通过人数x=x+20;g.FillRectangle(mybrush2,x,340-Count2[0],20,Count2[0]);g.DrawString(Count2[0].ToString(),font2,Brushes.Green,x,340-Count2[0]-15);12.将图形输出到页面.System.IO.MemoryStreamms=newSystem.IO.MemoryStream();image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);Response.ClearContent();Response.ContentType=image/Jpeg;Response.BinaryWrite(ms.ToArray());最终柱状图的效果图:柱状图的完整代码:privatevoidCreateImage(){intheight=500,width=700;Bitmapimage=newBitmap(width,height);//创建Graphics类对象Graphicsg=Graphics.FromImage(image);try{//清空图片背景色g.Clear(Color.White);Fontfont=newFont(Arial,10,FontStyle.Regular);Fontfont1=newFont(宋体,20,FontStyle.Bold);LinearGradientBrushbrush=newLinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.BlueViolet,1.2f,true);g.FillRectangle(Brushes.WhiteSmoke,0,0,width,height);//Brushbrush1=newSolidBrush(Color.Blue);g.DrawString(this.ddlTaget.SelectedItem.Text++this.ddlYear.SelectedItem.Text+成绩统计柱状图,font1,brush,newPointF(70,30));//画图片的边框线g.DrawRectangle(newPen(Color.Blue),0,0,image.Width-1,image.Height-1);Penmypen=newPen(brush,1);//绘制线条//绘制横向线条intx=100;for(inti=0;i14;i++){g.DrawLine(mypen,x,80,x,340);x=x+40;}Penmypen1=newPen(Color.Blue,2);x=60;g.DrawLine(mypen1,x,80,x,340);//绘制纵向线条inty=106;for(inti=0;i9;i++){g.DrawLine(mypen,60,y,620,y);y=y+26;}g.DrawLine(mypen1,60,y,620,y);//x轴String[]n={第一期,第二期,第三期,第四期,上半年,下半年,全年统计};x=78;for(inti=0;i7;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(inti=0;i10;i++){g.DrawString(m[i].ToString(),font,Brushes.Blue,25,y);//设置文字内容及输出位置y=y+26;}int[]Count1=newint[7];int[]Count2=newint[7];SqlConnectionCon=newSqlConnection(Server=(Local);Database=committeeTraining;Uid=sa;Pwd=**);Con.Open();stringcmdtxt2=SELECT*FROM##CountwhereCompany='+this.ddlTaget.SelectedItem.Text.Trim()+';SqlDataAdapterda=newSqlDataAdapter(cmdtxt2,Con);DataSetds=newDataSet();da.Fill(ds);Count1[0]=Convert.ToInt32(ds.Tables[0].Rows[0][count1].ToString());Count1[1]=Convert.ToInt32(ds.Tables[0].Rows[0][count3].ToString());Count1[2]=Convert.ToInt32(ds.Tables[0].Rows[0][count5].ToString());Count1[3]=Convert.ToInt32(ds.Tables[0].Rows[0][count7].ToString());Count1[4]=Count1[0]+Count1[1];Count1[5]=Count1[2]+Count1[3];Count1[6]=Convert.ToInt32(ds.Tables[0].Rows[0][count9].ToString());Count2[0]=Convert.ToInt32(ds.Tables[0].Rows[0][count2].ToString());Count2[1]=Convert.ToInt32(ds.Tables[0].Rows[0][count4].ToString());Count2[2]=Convert.ToInt32(ds.Tables[0].Rows[0][count6].ToString());Count2[3]=Convert.ToInt32(ds.Tables[0].Rows[0][count8].ToString());Count2[4]=Count2[0]+Count2[1];Count2[5]=Count2[2]+Count2[3];Count2[6]=Convert.ToInt32(ds.Tables[0].Rows[0][count10].ToString());//绘制柱状图.x=80;Fontfont2=newSystem.Drawing.Font(Arial,10,FontStyle.Bold);SolidBrushmybrush=newSolidBrush(Color.Red);SolidBrushmybrush2=newSolidBrush(Color.Green);//第一期g.FillRectangle(mybrush,x,340-Count1[0],20,Count1[0]);g.DrawString(Count1[0].ToString(),font2,Brushes.Red,x,340-Count1[0]-15);x=x+20;g.FillRectangle(mybrush2,x,340-Count2[0],20,Count2[0]);g.DrawString(Count2[0].ToString(),font2,Brushes.Green,x,340-Count2[0]-1
本文标题:C#-绘制统计图(柱状图--折线图--扇形图)
链接地址:https://www.777doc.com/doc-4877865 .html