统计图曲线图绘制方法
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图环形图绘制较难。
曲线图的曲线绘制较难,今提供曲线图的绘制方法供参考。
本方法采用C语言的最基本功能:
( 1) 绘图功能画线,画圆,画长方形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。
下面提供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 ; //显示数据
//*************************
CurveGraph6 (){ //曲线图 6
cs.ClearDraw (0,src); //清屏
clearOutput();
selectStyle () ; //图例样式选项设置
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<=10 ; j++){
for (i=0; i<=7 ; i++){
dx=j*50+100 ;
dy=i*50+50 ;
cs.DrawRect(dx,dy,dx+49,dy+49); } }//grid
cs.SetTextStyle (0);
cs.SetColor(255,0,0,250);
cs.DrawRect (50,450,670,452); //X线
cs.DrawRect (99,48,101,450); //Y线
cs.SetColor(255,250,0,0);
cs.SetTextSize (18);
cs.DrawRect (90,249,670,251); //standard线
cs.DrawText ("0.75", 52 ,109) ;
cs.DrawText ("0.50", 52 ,159) ;
cs.DrawText ("0.25", 52 ,209) ;
cs.DrawText ("0", 65 ,259) ;
cs.DrawText ("-0.25", 50 ,309) ;
cs.DrawText ("-0.50", 50 ,359) ;
cs.DrawText ("-0.75", 50 ,409) ;
cs.SetTextStyle (0); //画标尺
cs.SetTextSize (18);
cs.SetColor(255,50,80,80);
ss=" 0 30 60 90 120 150 " ;
ss1=" 180 210 240 270 300 330" ;
cs.DrawText (ss,90,475) ;
cs.DrawText (ss1,380,475) ; //standard
cs.SetTextSize (24);
cs.DrawText ("Sec >",30, 475) ;
//draw Curve graphics 绘制曲线
//* curve : x1 +5 标尺x轴 0 位, bs*5 步长
//x0 曲线幅宽, + -pn y轴峰谷弧高, y+300 x轴y定位
// pn= 0 -- 200 高,bs=50*2
int bs ; //步长
//p[1]=150; p[2]=80; p[3]=100; p[4]=50; p[5]=140;
cs.SetColor (255,0,120,0);
for (n=1; n<=5; n++){
bs=n*100-100 ;
//pn=p[n] ;
Rn=random ()*90+50 ;
pn=(int) Rn ;
for (i=120;i<240;i++){
a=pi/360*i*6 ; //360 曲线点密度
x0=50;
// pn=170 ;
x1=(float)((x0/pi*a)+bs);
y1=(float)(- pn*sin(a)+250);
cs.DrawCircle(x1,y1,2); } }
cs.Update ();
sleep (300) ;
for (n=1; n<=5; n++){
bs=n*100-100 ;
Rn=random ()*40+40 ;
pn=(int) Rn ;
for (i=120;i<240;i++){
a=pi/360*i*6 ; //360 曲线点密度
x0=50;
x1=(float)((x0/pi*a)+bs);
y1=(float)(- pn*sin(a)+250);
cs.SetColor (255,250,100,160);
cs.DrawCircle(x1,y1,1);
cs.SetColor (255,250,220,150);
cs.DrawLine (x1,y1,x1,250) ; } }
//draw title
cs.SetFillMode (1);//0不填色,1填色
cs.SetTextStyle (1);
cs.SetStrokeWidth(1);
cs.SetTextSize (26);
cs.SetColor (255,0,220,150);
cs.DrawText ("Curve Chart 📊",470,80) ;
cs.SetTextSize (50);
ss="统计图 - 曲线图" ;
cs.SetColor(255,50,120,20); //立体字
cs.DrawText (ss,164,534); //阴影
cs.SetColor(255,0,250,0);
cs.DrawText (ss,160,530); //本字
cs.SetFillMode (0);//0不填色,1填色
cs.SetColor(255,250,150,0);
cs.DrawText (ss,160,530); //框线
cs.Update ();
}//CurveGraph6 ()
CurveGraph7 (){ //曲线图 7:填充区域
cs.ClearDraw (0,src); //清屏
clearOutput();
selectStyle () ; //图例样式选项设置
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<=10 ; j++){
for (i=0; i<=7 ; i++){
dx=j*50+100 ;
dy=i*50+50 ;
cs.DrawRect(dx,dy,dx+49,dy+49); } }//grid
cs.SetTextStyle (0);
cs.SetTextSize (18);
cs.SetColor(255,0,0,250);
cs.DrawRect (50,450,670,452); //X线
cs.DrawRect (99,48,101,450); //Y线
cs.SetColor(255,250,0,0);
cs.DrawRect (90,249,670,251); //standard线
cs.DrawText ("0.75", 52 ,107) ;
cs.DrawText ("0.50", 52 ,157) ;
cs.DrawText ("0.25", 52 ,207) ;
cs.DrawText ("0", 65 ,257) ;
cs.DrawText ("-0.25", 50 ,307) ;
cs.DrawText ("-0.50", 50 ,357) ;
cs.DrawText ("-0.75", 50 ,407) ;
cs.SetTextStyle (1); //画标尺
cs.SetTextSize (18);
cs.SetColor(255,0,0,0);
ss=" 0 30 60 90 120 150 " ;
ss1=" 180 210 240 270 300 330" ;
cs.DrawText (ss,90,475) ;
cs.DrawText (ss1,380,475) ; //standard
cs.SetTextSize (24);
cs.DrawText ("Sec >",30, 475) ;
//draw Curve graphics 绘制曲线
//* curve : x1-bs 标尺x轴 0 位, bs 幅宽
//x0 X轴 0位, + -pn y轴峰谷弧高, y+250 x轴y定位
// pn= 0 -- 200,+ - pn> 正弦余弦。bs=幅宽
int bs ; //步长
cs.SetStrokeWidth(1);
cs.SetColor (255,255,0,0);
for (i=100;i<283;i++){
a=pi/360*i*6 ; //360 完整双曲线,小于为局部段
// x0=240 ; bs=300 ; pn=150 ; //i=100-285 (1)
x0=180 ; bs=200 ; pn=80 ; //i=100-283 (2)
x1=(float)((x0/pi*a)-bs); //bs=50--300
y1=(float)(-pn*sin(a)+250); //dy=250 Y轴center
cs.SetColor (255,255,0,0);
cs.DrawCircle(x1,y1,2);
cs.SetColor (255,0,0,250);
cs.DrawLine (x1,y1,x1,250) ; }
for (n=1; n<=8; n++){ //draw 多条曲线
Rn=random ()*60+100 ;
pn=(int) Rn ;
for (i=100;i<283;i++){
a=pi/360*i*6 ; //360 完整双曲线,小于为局部段
x0=180 ; bs=200 ; //pn=80 ;
x1=(float)((x0/pi*a)-bs); //bs=50--300
y1=(float)(-pn*sin(a)+250); //dy=250 Y轴center
if (n==1||n==5) cs.SetColor (255,200,0,100);
if (n==2||n==6) cs.SetColor (255,250,150,100);
if (n==3||n==7) cs.SetColor (255,0,0,250);
if (n==4||n==8) cs.SetColor (255,250,100,130);
cs.DrawCircle(x1,y1,1.5); } }
//draw title
cs.SetFillMode (1);//0不填色,1填色
cs.SetTextStyle (1);
cs.SetStrokeWidth(1);
cs.SetTextSize (26);
cs.DrawText ("Curve Chart 📊",470,80) ;
cs.SetTextSize (50);
ss="统计图 - 曲线图" ;
cs.SetColor(255,50,120,20); //立体字
cs.DrawText (ss,164,534); //阴影
cs.SetColor(255,0,250,0);
cs.DrawText (ss,160,530); //本字
cs.SetFillMode (0);//0不填色,1填色
cs.SetColor(255,250,150,0);
cs.DrawText (ss,160,530); //框线
cs.Update ();
}//CurveGraph7 ()
//**** END *****************