使用C语言绘制柱形图的示例代码
更新时间:2024年02月19日 08:44:31 作者:老花眼猫
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图,这篇文章主要为大家介绍了C语言中绘制条形图和柱形图的方法,需要的可以参考下
统计图柱形图绘制方法
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图环形图绘制较难。
今提供条形图和柱形图的绘制方法,附加环形图和艺术环图的绘制方法供参考。
本方法采用C语言的最基本功能:
( 1) 绘图功能画线,画圆,画长方形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。
下面是绘制柱形图、条形图的代码:
//变量: 可设置成全局变量或私有变量 Canvas cs ; //画布,绘制图表载体 float pi=3.1415926535 ; float a ; //三角函数 sin (a), cos (a), float r ; //圆半径 radius int i, j, n ; float x0,y0,x1,y1 ; //作图坐标 float dx,dy ; //中心坐标 string ss, ss1, ss2 ; //打印文字 int p[6] ; //set data or input data double pn ; //显示数据
条形图
BarChart4 (){ //条形图 cs.ClearDraw (0,src); //清屏 clearOutput(); cs.SetFillMode (1);//0不填色,1填色 cs.SetColor (255,250,250,250); cs.DrawRect (0,4,720,600); //back board cs.SetColor (255,140,140,140); cs.DrawRect (24,24,706,586); //back cs.SetColor (255,250,250,250); cs.DrawRect (20,20,700,580); //back cs.SetFillMode (0);//0不填色,1填色 cs.SetColor (255,0,0,240); cs.DrawRect (20,20,700,580); //框线 cs.DrawRect (24,24,696,576); //框线 cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(1); for (j=0; j<=9 ; j++){ //draw grid for (i=0; i<=5 ; i++){ dx=j*50+150 ; dy=i*50+100 ; cs.SetColor(255,220,220,220); cs.DrawRect (dx,dy,dx+49,dy+49); } } //grid for (i=0; i<=10 ; i++){ dx=i*50+150 ; cs.SetColor(255,250,0,0); cs.DrawRect (dx-3,403,dx,409); } //标线 cs.SetColor(255,250,0,0); cs.DrawRect (50,400,670,403); //X线 cs.DrawRect (147,90,150,400); //Y线 cs.SetTextStyle (0); //画标尺 cs.SetTextSize (18); ss=" 0 25 50 75 100 125" ; ss1=" 150 175 200 225 250" ; cs.DrawText (ss,140,425) ; cs.DrawText (ss1,430,425) ; //standard cs.SetTextSize (20); cs.DrawText ("年份 量比",55,390) ; cs.SetTextSize (24); cs.DrawText ("Bar Chart 📊",545,60) ; cs.DrawText ("计划 完成 ", 120,70) ; cs.SetColor(255,250,200,100); cs.DrawRect (178,48,222,72) ; cs.SetColor(255,0,190,190); cs.DrawRect (180,50,220,70) ; cs.SetColor(255,250,0,0) ; cs.DrawCircle (100,60,9) ; cs.DrawRect (80,58,100,62) ; //依数据绘出条形图 int yy ; //打印年份 p[1]=150; p[2]=170; p[3]=165; p[4]=125; p[5]=210; cs.SetTextSize (22); for (n=1; n<=5 ; n++){ //draw Bar Chart cs.SetFillMode (1);//0不填色,1填色 cs.SetColor(255,0,190,190); dx=150 ; dy=n*50+100 ; m=p[n]*2; cs.DrawRect (dx,dy-12,dx+m,dy+12) ; ss=intToString (p[n]) ; cs.DrawText (ss,dx+m-35,dy-14) ; //p(n) yy=2018+n ; ss1=intToString (yy) ; cs.SetColor(255,0,100,0); cs.DrawText (ss1, 85,dy+7) ; //SD year cs.SetColor(255,250,20,100); cs.SetFillMode (0);//0不填色,1填色 cs.DrawRect (dx,dy-12,dx+m,dy+12) ; } //绘出标线: 计划 p[1]=140; p[2]=150; p[3]=160; p[4]=170; p[5]=180; for (n=1; n<=5 ; n++){ //draw Line Chart cs.SetColor(255,250,0,0); //折线 cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(2); dx=150 ; dy=n*50+100 ; m=p[n]*2 ; cs.DrawCircle (dx+m,dy,9) ; cs.DrawRect (dx+m,dy-2,150,dy+2) ; ss1=intToString (p[n]) ; cs.DrawText (ss1,dx+m+10, dy+7) ; }//data //draw title 统计图题标 cs.SetFillMode (1);//0不填色,1填色 cs.SetTextSize (50); cs.SetTextStyle (1); cs.SetStrokeWidth(1); ss="统计图 - 条形图" ; cs.SetColor(255,50,120,20); //立体字 cs.DrawText (ss,154,524); //阴影 cs.SetColor(255,0,250,0); cs.DrawText (ss,150,520); //本字 cs.SetFillMode (0);//0不填色,1填色 cs.SetColor(255,250,150,0); cs.DrawText (ss,150,520); //框线 cs.Update (); }//barChart4 ()
柱状图
BarChart5 ( ){ // 柱状图绘制方法 int yy ; //打印年份 cs.ClearDraw (0,src); //清屏 clearOutput(); cs.SetFillMode (1);//0不填色,1填色 cs.SetColor (255,250,250,250); cs.DrawRect (0,4,720,600); //back board cs.SetColor (255,140,140,140); cs.DrawRect (24,24,706,586); //back cs.SetColor (255,250,250,250); cs.DrawRect (20,20,700,580); //back cs.SetFillMode (0);//0不填色,1填色 cs.SetColor (255,0,0,240); cs.DrawRect (20,20,700,580); //框线 cs.DrawRect (24,24,696,576); //框线 cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(1); // cs.SetColor(255,220,220,220); for (j=0; j<=9 ; j++){ for (i=0; i<=5 ; i++){ dx=j*50+150 ; dy=i*50+100 ; cs.SetColor(255,220,0,220); cs.DrawRect(138,dy-1,147,dy+1); cs.SetColor(255,220,220,220); cs.DrawRect(dx,dy,dx+49,dy+49); } }//grid cs.SetColor(255,250,0,0); cs.DrawRect (60,400,670,403); //X线 cs.DrawRect (147,90,150,400); //Y线 cs.SetTextStyle (0); //画标尺 cs.SetTextSize (20); cs.DrawText (" 50",93,358) ; cs.DrawText ("100",90,308) ; cs.DrawText ("150",90,258) ; cs.DrawText ("200",90,208) ; cs.DrawText ("250",90,158) ; cs.DrawText ("300",90,108) ; cs.SetTextSize (24); cs.DrawText ("量比",85,396) ; cs.SetTextSize (24); cs.SetColor(255,0,60,0); cs.DrawText ("年份 >",85,428) ; cs.DrawText ("Bar Chart 📊",510,70) ; cs.DrawText ("计划 完成 ", 120,70) ; cs.SetColor(255,250,200,100); cs.DrawRect (178,48,222,72) ; cs.SetColor(255,0,120,0); cs.DrawRect (180,50,220,70) ; cs.SetColor(255,250,0,0) ; cs.DrawCircle (100,60,9) ; cs.DrawRect (80,58,100,62) ; //依数据绘出条形图 p[0]=0 ; x2=150 ; y2=300 ; p[1]=150; p[2]=250; p[3]=290; p[4]=265; p[5]=185; for (n=1; n<=5 ; n++){ //draw Bar Chart cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(2); dx=n*100+100 ; dy=400 ; m=p[n] ; cs.SetColor(255,0,120,0); cs.DrawRect (dx-20,400-m,dx+20,dy) ; //bar cs.SetTextSize (20); yy=2018+n ; ss1=intToString (yy) ; cs.DrawText (ss1,dx-22,dy+25) ; //year x3=n*100+100 ; //完成折线 y3=400-p[n] ; cs.DrawCircle (x3,y3, 7) ; //完成折线 cs.DrawLine (x3,y3, x2,y2) ; //完成折线 x2=x3 ; y2=y3 ; cs.SetTextSize (18); cs.SetColor(255,250,230,0); ss=intToString (p[n]) ; cs.DrawText (ss,dx-15,dy-m+20) ; //data cs.SetColor(255,250,200,100); //框线 cs.SetFillMode (0);//0不填色,1填色 cs.DrawRect (dx-20,400-m,dx+20,dy) ; } //绘出折线图 计划 p[1]=160; p[2]=180; p[3]=200; p[4]=220; p[5]=240; x0=150 ; y0=250 ; //起点坐标值 for (n=1; n<=5 ; n++){ //draw Line Chart cs.SetColor(255,250,0,0); //折线 cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(2); dx=n*100+100 ; dy=400 ; m=p[n] ; cs.DrawCircle (dx,dy-m,9) ; cs.DrawLine (dx,dy-m,dx,400) ; ss=intToString (p[n]) ; cs.DrawText (ss,dx+10,dy-m+6) ; //data x1=n*100+100 ; //计划折线 y1=400-p[n] ; cs.DrawLine (x0,y0, x1,y1) ; //计划折线 x0=x1 ; y0=y1 ; //值转换 } //draw title 统计图题标 cs.SetFillMode (1);//0不填色,1填色 cs.SetTextSize (50); cs.SetTextStyle (1); cs.SetStrokeWidth(1); ss="统计图 - 柱形图" ; cs.SetColor(255,50,120,20); //立体字 cs.DrawText (ss,164,524); //阴影 cs.SetColor(255,0,250,0); cs.DrawText (ss,160,520); //本字 cs.SetFillMode (0);//0不填色,1填色 cs.SetColor(255,250,150,0); cs.DrawText (ss,160,520); //框线 cs.Update (); }//BarChart5 ()
附加:环形图
//****附加:环形图 (带色块分隔线 )**** PieGraph2 (){ //环形图(带色块分隔线) cs.ClearDraw (0,src); //清屏 clearOutput(); cs.SetFillMode (1);//0不填色,1填色 cs.SetColor (255,250,250,250); cs.DrawRect (0,4,720,600); //back board cs.SetColor (255,140,140,140); cs.DrawRect (24,24,706,586); //back cs.SetColor (255,230,240,250); cs.DrawRect (20,20,700,580); //back cs.SetFillMode (0);//0不填色,1填色 cs.SetColor (255,0,0,240); cs.DrawRect (20,20,700,580); //框线 cs.DrawRect (24,24,696,576); //框线 cs.SetFillMode (1);//0不填色,1填色 cs.SetStrokeWidth(2); cs.SetTextSize (30); //题标 cs.SetColor (255,0,0,250); cs.DrawText ("PieGraph Ⓜ",510,70) ; dx=360 ; dy=300 ; cs.SetColor(255,250,240,240); cs.DrawCircle(dx,dy,135); //center //绘制图表 cs.SetTextStyle (0); cs.SetTextSize (18); r=120; p[0]=-180; p[1]=150; p[2]=170; p[3]=156; p[4]=152; p[5]=92; k[0]=-180; k[1]=k[0]+p[1]; k[2]=k[1]+p[2]; k[3]=k[2]+p[3]; k[4]=k[3]+p[4]; k[5]=k[4]+p[5]; for (n=1; n<=5 ; n++){ //data=5 for (i= k[n-1]; i<=k[n]; i++){ //draw Piegraph if (n==1) cs.SetColor(255,0,250,0); if (n==2) cs.SetColor(255,255,205,0); if (n==3) cs.SetColor(255,250,0,0); if (n==4) cs.SetColor(255,250,50,220); if (n==5) cs.SetColor(255,0,150,220); a=pi/360*((k[n-1]+k[n])/2) ; //这是第二种画法 x1=(float)(5*cos (a))+dx ; y1=(float)(5*sin (a))+dy ; a=pi/360*i ; x0=(float)(r*cos (a))+x1 ; //r=radius y0=(float)(r*sin (a))+y1 ; cs.DrawLine (x1,y1,x0,y0); //draw out cs.DrawRect (100,n*40+20,195,n*40+50); //色标 //** print data as "28.25%" s=intToString (p[n]); cs.DrawText (s, 60,40+n*40); pn=p[n]*10000/720 ; //扩大100 pn=pn/100 ; //保留2位小数 ss1=doubleToString (pn)+"%" ; cs.SetColor(255,250,250,250); cs.DrawText (ss1,120,40+n*40); cs.SetColor(255,0,0,150); //图上标( n% ) ma=pi/360*((k[n-1]+k[n])/2) ; x1=(float)((r-45)*cos (ma))+dx-33; y1=(float)((r-35)*sin (ma))+dy ; cs.DrawText (ss1,x1,y1); //** 中心加圆是环图,不加圆是饼图 cs.SetColor(255,250,240,240); cs.DrawCircle(dx,dy,45); //中心加圆是环图 cs.Update (); } cs.DrawLine (dx,dy,x0,y0); } //色块有分隔线 //打印统计图题标 cs.SetFillMode (1);//0不填色,1填色 cs.SetTextSize (60); cs.SetTextStyle (1); cs.SetStrokeWidth(1); ss="统计图 - 环图" ; cs.SetColor(255,50,120,20); //立体字 cs.DrawText (ss,154,524); //阴影 cs.SetColor(255,0,250,0); cs.DrawText (ss,150,520); //本字 cs.SetFillMode (0);//0不填色,1填色 cs.SetColor(255,250,150,0); cs.DrawText (ss,150,520); //框线 cs.Update (); }//PieGraph2 ()
附加:艺术环图
PieGraph1 (){ //环形图:很有艺术感的图表,也可称C形图 cs.ClearDraw (0,src); //清屏(cls), clear screen clearOutput(); //清除 print 字串 cs.SetFillMode (1);//0不填色,1填色 cs.SetColor (255,250,250,250); cs.DrawRect (0,4,720,600); //画图表底板 cs.SetColor (255,140,140,140); cs.DrawRect (24,24,706,586); //back cs.SetColor (255,230,240,250); cs.DrawRect (20,20,700,580); //back cs.SetFillMode (0); //0不填色,1填色 cs.SetColor (255,0,0,240); cs.DrawRect (20,20,700,580); //框线 cs.DrawRect (24,24,696,576); //框线 cs.SetFillMode (1); //0不填色,1填色 cs.SetTextStyle (1); cs.SetStrokeWidth(2); cs.SetTextSize (30); //题标 cs.SetColor (255,0,0,250); cs.DrawText ("PieGraph Ⓜ",510,70) ; dx=360 ; dy=260 ; //图形中心点 cs.SetColor(255,250,250,250); cs.DrawCircle(dx,dy,185); //center 图案底色 cs.SetColor(255,250,200,200); cs.DrawLine (dx-200,dy,dx+200,dy); //十字线 cs.DrawLine (dx,dy-200,dx,dy+200); //色标 cs.SetTextStyle (1); //粗体字 cs.SetTextSize (22); cs.SetColor(255,0,0,250); cs.DrawText ("Group A",35,98); cs.DrawText ("Group B",35,138); cs.DrawText ("Group C",35,178); setn=1 ; p[1]=87; p[2]=65; p[3]=76; //intput data for (n=1; n<=3 ; n++){ //data=3 r=200-n*43 ; //r=radius pn=p[n]*72/10+180; print "pn= ",pn; for (i=180 ; i<=pn; i++){ //画图案 颜色可自定 a=pi/360*i ; if (n==1) cs.SetColor(255,180,220,250); //设色 if (n==2) cs.SetColor(255,80,140,250); if (n==3) cs.SetColor(255,50,180,250); x0=(float)(r*cos (a))+dx; //r=radius y0=(float)(- r*sin (a))+dy; cs.DrawCircle (152,n*40+50,20); //色标 cs.DrawCircle (140,n*40+50,20); //色标 cs.DrawCircle (x0,y0,20) ; //绘出图案 //** print data as "87%", 加"%" //input data 转换,量和百分比转换,定标500=100% ss1=intToString (p[n])+"%" ; ss2=intToString (p[n]*5) ; cs.SetTextSize (20); cs.DrawText (ss2,dx+25,dy-193+n*43); cs.SetColor(255,250,250,250); cs.DrawText (ss2,130,n*40+56); cs.DrawText (ss1,dx-30,dy-193+n*43); //动画式显示效果:逐点更新绘出 cs.Update (); } } //打印统计图题标 cs.SetFillMode (1); //0不填色,1填色 cs.SetTextSize (60); cs.SetTextStyle (1); cs.SetStrokeWidth(1); ss="统计图 - 环形图" ; cs.SetColor(255,50,120,20); //立体字 cs.DrawText (ss,124,524); //阴影 cs.SetColor(255,0,200,250); cs.DrawText (ss,120,520); //本字 cs.SetFillMode (0); //0不填色,1填色 cs.SetColor(255,250,0,0); cs.DrawText (ss,120,520); //框线 cs.Update (); }//PieGraph1 ()
到此这篇关于使用C语言绘制柱形图的示例代码的文章就介绍到这了,更多相关C语言柱形图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C语言统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)
这篇文章主要介绍了C语言统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入) ,需要的朋友可以参考下2018-03-03C/C++之long int与long long的区别及说明
这篇文章主要介绍了C/C++之long int与long long的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08
最新评论