统计图饼图绘制方法(C语言)

2024-02-15 05:04
文章标签 语言 方法 绘制 统计图

本文主要是介绍统计图饼图绘制方法(C语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

统计图饼图绘制方法(C语言)
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图绘制较难。今值此介绍饼图的绘制方法。
本方法采用C语言的最基本功能:
( 1.) 绘图功能画线,画圆,画长方形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。

d2861b3b1ca445938894fd3e14af837f.png

 

27ce65bb6b254da89617dda905cee19d.png 

85b69aaa4c544b9195144cea79fcc736.png 

fad1e3bc9c5f4a188e565affd894143a.png  

下面是绘制饼图的代码:
//变量: 可设置成全局变量或私有变量
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 ;         //打印文字

//饼图的代码 PieGraph ( ):
PieGraph ( ) {      //绘制饼图和突出显示图块
  int p[6] ;        //set data or get data
  int k[6] ;         //作图数据换算
  double pn ;   //显示百分比数 " 29.16% "
  int setn ;        //突出图块选项
  double ma ;    //图上标文字 " 29.16% "

      cs.ClearDraw (0,src);   //清屏(cls), clear screen
      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.SetTextSize (28);      //题标
          cs.SetColor (255,0,0,250);
      cs.DrawText ("达克科技⚛DUCK",470,60) ;
      cs.SetStrokeWidth(2);
           //图例: 图表底板宽高 720  *600
           dx=360 ; dy=300 ;       //center
      cs.SetColor(255,250,240,240);
      cs.DrawCircle(dx,dy,128);     //图底板圆形
 
      cs.SetTextStyle (0);
      cs.SetTextSize (18);
            r=120 ;      //radius
            setn=1 ;        //突出图块选项
   p[1]=210;  p[2]=165;  p[3]=115;  p[4]=135; p[5]=95;
//预设置数据 p (5) 
//*本图例预设置数据,可另行设计数据输入方法
//为保证图案填充色需增加线条密度,故作图整个
//圆分为 720 线,data p(n) 凑数成720。
//*若其他数据项要按比例换算成总数相加为720的数。
//若数据项和不满 720 图样就变为扇形。
       //输入数据 p(n) 转换成绘图数据值 k(n)
       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
           a=pi/360*i ;   //**  a/2 绘出的是半圆图形
       if (n==1) cs.SetColor(255,0,250,0);
       if (n==2) cs.SetColor(255,240,140,0);
       if (n==3) cs.SetColor(255,250,0,0);
       if (n==4) cs.SetColor(255,140,40,220);
       if (n==5) cs.SetColor(255,0,150,180);
           x0=(float)(r*cos (a))+dx;     //r=radius
           y0=(float)(r*sin (a))+dy;
           cs.DrawLine (dx,dy,x0,y0);  //逐线绘出
           cs.DrawRect (100,n*50,195,30+n*50); //色标

      //** print data as "29.16%"
           s=intToString (p[n]);
           cs.DrawText (s, 60,20+n*50);
           pn=p[n]*10000/720 ;    //扩大100, +"%"
           pn=pn/100 ;      //保留2位小数
           ss1=doubleToString (pn)+"%" ;
           cs.SetColor(255,250,250,250);
           cs.DrawText (ss1,120,20+n*50);
      if (n==1&&setn==1) ss2=ss1 ;
      if (n==2&&setn==2) ss2=ss1 ;
      cs.SetColor(255,0,0,150);    //图上标( n% )
            ma=pi/360*((k[n-1]+k[n])/2) ;
       x1=(float)((r-45)*cos (ma))+dx-30;     
       y1=(float)((r-35)*sin (ma))+dy ;
            cs.DrawText (ss1,x1,y1);

 //*画环图方法: 中心加圆是环图,不加圆是饼图
     //cs.SetColor(255,250,240,240);
     //cs.DrawCircle(dx,dy,50);    //中心加圆是环图      
          cs.Update ();    }   }  //逐线动画显示绘制过程

  //* 演示绘制重点突出的图块,暂设图例1 和 图例2
  //* 展示二种画法 //***
  //*本图例预设置,可另设计图表点击选取或其他选项方法 。
 // 预设 setn=1 ;  0=无,setn1-5 可选。
 //  for (i= k[0] ; i<=k[1] ; i++){      设置通用 k (n) , kstart  to kend 即可
//*此方法可改写为 setn1-setn5 通用方法。
      sleep (500) ;   //延时
     if (setn==1){     
     for (i= k[0] ; i<=k[1] ; i++){ //銷隐图块,圆底色遮罩
           a=pi/360*i ;   
              cs.SetColor (255,250,240,240);  
           x0=(float)(r*cos (a))+dx;     
           y0=(float)(r*sin (a))+dy;
           cs.DrawLine (dx,dy,x0,y0);   }   
           cs.Update ();      //銷隐
     for (i= k[0] ; i<=k[1] ; i++){    //绘出突出图块
           a=pi/360*i ;   
              cs.SetColor (255,0,240,0);  
           x0=(float)(r*cos (a))+dx+8 ;     
           y0=(float)(r*sin (a))+dy-6 ;
           cs.DrawLine (dx+8,dy-6,x0,y0);   //draw out
              cs.SetColor (255,250,250,0);  
              cs.SetTextSize (20);    //show text
           cs.DrawText (ss2,dx+20,dy-42) ;
           cs.Update ();    }    }  //setn=1, 绘出突出色块
  
     if (setn==2){
     for (i= k[1] ; i<=k[2] ; i++){    //銷隐图块
           a=pi/360*i ;   
              cs.SetColor (255,250,240,240);  
           x0=(float)(r*cos (a))+dx;     
           y0=(float)(r*sin (a))+dy;
           cs.DrawLine (dx,dy,x0,y0);   }   
           cs.Update ();      //銷隐

           a=pi/360*((k[1]+k[2])/2) ;  //*** 这是第二种画法
            x1=(float)(10*cos (a))+dx ;     
            y1=(float)(10*sin (a))+dy ;
    for (i= k[1] ; i<=k[2] ; i++){    //绘出突出图块
           a=pi/360*i ;   
              cs.SetColor (255,240,140,0);  
           x0=(float)(r*cos (a))+x1;       //***
           y0=(float)(r*sin (a))+y1;        //***
          cs.DrawLine (x1,y1,x0,y0);   //***  draw out
              cs.SetColor (255,250,250,0);  
              cs.SetTextSize (20);    //show text
           cs.DrawText (ss2,x1+15,y1+60) ;   //***
           cs.Update ();    }  }    //setn=2, 绘出突出色块

  //绘制立体字
       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,200,250);
           cs.DrawText (ss,150,520);    //本字
       cs.SetFillMode (0);   //0不填色,1填色
       cs.SetColor(255,250,0,0);
           cs.DrawText (ss,150,520);    //框线
       cs.Update ();      //显示
}//PieGraph ()

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

这篇关于统计图饼图绘制方法(C语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/710479

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶