统计图玫瑰图绘制方法

news2024/12/27 18:09:58

统计图玫瑰图绘制方法
常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。
前几类图比较容易绘制,饼图环形图绘制较难。
还有一种玫瑰图的绘制也较难,今提供玫瑰图的绘制方法供参考。

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

0da18da223cc4fa1a2a6d1567b3f1728.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 ;         //打印文字
 int p[6] ;        //set data or  input  data
double pn ;   //显示数据
 
//*************************  

RoseChart10 (){      //玫瑰图绘制方法
    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,240,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.SetStrokeWidth(0);    //雷达图底线
              dx=360;  dy=280 ;     //center
      cs.SetFillMode (1);//0不填色,1填色

      cs.SetColor(255,80,20,250);  
            //此底色可采用渐变色
      cs.DrawCircle(dx,dy,215);     //圆心图例底色
 int cr,cg,cb;      //* set color(a,r,g,b)
      for (i=1; i<=11 ; i++){  //可采用底图圆渐变色
               cb=200-i*25 ;  
               L=cb+40 ;
          cs.SetColor(255,80,0,cb);
          cs.DrawCircle(dx,dy,L);       }  //底图色
               cs.SetColor(255,80,0,40);
          cs.DrawCircle(dx,dy,15);     //圆心补色

          cs.SetTextStyle (1);
          cs.SetStrokeWidth(1);
          cs.SetColor(255,250,0,0);
          cs.SetTextSize (16);
     for (i=1; i<=10 ; i++){   //画标线圆和标值
            a=pi/360*i ;
            x0=(float)(200*cos (a))+dx ;
            y0=(float)(200*sin (a))+dy ;
        cs.SetFillMode (0);//0不填色,1填色
        cs.SetColor(255,250,250,250);
        cs.DrawCircle(dx,dy,i*20);  
            x1=(float)(i*20*cos (a))+dx ;
            y1=(float)(i*20*sin (a))+dy ;
             ss=intToString (i);
         cs.SetFillMode (1);//0不填色,1填色
         cs.SetColor(255,250,250,0);
         cs.DrawText(ss,x1-5,285);         }  

          cs.SetTextSize (18);
          cs.SetColor(255,250,0,0);
    for (i=0; i<=5 ; i++){   //标线六角射线
          a=pi/360*i*120 ;   
          x0=(float)(220*cos(a))+dx ;
          y0=(float)(-220*sin(a))+dy ;
          cs.DrawLine (x0,y0,dx,dy);   
          a=pi/360*i*120+120 ;       //标字
          x1=(float)(225*cos(a))+dx-5 ;
          y1=(float)(-225*sin(a))+dy+5 ;  //逆时针
               ss=intToString (i+1) ;
          cs.DrawText (ss,x1,y1) ;              }  

   //draw 色标
          cs.SetColor (255,220,200,250);
          cs.DrawRect (550,80,685,180);   //标底
              cs.SetColor (255,250,0,0);
          cs.DrawRect (630,90,670,110);   //red 
          cs.DrawText ("Group A", 560,105) ;                 
              cs.SetColor (255,0,250,0);
          cs.DrawRect (630,120,670,140);   //green
          cs.DrawText ("Group B", 560,135) ;                 
              cs.SetColor (255,250,250,0);
          cs.DrawRect (630,150,670,170);   //yellow 
          cs.DrawText ("Group C", 560,165) ;                 

   
//***************************************
//6个数据的堆叠式  玫瑰图绘制方法:
//input data :  分三组(Group)
//每组6个分值  ( 平均数、百分数或定量的比值 )
int p1[6], p2[6], p3[6] ;
int L ;      //高度,长度

//演示的数据是杜撰的,不代表真实的平均数
        cs.SetStrokeWidth(2);    //雷达图线
        cs.SetFillMode (1);//0不填色,1填色
  //Draw Group 1 *************
     p1[0]=70; p1[1]=85; p1[2]=68; p1[3]=94; 
     p1[4]=60; p1[5]=75; 
    for (n=0; n<=5 ; n++){ //data=6, n=0, 0度点起绘出
            r=p1[n]+120 ;    //半径依数值大小
       for (i= n*120+20; i<=n*120+100; i++){  
              cs.SetColor(200,250,0,0);
              a=pi/360*i ;     
           x0=(float)(r*cos (a))+dx ;     //r=radius
           y0=(float)(-r*sin (a))+dy ;     //逆时针
           cs.DrawLine (dx,dy,x0,y0);     //draw out
      cs.DrawRect (80,n*25+52,120,n*25+74); //色标
   //** print data as ......
          cs.SetTextStyle (0);
          cs.SetTextSize (18);
          cs.SetColor(255,0,0,250);
          s=intToString(n+1)+" >   "+intToString (p1[n]);
          cs.DrawText (s, 55,70+n*25);
               cs.Update ();     }   }

 //Draw Group 2 ************
     p2[0]=78; p2[1]=65; p2[2]=69; p2[3]=70; 
     p2[4]=80; p2[5]=95; 
    for (n=0; n<=5 ; n++){ //data=6, n=0, 0度点起绘出
            r=p2[n]+80 ;    //半径依数值大小
       for (i= n*120+20; i<=n*120+100; i++){  
              cs.SetColor(200,0,250,0);
              a=pi/360*i ;     
           x0=(float)(r*cos (a))+dx ;     //r=radius
           y0=(float)(-r*sin (a))+dy ;     //逆时针
           cs.DrawLine (dx,dy,x0,y0);     //draw out
      cs.DrawRect (80,n*25+213,120,n*25+234); //色标
   //** print data as ......
          cs.SetTextStyle (0);
          cs.SetTextSize (18);
          cs.SetColor(255,0,0,250);
          s=intToString(n+1)+" >   "+intToString (p2[n]);
          cs.DrawText (s, 55,230+n*25);
               cs.Update ();      }   }

//Draw Group 3  ************
     p3[0]=50;  p3[1]=75; p3[2]=88; p3[3]=85; 
     p3[4]=97;  p3[5]=70; 
     for (n=0; n<=5 ; n++){ //data=6, n=0, 0度点起绘出
            r=p3[n]+40 ;    //半径依数值大小
       for (i= n*120+20; i<=n*120+100; i++){  
              cs.SetColor(150,250,250,0);
              a=pi/360*i ;     
           x0=(float)(r*cos (a))+dx ;     //r=radius
           y0=(float)(-r*sin (a))+dy ;     //逆时针
           cs.DrawLine (dx,dy,x0,y0);     //draw out
      cs.DrawRect (80,n*25+373,120,n*25+394); //色标
   //** print data as ......
          cs.SetTextStyle (0);
          cs.SetTextSize (18);
          cs.SetColor(255,0,0,250);
          s=intToString(n+1)+" >   "+intToString (p3[n]);
          cs.DrawText (s, 55,390+n*25);
               cs.Update ();      }   }

       cs.SetFillMode (0);//0不填色,1填色
        cs.SetStrokeWidth(2);
        cs.SetColor(255,250,0,0);    //指标定量线
        cs.DrawCircle(dx,dy,215);  
        cs.SetColor(255,0,250,0);    //指标定量线
        cs.DrawCircle(dx,dy,180);  
        cs.SetColor(255,250,250,0);    //指标定量线
        cs.DrawCircle(dx,dy,140);  

 
//draw title 打印题标文字
      cs.SetFillMode (1);//0不填色,1填色
      cs.SetTextStyle (1);
      cs.SetStrokeWidth(1);
           cs.SetTextSize (26);
      cs.SetColor(255,0,0,250);   //图标或企业标
      cs.DrawText ("Rose Chart 📊",500,60) ;
      cs.SetTextSize (50);
         ss="统计图  -  玫瑰图" ;
      cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,164,534);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,160,530);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,160,530);    //框线
       cs.Update ();
}//RoseChart10 ()


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

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

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

相关文章

ESP8266智能家居(1)——开发环境的搭建

1.前期介绍 本次打算使用esp8266的开发板——NodeMCU&#xff0c;进行物联网相关项目的学习。开发环境使用Arduino软件。 NodeMCU实物图为&#xff1a; 开发环境截图为&#xff1a; 2.软件下载 我使用的arduino版本为1.8.5&#xff0c;其安装包如下&#xff1a; 【免费】ar…

【鸿蒙 HarmonyOS 4.0】路由router

一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块&#xff0c;通过不同的url地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式&#xff1a; router.pushUrl()&…

浅谈兼容性测试的概念及目的

兼容性测试是软件测试中的一项重要工作&#xff0c;旨在验证系统在不同环境、不同设备和不同浏览器下的正常运行和稳定性。 1. 兼容性测试的概念 兼容性测试是指在多样化的硬件、操作系统、浏览器、网络环境等条件下&#xff0c;验证软件或应用程序的稳定性和一致性。这种测试是…

电商+支付双系统项目------电商系统中收货模块的开发

本篇文章是讲关于项目的收货地址模块的设计。这个就比较简单了&#xff0c;我就不像之前的文章讲的那么详细了&#xff0c;就简单讲讲就好。 首先先设计 DAO 层&#xff1a; package com.imooc.mall.dao;import com.imooc.mall.pojo.Shipping; import org.apache.ibatis.annot…

Linux-基础知识(黑马学习笔记)

硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件组成。 硬件&#xff1a;计算机系统中电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过软件与计算机进行交流。 而操作系统…

研发流程图

1、需求评审流程 2、用例评审流程 3、代码评审流程 4、产品功能上线流程

信号通信与消息队列实现的通信:2024/2/23

作业1&#xff1a;将信号和消息队列的课堂代码敲一遍 1.1 信号 1.1.1 信号默认、捕获、忽略处理(普通信号) 代码&#xff1a; #include <myhead.h> void handler(int signo) {if(signoSIGINT){printf("用户键入 ctrlc\n");} } int main(int argc, const ch…

WebDriver-自动化测试利器剖析

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

C++——STL之map和set

C——STL之map和set &#x1f3d0;序列式容器和关联式容器&#x1f3c0;什么是键值对 &#x1f3d0;什么是set&#x1f3c0;erase&#x1f3c0;count&#x1f3c0;lower_bound&&upper_bound&#x1f3c0;equal_range &#x1f3d0;multipleset&#x1f3d0;什么是map&a…

【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)

背景需求 上学期的周安排里&#xff0c;每班每周的自主游戏会轮到多个不同的内容 因此在每周的自主游戏观察有2次记录&#xff0c;观察的项目可以写不一样的&#xff0c; 如一位老师写沙水游戏&#xff0c;另一位写表演游戏 本学期&#xff0c;中班的自主游戏全部是户外的&am…

[算法沉淀记录] 排序算法 —— 归并排序

排序算法 —— 归并排序 算法介绍 归并排序是一种分治算法&#xff0c;由约翰冯诺伊曼在1945年发明。它的工作原理是将未排序的列表划分为n个子列表&#xff0c;每个子列表包含一个元素(包含一个元素的列表被认为是有序的)&#xff0c;然后重复合并子列表以生成新的有序子列表…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root 和一个正整…

Redis进阶篇

Redis线程模型 redis是基于内存运行的高性能k-v数据库&#xff0c;6.x之前是单线程, 对外提供的键值存储服务的主要流程 是单线程&#xff0c;也就是网络 IO 和数据读写是由单个线程来完成&#xff0c;6.x之后引入多线程而键值对读写命 令仍然是单线程处理的&#xff0c;所以 …

有趣且重要的JS知识合集(19)前端实现图片的本地上传/截取/导出

input[file]太丑了&#xff0c;又不想去改button样式&#xff0c;那就自己实现一个上传按钮的div&#xff0c;然后点击此按钮时&#xff0c;去触发file上传的事件, 以下就是 原生js实现图片前端上传 并且按照最佳宽高比例展示图片&#xff0c;然后可以自定义截取图片&#xff0…

Cesium入门基础一:cesium加载地球与环境搭建

一、cesium加载地球与环境搭建 1、搭建vue3项目 使用vite进行搭建。 npm init vitelatest根据操作提示选择&#xff1a;vue 3 Typescript 2、下载cesium库 终端输入&#xff1a; npm install cesium3、创建cesium地图容器 <template><div id"view_contai…

C 标准库 - <errno.h>

在C语言编程中&#xff0c;<errno.h> 头文件扮演着至关重要的角色&#xff0c;它提供了一个全局变量 errno 以及一系列预定义宏&#xff0c;用于指示系统调用或库函数执行过程中发生的错误。这些宏有助于程序员诊断和处理运行时错误。 errno 变量 extern int errno;err…

【文件搜索项目】使用jdbc操作SQLite

一. 插入&#xff08;采用变量的方式插入&#xff09; 1.创建数据源.DateSource 2.建立连接 3.构造SQL语句 4.执行SQL语句 5.释放资源 public class TestSQLite {public static void main(String[] args) throws SQLException {textInsert();}public static void textInsert(…

IO进程线程的通信操作

1.编程实现互斥机制 程序代码&#xff1a; 1 #include<myhead.h>2 int num520;//临界资源3 //1.创建一个互斥锁变量4 pthread_mutex_t mutex;//定义一个pthread_mutex_t类型的变量5 //定义任务1函数6 void *task1(void *arg)7 {8 printf("不畏过去\n");9 …

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

git切换仓库地址

已有git仓库&#xff0c;要切换提交的仓库地址&#xff0c;用以下命令 git remote set-url origin 自己的仓库地址 用以下命令&#xff0c;查看当前仓库地址&#xff1a; git remote show origin 切换仓库后&#xff0c;用以下命令初始化提交仓库&#xff1a; git push -u o…