当前位置: 首页 > news >正文

统计图饼图绘制方法(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语言)

统计图饼图绘制方法&#xff08;C语言&#xff09; 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图绘制较难。今值此介绍饼图的绘制方法。 本方法采用C语言的最基本功能&#xff1a; &#xff08; 1.&#xff09…...

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …...

相机图像质量研究(13)常见问题总结:光学结构对成像的影响--鬼影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…...

掘根宝典之C++包含对象的类,私有继承,保护继承,三大继承方式总结

包含对象成员的类 包含&#xff0c;组合和层次化&#xff1a;一个类里面的类成员之一是个类对象 我们来看个例子 #include<iostream> using namespace std; class AA { private:int a_; public:AA(int a):a_(a){}void A(){cout << a_ << endl;} }; class …...

第六篇:MySQL图形化管理工具

经过前五篇的学习&#xff0c;对于数据库这门技术的理解&#xff0c;我们已经在心中建立了一个城堡大致的雏形&#xff0c;通过命令行窗口&#xff08;cmd&#xff09;快速上手了【SQL语法-DDL-数据定义语言】等相关命令 道阻且长&#xff0c;数据库技术这一宝藏中还有数不清的…...

计算机网络——12DNS

DNS DNS的必要性 IP地址标识主机、路由器但IP地址不好记忆&#xff0c;不便于人类用使用&#xff08;没有意义&#xff09;人类一般倾向于使用一些有意义的字符串来标识Internet上的设备存在着“字符串”——IP地址的转换的必要性人类用户提供要访问机器的“字符串”名称由DN…...

vue3-应用规模化-工具链

工具链 项目脚手架 Vite Vite 是一个轻量级的、速度极快的构建工具&#xff0c;对 Vue SFC 提供第一优先级支持。作者是尤雨溪&#xff0c;同时也是 Vue 的作者&#xff01; 要使用 Vite 来创建一个 Vue 项目&#xff0c;非常简单&#xff1a; &#xff08;推荐&#xff09…...

EasyExcel动态列导出

测试代码地址&#xff1a;https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/easyexcel/dynamiccolumn 官方文档&#xff1a;https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 一、实现方式 1、根据需要导出的列…...

JAVA面试题11

什么是Java的访问修饰符&#xff0c;并列出它们的作用。 Java的访问修饰符包括public、private、protected和默认。它们的作用如下&#xff1a; public: 可以被任何其他类访问。 private: 只能被所在类访问&#xff0c;其他类无法访问。 protected: 可以被所在类和同一个包中的…...

工业数据采集的时间不确定性及PLC-Recorder的通道偏移功能

目录 一、缘起 二、效果展示 三、设置方法 四、小结 一、缘起 大家都知道采集软件首先要尽可能还原数据原来的状态&#xff0c;给用户提供一个可以信赖的参考。但是&#xff0c;数据采集又有很多随机因素&#xff1a;Windows是一个周期不严格的系统、以太网通讯有时间波动、…...

十五、Object 类

文章目录 Object 类6.1 public Object()6.2 toString方法6.3 hashCode和equals(Object)6.4 getClass方法6.5 clone方法6.6 finalize方法 Object 类 本文为书籍《Java编程的逻辑》1和《剑指Java&#xff1a;核心原理与应用实践》2阅读笔记 java.lang.Object类是类层次结构的根…...

计算机网络——06分组延时、丢失和吞吐量

分组延时、丢失和吞吐量 分组丢失和延时是怎样发生的 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排到队头、被传输 延时原因&#xff1a; 当当前链路有别的分组进行传输&#xff0c;分组没有到达队首&#xff0c;就会进行排队&#xff0c;从…...

[C#] 如何调用Python脚本程序

为什么需要C#调用python&#xff1f; 有以下几个原因需要C#调用Python&#xff1a; Python拥有丰富的生态系统&#xff1a;Python有很多强大的第三方库和工具&#xff0c;可以用于数据科学、机器学习、自然语言处理等领域。通过C#调用Python&#xff0c;可以利用Python的生态系…...

AlmaLinux更换鼠标样式为Windows样式

文章目录 前言先看看条件与依赖第一步&#xff1a;测试最终效果第二步&#xff1a;使用CursorXP修改鼠标样式CurosrXP安装CursorXP使用 第三步&#xff1a;Linux端环境搭建与命令执行UbuntuFedora其他系统均失败 第四步&#xff1a;应用主题 前言 只不过是突发奇想&#xff0c…...

BUGKU-WEB 留言板

题目描述 题目无需登录后台&#xff01;需要xss平台接收flag&#xff0c; http协议需要http协议的xss平台打开场景后界面如下&#xff1a; 解题思路 看到此类的题目&#xff0c;应该和存储型xss有关&#xff0c;也就是将恶意代码保存到服务器端即然在服务器端&#xff0c;那就…...

Linux之动静态库

今天我们来讲动静态库&#xff01; 首先我们来粗粒度的划分一下动态库和静态库。 动态库就是只有一份库文件&#xff0c;所有想用该库的文件与改库文件建立链接&#xff0c;然后使用。这样可以提高代码复用率&#xff0c;避免重复拷贝产生没必要的内存消耗。 静态库&#xf…...

手机常亮屏不自动灭屏

一. 基础知识介绍 1. WakeLock&#xff08;休眠锁&#xff09; WakeLock用于保持设备的唤醒状态&#xff0c;有些情况下&#xff0c;即时用户不操作App&#xff0c;我们也需要保持屏幕处于唤醒状态&#xff0c;以保证用户体验&#xff0c;比如视频类APP和计步类APP&#xff0c;…...

JVM(1)基础篇

1 初始JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。 使用…...

相机图像质量研究(12)常见问题总结:光学结构对成像的影响--炫光

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...