复合式统计图绘制方法(6)

复合式统计图绘制方法(6)
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图环形图绘制较难。
在统计图的应用方面,有时候有两个关联的统计学的样本值要用统计图来表达,一张统计图不能表达清楚,就要二张图来表达。由此就产生了复合式的统计图,它能将两个需要表达的统计概念统一在一张图表上阐述清楚。

在网络科技发展进步的当下,原来一些传统的统计图表都有了进一步的创新。以前企业的PPT都依赖微软的各应用软件来制作图表,现时企业的PPT展示的图表应用不再满足于Excle,Word的图表绘制方法,进而使用一些第三方应用软件来制作新颖漂亮的图表。由此而有许多图表制作的应用软件面市。这些图表很吸引眼球,我对此也很感兴趣,故试着写了一些各种式样图表的绘制方法,供有同好的同行参考和评论。

新样式的统计图有复合式,堆叠式,展开式等等,不一而足。在美工艺术方面有许多独到新颖的样式,给人一个赏心悦目的感受。
今在此提供一种复合式统计图的绘制方法供参考。

本方法采用C语言的最基本功能:
( 1) 绘图功能画线,画圆,画长方形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。

//在统计图表的样本值的计算方面,样本值的量的表现是一个方面,重点是量的对比,这是体现统计图目的的主要意义。其中最基本的是完成与计划的对比。

//介绍一个基本的计算方法:
//单个商品按类相加=单个商品销售总量
//分组6个,各商品总量相加=商品销售总量
//分析:完成和计划指标比
//商品*单价=销售额
//6个商品类销售额相加=商品销售总额
//单个销售额/销售总额=单个商品类占比
//占比分析:单个商品类销售总额/商品销售总额


下面是绘制复合式统计图的代码:
//变量: 可设置成全局变量或私有变量
Canvas cs ;     //画布,绘制图表载体
float pi=3.1415926535 ;
float a ;            //三角函数 sin (a), cos (a), 
float r ;             //圆半径 radius
int i, j, n ;
float x0,y0,x1,y1,x2,y2 ;  //作图
float dx1,dy1,dx,dy ;             //中心坐标
string ss, ss1, ss2,ss3 ;         //打印文字
 int p[6] ;        //set data   or  input  data
 double pn ;   //显示数据,计算
  int cr, cg, cb ;     //设置颜色 setColor (a,r,g,b) 
 int  p1[16],  p2[16], p3[16] ;
 int ppn ;   //计算
 int tb ;      //set tab
 int k0, k1 ;    //圆720线 起终点
 double sum1, sum2, sum3, sum ;  //统计计算
 double sum4, sum5, sum6 ;

e433a433c9a8411b8725532b13fa3e64.png 

//*************************  
compound6 (){  //复合式统计图 6  双拼半圆环图
      cs.ClearDraw (0,src);   //清屏
      clearOutput();
      selectStyle () ; //图例样式选项设置
      cs.SetFillMode (1);//0不填色,1填色
         cs.SetColor (255,250,250,250);
      cs.DrawRect (0,4,720,600);   //back board
         cs.SetColor (255,140,140,140);
      cs.DrawRect (24,24,706,586);   //back      
         cs.SetColor (255,250,250,240);
      cs.DrawRect (20,20,700,580);   //back 
      cs.SetFillMode (0);//0不填色,1填色
         cs.SetColor (255,0,0,250);
      cs.DrawRect (20,20,700,580);   //back 
      cs.DrawRect (26,25,694,575);   //back 
  
  //复合式统计图样例:
  //图例 (上下双拼半圆环图)
     cs.SetFillMode (1);//0不填色,1填色
            dx=360;  dy=270 ;   //center
         cs.SetColor (255,250,200,230);
     cs.DrawRect (50,80,150,268);   //样本值标底
     cs.DrawRect (590,245,675,530);   //样本值标底
     cs.SetColor(255,250,220,230);
     cs.DrawCircle(dx,dy,200);    //center 图案底色
     cs.DrawCircle(dx,dy+10,200); //center 图案底色
          cs.SetStrokeWidth(1);    //线
          cs.SetTextStyle (0);  //1 粗体字
          cs.SetTextSize (24);
          cs.SetColor(255,0,0,250);
        cs.DrawText ("Group ",65,105);
        cs.DrawText ("Goods ",595,270);
           cs.SetTextSize (20);
        cs.DrawText (" A",55,135);
        cs.DrawText (" B",55,175);
        cs.DrawText (" C",55,215);
        cs.DrawText (" D",55,255);
  
 //先绘制部门半圆环图,
 //图例样本值:input data   
 //data : 商品类销售量 p(n)_8,部门销售额 p1(n)_4 
 
     p1[1]=6400; p1[2]=3500;
     p1[3]=4500; p1[4]=5600;  //部门 20000
        k[0]=720;     //k=180,12点钟方向为0位
                             //k=0, 3点钟方向为0位
        k[1]=k[0]+p1[1]*72/2000 ;   //样本值合计20000
        k[2]=k[1]+p1[2]*72/2000 ;   //转换成整圆720线
        k[3]=k[2]+p1[3]*72/2000 ;
        k[4]=k[3]+p1[4]*72/2000 ;

          cs.SetColor(255,250,0,0);
          cs.DrawLine (50,dy,dx+200,dy);
            r=190 ;
    for (n=1; n<=4 ; n++){   //data=4
       for (i= k[n-1]; i<=k[n]; i++){  // +2 尾线闭合
             a=pi/360*i/2 ;   // a/2 绘出的是半圆
       if (n==1) cs.SetColor(255,0,250,250);
       if (n==2) cs.SetColor(255,0,220,250);
       if (n==3) cs.SetColor(255,0,170,250);
       if (n==4) cs.SetColor(255,0,120,250);
            x0=(float)(r*cos (a))+dx ;     //r=radius
            y0=(float)(r*sin (a))+dy ;     //顺时针
     cs.DrawLine (dx,dy, x0,y0);      }
             //逐线绘出加色标
     cs.DrawRect (75,n*40+72 ,140,n*40+102); 
           pn=p1[n]*10 ;     //保留1位小数
           pn=pn/2000 ; 
           ss1=doubleToString (pn)+"%" ;
           ss2=intToString (p1[n]) ;
       cs.SetColor(255,250,250,0);
        cs.DrawText(ss2, 85,n*40+93);   //色标
     cs.SetColor(255,250,0,250);  //图上标p1(n)
            ma=pi/360*((k[n-1]+k[n])/2)/2 ;
            x1=(float)((r-45)*cos (ma))+dx ;     
            y1=(float)((r-45)*sin (ma))+dy ;
          cs.DrawText (ss1,x1-27,y1+10);     //标字
                 cs.Update ();        } //show 饼图

//再绘制商品大类销售额下半圆环
    p[1]=800;  p[2]=950;  p[3]=1200 ;  p[4]=1800;  
    p[5]=1500;  p[6]=1000;  p[7]=1150;  p[8]=1600 ;
        k[0]=0;     //k=180,12点钟方向为0位
                         //k=0, 3点钟方向为0位
        k[1]=k[0]+p[1]*72/1000 ;   //样本值合计10000
        k[2]=k[1]+p[2]*72/1000 ;   //转换成整圆720线
        k[3]=k[2]+p[3]*72/1000 ;
        k[4]=k[3]+p[4]*72/1000 ;
        k[5]=k[4]+p[5]*72/1000 ;
        k[6]=k[5]+p[6]*72/1000 ;
        k[7]=k[6]+p[7]*72/1000 ;
        k[8]=k[7]+p[8]*72/1000 ;
              dx=360 ;  dy=280 ;
          cs.SetColor(255,250,0,0);
          cs.DrawLine (dx-200,dy-1,675,dy-1);
     for (n=1; n<=8 ; n++){   //data=4
       for (i= k[n-1]; i<=k[n]+2; i++){  // +2 尾线闭合
             a=pi/360*i/2 ;   // a/2 绘出的是半圆
        cr=250-n*18 ;  cg=200-n*15 ;  cb=250 ;
        cs.SetColor(255,cr,cg,cb);   //紫色渐变
             x0=(float)(r*cos (a))+dx ;     //r=radius
             y0=(float)(r*sin (a))+dy ;     //顺时针
         cs.DrawLine (dx,dy, x0,y0);    //绘制饼图线
     cs.DrawRect (600,n*30+250 ,665,n*30+275); 
          cs.SetColor(255,250,230,240);
      cs.DrawCircle(dx,dy,80);    //可加空圆芯
                      }    //动画显示:逐线绘出加色标
           pn=p[n]*10 ;  //保留1位小数,标样本值和 %
           pn=pn/1000 ; 
           ss1=doubleToString (pn)+"%" ;
           ss2=intToString (p[n]) ;
       cs.SetColor(255,250,250,0);
           tb=0;
           if (p[n]<1000) tb=7 ;  //tab
       cs.DrawText(ss2, 610+tb,n*30+270);   //色标
     cs.SetColor(255,250,250,0);  //图上标p1(n)
            ma=pi/360*((k[n-1]+k[n])/2)/2 ;
            x1=(float)((r-45)*cos (ma))+dx ;     
            y1=(float)((r-45)*sin (ma))+dy ;
            cs.DrawText (ss1,x1-23,y1+5);     //标字
                 cs.Update ();        } // show 饼图

     for (n=1; n<=7 ; n++){   //绘制色块分隔线
        a=pi/360*k[n]/2 ;   // a/2 绘出的是半圆
            x2=(float)(r*cos (a))+dx ;     //r=radius
            y2=(float)(r*sin (a))+dy ;     //顺时针
          cs.SetColor(255,250,230,240);
          cs.DrawLine (dx,dy, x2,y2);    }

        cs.SetTextSize (80);
        cs.SetColor(255,0,0,250);      
        cs.DrawText (" 📛",293, 307) ;
  
//题标:  艺术立体字制作
        cs.SetFillMode (1);//0不填色,1填色
        cs.SetTextStyle (1);
        cs.SetStrokeWidth(1);
        cs.SetTextSize (28);
        cs.SetColor(255,0,0,250);      
      cs.DrawText ("Art Graphics 📊",480,60) ;
      cs.SetTextSize (46);
         ss="复合统计图:双半圆环图" ;
      cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,114,544);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,110,540);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,110,540);    //框线
       cs.Update ();
}//compound6 ()

 


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TEASEL: A transformer-based speech-prefixed language model

文章目录 TEASEL&#xff1a;一种基于Transformer的语音前缀语言模型文章信息研究目的研究内容研究方法1.总体框图2.BERT-style Language Models&#xff08;基准模型&#xff09;3.Speech Module3.1Speech Temporal Encoder3.2Lightweight Attentive Aggregation (LAA) 4.训练…

Golang引领科技前沿:探索工程师在多领域的关键角色

在科技行业不断演变的背景下&#xff0c;对熟练工程师的需求持续增长&#xff0c;而各种编程语言在塑造数字世界中发挥着关键作用。其中&#xff0c;Golang&#xff08;或Go&#xff09;以其高效、简单和可扩展的特性而备受推崇。Golang工程师发现自己能够胜任科技领域内多种角…

编程界的圣经:从Scheme到JavaScript构建你的计算思维

文章目录 适读人群目 录 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发…

INA226电流/功率计模块使用方法

之前的文章简要介绍了开源INA226电流计模块的功能特点&#xff0c;本文将详细介绍INA226电流计模块的使用方法。 特性 感测总线电压范围&#xff1a;0V - 36V高侧/低侧电流感测电压、电流、功率测量0.1% 增益误差10uV 偏移可配置测量平均值16个可配置I2C地址2.7V - 5.5V 电源…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中&#xff0c;我们一般会提供一个搜索框&#xff0c;输入关健字&#xff0c;点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

c++: string中 find, rfind, find_frist_of, find_laste_of 与 substr之间的操作

在 C 的 std::string 类中&#xff0c;有几个成员函数可以用于在字符串中执行搜索和子字符串提取操作。以下是这些函数的简要说明&#xff1a; find(): 查找子字符串的第一个出现位置。 size_t find(const string& str, size_t pos 0) const; size_t find(const char* s, …

Linux下非阻塞IO实验

一. 简介 前面文章学习了 Linux内核提供的针对应用程序阻塞与非阻塞访问设备的处理方法。文章地址如下: Linux内核中处理非阻塞访问的方法:轮询-CSDN博客 Linux内核中轮询对应于应用层的函数之一:poll函数-CSDN博客 Linux内核中轮询对应于应用层的函数之一:epoll函数-…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录 关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式 3.2 Hardware object handles&#xff08;HO&#xff09;3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDU…

HSCCTF 3th 2024 Web方向 题解wp

WEB-CHECKIN【*没出】 直接给了源码 <?php highlight_file(__FILE__); error_reporting(0); $a$_POST[1]; $b"php://filter/$a/resource/dev/null"; if(file_get_contents($b)"2024"){echo file_get_contents(/flag); }else{echo $b; }咋这么像 WEB…

人工智能迷惑行为大赏(AI智障)

目录 人工智能 人工智能的“幽默”瞬间 技术原理探究 社会影响分析 人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一个涵盖了多个学科的综合领域&#xff0c;主要研究如何应用计算机来模拟人类的某些思维过程和智能行为&#xff0c;如…

阿里云-零基础入门推荐系统 【Baseline】

文章目录 赛题介绍评价方式理解赛题理解代码实战导包df节省内存函数读取采样或全量数获取 用户 - 文章 - 点击时间字典获取点击最多的topk个文章itemcf的物品相似度计算itemcf 的文章推荐给每个用户根据物品的协同过滤推荐文章召回字典转换成df生成提交文件获取测试集从所有的召…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

python使用DEFLATE 算法decode(‘ascii‘)编码打包的自定义格式的压缩包并未生成

问题描述&#xff1a;打包都为报错且打包的文件大小为0 打包程序&#xff1a; import os import zlibdef compress_folder_to_custom_format(input_folder, output_filename):"""使用 DEFLATE 算法压缩文件夹下的所有文件&#xff0c;并保存为自定义文件包格式…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…

智谱清华LongAlign发布:重塑NLP长文本处理

引言 随着大型语言模型&#xff08;LLMs&#xff09;的不断进化&#xff0c;我们现在能够处理的文本长度已经达到了前所未有的规模——从最初的几百个tokens到现在的128k tokens&#xff0c;相当于一本300页的书。这一进步为语义信息的提供、错误率的减少以及用户体验的提升打…

MySQL三种日志

一、undo log&#xff08;回滚日志&#xff09; 1.作用&#xff1a; &#xff08;1&#xff09;保证了事物的原子性 &#xff08;2&#xff09;通过read view和undo log实现mvcc多版本并发控制 2.在事务提交前&#xff0c;记录更新前的数据到undo log里&#xff0c;回滚的时候读…

Clickhouse: 随笔杂记

Clickhouse 文件缓存的使用 元数据缓存 1、Clickhouse启动的时候会加载所有表的元数据信息&#xff0c;这部分会缓存在内存里面。这部分的内存没有办法知道并且也不走MemoryTracker。 Mark数据缓存 2、Clickhouse会缓存表的mark信息在内存里, 使用LRU算法来控制。缓存大小通过…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发

修改套餐 4.1 需求分析和设计 产品原型&#xff1a; 接口设计&#xff08;共涉及到5个接口&#xff09;&#xff1a; 根据id查询套餐根据类型查询分类&#xff08;已完成&#xff09;根据分类id查询菜品&#xff08;已完成&#xff09;图片上传&#xff08;已完成&#xf…