统计图饼图绘制方法(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)常见问题总结:光学结构对成…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
