统计图饼图绘制方法(C语言)
统计图饼图绘制方法(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 ; //打印文字
//饼图的代码 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语言)
统计图饼图绘制方法(C语言) 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图绘制较难。今值此介绍饼图的绘制方法。 本方法采用C语言的最基本功能: ( 1.)…...
洛谷C++简单题小练习day12—寻找最小值小程序
day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai,求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n,表示数字个数。 第二行输入 n 个非负整数,表示 1,2…a1,a2…an,以空格隔开。 …...
相机图像质量研究(13)常见问题总结:光学结构对成像的影响--鬼影
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总
车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…...
掘根宝典之C++包含对象的类,私有继承,保护继承,三大继承方式总结
包含对象成员的类 包含,组合和层次化:一个类里面的类成员之一是个类对象 我们来看个例子 #include<iostream> using namespace std; class AA { private:int a_; public:AA(int a):a_(a){}void A(){cout << a_ << endl;} }; class …...
第六篇:MySQL图形化管理工具
经过前五篇的学习,对于数据库这门技术的理解,我们已经在心中建立了一个城堡大致的雏形,通过命令行窗口(cmd)快速上手了【SQL语法-DDL-数据定义语言】等相关命令 道阻且长,数据库技术这一宝藏中还有数不清的…...
计算机网络——12DNS
DNS DNS的必要性 IP地址标识主机、路由器但IP地址不好记忆,不便于人类用使用(没有意义)人类一般倾向于使用一些有意义的字符串来标识Internet上的设备存在着“字符串”——IP地址的转换的必要性人类用户提供要访问机器的“字符串”名称由DN…...
vue3-应用规模化-工具链
工具链 项目脚手架 Vite Vite 是一个轻量级的、速度极快的构建工具,对 Vue SFC 提供第一优先级支持。作者是尤雨溪,同时也是 Vue 的作者! 要使用 Vite 来创建一个 Vue 项目,非常简单: (推荐)…...
EasyExcel动态列导出
测试代码地址:https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/easyexcel/dynamiccolumn 官方文档:https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 一、实现方式 1、根据需要导出的列…...
JAVA面试题11
什么是Java的访问修饰符,并列出它们的作用。 Java的访问修饰符包括public、private、protected和默认。它们的作用如下: public: 可以被任何其他类访问。 private: 只能被所在类访问,其他类无法访问。 protected: 可以被所在类和同一个包中的…...
工业数据采集的时间不确定性及PLC-Recorder的通道偏移功能
目录 一、缘起 二、效果展示 三、设置方法 四、小结 一、缘起 大家都知道采集软件首先要尽可能还原数据原来的状态,给用户提供一个可以信赖的参考。但是,数据采集又有很多随机因素: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:核心原理与应用实践》2阅读笔记 java.lang.Object类是类层次结构的根…...
计算机网络——06分组延时、丢失和吞吐量
分组延时、丢失和吞吐量 分组丢失和延时是怎样发生的 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排到队头、被传输 延时原因: 当当前链路有别的分组进行传输,分组没有到达队首,就会进行排队,从…...
[C#] 如何调用Python脚本程序
为什么需要C#调用python? 有以下几个原因需要C#调用Python: Python拥有丰富的生态系统:Python有很多强大的第三方库和工具,可以用于数据科学、机器学习、自然语言处理等领域。通过C#调用Python,可以利用Python的生态系…...
AlmaLinux更换鼠标样式为Windows样式
文章目录 前言先看看条件与依赖第一步:测试最终效果第二步:使用CursorXP修改鼠标样式CurosrXP安装CursorXP使用 第三步:Linux端环境搭建与命令执行UbuntuFedora其他系统均失败 第四步:应用主题 前言 只不过是突发奇想,…...
BUGKU-WEB 留言板
题目描述 题目无需登录后台!需要xss平台接收flag, http协议需要http协议的xss平台打开场景后界面如下: 解题思路 看到此类的题目,应该和存储型xss有关,也就是将恶意代码保存到服务器端即然在服务器端,那就…...
Linux之动静态库
今天我们来讲动静态库! 首先我们来粗粒度的划分一下动态库和静态库。 动态库就是只有一份库文件,所有想用该库的文件与改库文件建立链接,然后使用。这样可以提高代码复用率,避免重复拷贝产生没必要的内存消耗。 静态库…...
手机常亮屏不自动灭屏
一. 基础知识介绍 1. WakeLock(休眠锁) WakeLock用于保持设备的唤醒状态,有些情况下,即时用户不操作App,我们也需要保持屏幕处于唤醒状态,以保证用户体验,比如视频类APP和计步类APP,…...
JVM(1)基础篇
1 初始JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 Java源代码执行流程如下: 分为三个步骤: 编写Java源代码文件。 使用…...
相机图像质量研究(12)常见问题总结:光学结构对成像的影响--炫光
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B
家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B 1. 为什么选择树莓派OpenClaw组合 去年冬天,我在整理家庭实验室设备时发现一个闲置的树莓派4B。这台信用卡大小的电脑曾经用来跑Home Assistant控制智能家居,但后来换了NUC主机就被束之高阁…...
YOLOv8自定义检测头踩坑记:手把手教你修复‘NotImplementedError: new_detect task‘错误
YOLOv8自定义检测头实战:从报错到修复的深度解析 当你在YOLOv8框架中尝试添加一个名为new_detect的自定义检测头时,突然遇到NotImplementedError: new_detect task错误,这可能会让你感到困惑。本文将带你深入理解YOLOv8的任务调度机制&#x…...
Windows下Go-FastDFS对象存储系统:从零搭建到可视化管理的完整指南
1. Go-FastDFS简介与核心优势 Go-FastDFS是一个基于HTTP协议的轻量级分布式文件存储系统,特别适合中小型项目快速搭建文件存储服务。我第一次接触这个系统是在2019年,当时需要一个简单易用的文件存储方案来支撑公司内部的文件共享需求。经过对比多个方案…...
MacBook Intel芯片用户看过来:保姆级Anaconda安装与国内镜像源配置全攻略
MacBook Intel芯片用户看过来:保姆级Anaconda安装与国内镜像源配置全攻略 作为一名长期使用MacBook进行Python开发的工程师,我深知环境配置对于初学者来说可能是个不小的挑战。特别是对于使用Intel芯片的MacBook用户,虽然相比M1芯片少了些兼容…...
避坑指南:Cypress CYT4B的Mcal CAN配置,这5个参数配错直接通信失败
Cypress CYT4B的Mcal CAN配置实战:5个致命参数解析与避坑策略 实验室里,示波器上的CAN波形杂乱无章,工程师反复检查硬件连接却始终无法建立稳定通信——这可能是许多嵌入式开发者调试CYT4B系列芯片时的真实写照。当硬件排查无果后,…...
Win11Debloat实战指南:3步彻底清理Windows 11系统臃肿
Win11Debloat实战指南:3步彻底清理Windows 11系统臃肿 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改…...
在 Docker 中,如何实现容器之间的通信?
在 Docker 中,容器之间的通信主要通过 Docker 网络(Docker Networking) 实现。Docker 提供了多种网络驱动和机制,允许容器安全、高效地相互通信。以下是实现容器通信的核心方法和最佳实践:一、核心网络模式 1. Bridge …...
IntelliJ Conf:JetBrains Koog Java原生AI Agent框架实战
文章目录前言:Java程序员的"Agent焦虑"终于有解了认识Koog:不是又一个LangChain的Java版环境准备:5分钟让项目跑起来实战:从Hello World到智能客服第一步:定义工具(Tool)第二步&#…...
告别云端推理:手把手教你用Vivado HLS在AX7350开发板上部署YOLOv3(附完整工程)
从零部署YOLOv3到AX7350开发板:FPGA加速实战全流程解析 在边缘计算领域,FPGA因其低延迟、高能效和可重构特性,成为深度学习模型部署的热门选择。本文将带您完成YOLOv3目标检测模型在AX7350开发板上的完整部署流程,从环境准备到最终…...
直流GIL绝缘子表面电荷积聚的电热耦合机理与电场畸变特性研究
中国电机工程学报文献复现 关于comsol GIL仿真模型:基于电热多物理场耦合模型的直流GIL 绝缘子表面电荷积聚及其对沿面电场影响的研究上周啃完那篇中国电机工程学报的直流GIL绝缘子仿真论文,本来以为照着公式套就能搞定,结果在Comsol里卡了整…...
