C#绘制统计图柱状图折线图扇形图.docx

上传人:b****5 文档编号:11639706 上传时间:2023-03-29 格式:DOCX 页数:20 大小:557.36KB
下载 相关 举报
C#绘制统计图柱状图折线图扇形图.docx_第1页
第1页 / 共20页
C#绘制统计图柱状图折线图扇形图.docx_第2页
第2页 / 共20页
C#绘制统计图柱状图折线图扇形图.docx_第3页
第3页 / 共20页
C#绘制统计图柱状图折线图扇形图.docx_第4页
第4页 / 共20页
C#绘制统计图柱状图折线图扇形图.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C#绘制统计图柱状图折线图扇形图.docx

《C#绘制统计图柱状图折线图扇形图.docx》由会员分享,可在线阅读,更多相关《C#绘制统计图柱状图折线图扇形图.docx(20页珍藏版)》请在冰豆网上搜索。

C#绘制统计图柱状图折线图扇形图.docx

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;i<14;i++)

{

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

x=x+40;

}

4.绘制纵向坐标线

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

{

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

y=y+26;

}

5.绘制横坐标值

String[]n={"第一期","第二期","第三期","第四期","全年"};

for(inti=0;i<7;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;i<10;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##Count

whereCompany='"+****+"'";

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=new

System.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;i<14;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;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(inti=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(inti=0;i<10;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]-15);

 

//第二期

x=x+60;

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

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

 

x=x+20;

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

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

 

//第三期

x=x+60;

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

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

x=x+20;

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

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

//第四期

x=x+60;

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

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

x=x+20;

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

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

//上半年

x=x+60;

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

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

x=x+20;

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

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

//下半年

x=x+60;

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

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

x=x+20;

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

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

//全年

x=x+60;

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

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

 

x=x+20;

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

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

 

//绘制标识

Fontfont3=newSystem.Drawing.Font("Arial",10,FontStyle.Regular);

g.DrawRectangle(newPen(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.MemoryStreamms=newSystem.IO.MemoryStream();

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

Response.ClearContent();

Response.ContentType="image/Jpeg";

Response.BinaryWrite(ms.ToArray());

}

finally

{

g.Dispose();

image.Dispose();

}

}

二.折线统计图的绘制

效果:

折线图的完整代码:

privatevoidCreateImage()

{

intheight=480,width=700;

Bitmapimage=newBitmap(width,height);

Graphicsg=Graphics.FromImage(image);

try

{

//清空图片背景色

g.Clear(Color.White);

Fontfont=newSystem.Drawing.Font("Arial",9,FontStyle.Regular);

Fontfont1=newSystem.Drawing.Font("宋体",20,FontStyle.Regular);

Fontfont2=newSystem.Drawing.Font("Arial",8,FontStyle.Regular);

LinearGradientBrushbrush=newLinearGradientBrush(

newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.Blue,1.2f,true);

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

Brushbrush1=newSolidBrush(Color.Blue);

Brushbrush2=newSolidBrush(Color.SaddleBrown);

g.DrawString(this.ddlTaget.SelectedItem.Text+""+this.ddlYear.SelectedItem.Text+

"成绩统计折线图",font1,brush1,newPointF(85,30));

//画图片的边框线

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

Penmypen=newPen(brush,1);

Penmypen2=newPen(Color.Red,2);

//绘制线条

//绘制纵向线条

intx=60;

for(inti=0;i<8;i++)

{

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

x=x+80;

}

Penmypen1=newPen(Color.Blue,3);

x=60;

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

//绘制横向线条

inty=106;

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

{

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

y=y+26;

}

//y=106;

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

//x轴

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

x=45;

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

{

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

x=x+77;

}

//y轴

String[]m={"220人","200人","175人","150人","125人","

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1