统计图饼图绘制方法(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)常见问题总结:光学结构对成…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
