复合式统计图绘制方法(6)

复合式统计图绘制方法(6)
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图环形图绘制较难。
在统计图的应用方面,有时候有两个关联的统计学的样本值要用统计图来表达,一张统计图不能表达清楚,就要二张图来表达。由此就产生了复合式的统计图,它能将两个需要表达的统计概念统一在一张图表上阐述清楚。

在网络科技发展进步的当下,原来一些传统的统计图表都有了进一步的创新。以前企业的PPT都依赖微软的各应用软件来制作图表,现时企业的PPT展示的图表应用不再满足于Excle,Word的图表绘制方法,进而使用一些第三方应用软件来制作新颖漂亮的图表。由此而有许多图表制作的应用软件面市。这些图表很吸引眼球,我对此也很感兴趣,故试着写了一些各种式样图表的绘制方法,供有同好的同行参考和评论。

新样式的统计图有复合式,堆叠式,展开式等等,不一而足。在美工艺术方面有许多独到新颖的样式,给人一个赏心悦目的感受。
今在此提供一种复合式统计图的绘制方法供参考。

本方法采用C语言的最基本功能:
( 1) 绘图功能画线,画圆,画长方形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。

//在统计图表的样本值的计算方面,样本值的量的表现是一个方面,重点是量的对比,这是体现统计图目的的主要意义。其中最基本的是完成与计划的对比。

//介绍一个基本的计算方法:
//单个商品按类相加=单个商品销售总量
//分组6个,各商品总量相加=商品销售总量
//分析:完成和计划指标比
//商品*单价=销售额
//6个商品类销售额相加=商品销售总额
//单个销售额/销售总额=单个商品类占比
//占比分析:单个商品类销售总额/商品销售总额


下面是绘制复合式统计图的代码:
//变量: 可设置成全局变量或私有变量
Canvas cs ;     //画布,绘制图表载体
float pi=3.1415926535 ;
float a ;            //三角函数 sin (a), cos (a), 
float r ;             //圆半径 radius
int i, j, n ;
float x0,y0,x1,y1,x2,y2 ;  //作图
float dx1,dy1,dx,dy ;             //中心坐标
string ss, ss1, ss2,ss3 ;         //打印文字
 int p[6] ;        //set data   or  input  data
 double pn ;   //显示数据,计算
  int cr, cg, cb ;     //设置颜色 setColor (a,r,g,b) 
 int  p1[16],  p2[16], p3[16] ;
 int ppn ;   //计算
 int tb ;      //set tab
 int k0, k1 ;    //圆720线 起终点
 double sum1, sum2, sum3, sum ;  //统计计算
 double sum4, sum5, sum6 ;

e433a433c9a8411b8725532b13fa3e64.png 

//*************************  
compound6 (){  //复合式统计图 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,240);
      cs.DrawRect (20,20,700,580);   //back 
      cs.SetFillMode (0);//0不填色,1填色
         cs.SetColor (255,0,0,250);
      cs.DrawRect (20,20,700,580);   //back 
      cs.DrawRect (26,25,694,575);   //back 
  
  //复合式统计图样例:
  //图例 (上下双拼半圆环图)
     cs.SetFillMode (1);//0不填色,1填色
            dx=360;  dy=270 ;   //center
         cs.SetColor (255,250,200,230);
     cs.DrawRect (50,80,150,268);   //样本值标底
     cs.DrawRect (590,245,675,530);   //样本值标底
     cs.SetColor(255,250,220,230);
     cs.DrawCircle(dx,dy,200);    //center 图案底色
     cs.DrawCircle(dx,dy+10,200); //center 图案底色
          cs.SetStrokeWidth(1);    //线
          cs.SetTextStyle (0);  //1 粗体字
          cs.SetTextSize (24);
          cs.SetColor(255,0,0,250);
        cs.DrawText ("Group ",65,105);
        cs.DrawText ("Goods ",595,270);
           cs.SetTextSize (20);
        cs.DrawText (" A",55,135);
        cs.DrawText (" B",55,175);
        cs.DrawText (" C",55,215);
        cs.DrawText (" D",55,255);
  
 //先绘制部门半圆环图,
 //图例样本值:input data   
 //data : 商品类销售量 p(n)_8,部门销售额 p1(n)_4 
 
     p1[1]=6400; p1[2]=3500;
     p1[3]=4500; p1[4]=5600;  //部门 20000
        k[0]=720;     //k=180,12点钟方向为0位
                             //k=0, 3点钟方向为0位
        k[1]=k[0]+p1[1]*72/2000 ;   //样本值合计20000
        k[2]=k[1]+p1[2]*72/2000 ;   //转换成整圆720线
        k[3]=k[2]+p1[3]*72/2000 ;
        k[4]=k[3]+p1[4]*72/2000 ;

          cs.SetColor(255,250,0,0);
          cs.DrawLine (50,dy,dx+200,dy);
            r=190 ;
    for (n=1; n<=4 ; n++){   //data=4
       for (i= k[n-1]; i<=k[n]; i++){  // +2 尾线闭合
             a=pi/360*i/2 ;   // a/2 绘出的是半圆
       if (n==1) cs.SetColor(255,0,250,250);
       if (n==2) cs.SetColor(255,0,220,250);
       if (n==3) cs.SetColor(255,0,170,250);
       if (n==4) cs.SetColor(255,0,120,250);
            x0=(float)(r*cos (a))+dx ;     //r=radius
            y0=(float)(r*sin (a))+dy ;     //顺时针
     cs.DrawLine (dx,dy, x0,y0);      }
             //逐线绘出加色标
     cs.DrawRect (75,n*40+72 ,140,n*40+102); 
           pn=p1[n]*10 ;     //保留1位小数
           pn=pn/2000 ; 
           ss1=doubleToString (pn)+"%" ;
           ss2=intToString (p1[n]) ;
       cs.SetColor(255,250,250,0);
        cs.DrawText(ss2, 85,n*40+93);   //色标
     cs.SetColor(255,250,0,250);  //图上标p1(n)
            ma=pi/360*((k[n-1]+k[n])/2)/2 ;
            x1=(float)((r-45)*cos (ma))+dx ;     
            y1=(float)((r-45)*sin (ma))+dy ;
          cs.DrawText (ss1,x1-27,y1+10);     //标字
                 cs.Update ();        } //show 饼图

//再绘制商品大类销售额下半圆环
    p[1]=800;  p[2]=950;  p[3]=1200 ;  p[4]=1800;  
    p[5]=1500;  p[6]=1000;  p[7]=1150;  p[8]=1600 ;
        k[0]=0;     //k=180,12点钟方向为0位
                         //k=0, 3点钟方向为0位
        k[1]=k[0]+p[1]*72/1000 ;   //样本值合计10000
        k[2]=k[1]+p[2]*72/1000 ;   //转换成整圆720线
        k[3]=k[2]+p[3]*72/1000 ;
        k[4]=k[3]+p[4]*72/1000 ;
        k[5]=k[4]+p[5]*72/1000 ;
        k[6]=k[5]+p[6]*72/1000 ;
        k[7]=k[6]+p[7]*72/1000 ;
        k[8]=k[7]+p[8]*72/1000 ;
              dx=360 ;  dy=280 ;
          cs.SetColor(255,250,0,0);
          cs.DrawLine (dx-200,dy-1,675,dy-1);
     for (n=1; n<=8 ; n++){   //data=4
       for (i= k[n-1]; i<=k[n]+2; i++){  // +2 尾线闭合
             a=pi/360*i/2 ;   // a/2 绘出的是半圆
        cr=250-n*18 ;  cg=200-n*15 ;  cb=250 ;
        cs.SetColor(255,cr,cg,cb);   //紫色渐变
             x0=(float)(r*cos (a))+dx ;     //r=radius
             y0=(float)(r*sin (a))+dy ;     //顺时针
         cs.DrawLine (dx,dy, x0,y0);    //绘制饼图线
     cs.DrawRect (600,n*30+250 ,665,n*30+275); 
          cs.SetColor(255,250,230,240);
      cs.DrawCircle(dx,dy,80);    //可加空圆芯
                      }    //动画显示:逐线绘出加色标
           pn=p[n]*10 ;  //保留1位小数,标样本值和 %
           pn=pn/1000 ; 
           ss1=doubleToString (pn)+"%" ;
           ss2=intToString (p[n]) ;
       cs.SetColor(255,250,250,0);
           tb=0;
           if (p[n]<1000) tb=7 ;  //tab
       cs.DrawText(ss2, 610+tb,n*30+270);   //色标
     cs.SetColor(255,250,250,0);  //图上标p1(n)
            ma=pi/360*((k[n-1]+k[n])/2)/2 ;
            x1=(float)((r-45)*cos (ma))+dx ;     
            y1=(float)((r-45)*sin (ma))+dy ;
            cs.DrawText (ss1,x1-23,y1+5);     //标字
                 cs.Update ();        } // show 饼图

     for (n=1; n<=7 ; n++){   //绘制色块分隔线
        a=pi/360*k[n]/2 ;   // a/2 绘出的是半圆
            x2=(float)(r*cos (a))+dx ;     //r=radius
            y2=(float)(r*sin (a))+dy ;     //顺时针
          cs.SetColor(255,250,230,240);
          cs.DrawLine (dx,dy, x2,y2);    }

        cs.SetTextSize (80);
        cs.SetColor(255,0,0,250);      
        cs.DrawText (" 📛",293, 307) ;
  
//题标:  艺术立体字制作
        cs.SetFillMode (1);//0不填色,1填色
        cs.SetTextStyle (1);
        cs.SetStrokeWidth(1);
        cs.SetTextSize (28);
        cs.SetColor(255,0,0,250);      
      cs.DrawText ("Art Graphics 📊",480,60) ;
      cs.SetTextSize (46);
         ss="复合统计图:双半圆环图" ;
      cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,114,544);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,110,540);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,110,540);    //框线
       cs.Update ();
}//compound6 ()

 


//**** END *****************

相关推荐

  1. 使用QT绘制复合纹理

    2024-03-11 14:34:01       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 14:34:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 14:34:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 14:34:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 14:34:01       20 阅读

热门阅读

  1. Hive招聘数据分析

    2024-03-11 14:34:01       25 阅读
  2. elementUI日期选择器禁用功能

    2024-03-11 14:34:01       16 阅读
  3. 怎么升级python 的 chromedriver 版本?

    2024-03-11 14:34:01       18 阅读
  4. 笔试面试(持续更新)

    2024-03-11 14:34:01       21 阅读
  5. 某些之前的漏洞的遗忘的记录

    2024-03-11 14:34:01       21 阅读
  6. leetcode热题HOT leetcode131. 分割回文串

    2024-03-11 14:34:01       22 阅读
  7. Linux的Vim/vi中注释详细教程

    2024-03-11 14:34:01       23 阅读
  8. Linux的Vim/vi中注释详细教程

    2024-03-11 14:34:01       22 阅读
  9. WebGL之灯光使用解析

    2024-03-11 14:34:01       19 阅读
  10. Django——模板

    2024-03-11 14:34:01       22 阅读