南丁格尔玫瑰图 在常规图表中实在很惊艳,但我初看没看懂,一查原来南丁格尔这么伟大,确实值得尊敬。

再仔细研究了下这种图的构成,发现原来就是把柱形图的柱形换成了扇形图的半径来表示,当然,变种有好多,我这只是说我理解的这种。

知道了其构成方式后就好实现了,依传入参数个数决定其扇形角度,依百分比决定其扇形的半径长度,然后就一切都水到渠成了。

漂亮的美图献上:

附上实现代码:

package com.xcl.chart;

/**

* Canvas练习

* 自已画南丁格尔玫瑰图(Nightingale rose diagram)

*

* author:xiongchuanliang

* date:2014-4-12

*/

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Paint.Style;

import android.graphics.RectF;

import android.util.DisplayMetrics;

import android.view.View;

public class PanelRoseChart extends View{

private int ScrWidth,ScrHeight;

//演示用的百分比例,实际使用中,即为外部传入的比例参数

private final float arrPer[] = new float[]{40f,50f,60f,35f,70f,80f,90f};

//演示用标签

private final String arrPerLabel[] = new String[]{"PostgreSQL","Sybase","DB2","国产及其它","MySQL","Ms Sql","Oracle"};

//RGB颜色数组

private final int arrColorRgb[][] = { {77, 83, 97},

{148, 159, 181},

{253, 180, 90},

{52, 194, 188},

{39, 51, 72},

{255, 135, 195},

{215, 124, 124}} ;

public PanelRoseChart(Context context) {

super(context);

// TODO Auto-generated constructor stub

//屏幕信息

DisplayMetrics dm = getResources().getDisplayMetrics();

ScrHeight = dm.heightPixels;

ScrWidth = dm.widthPixels;

}

public void onDraw(Canvas canvas){

//画布背景

canvas.drawColor(Color.BLACK);

float cirX = ScrWidth / 2;

float cirY = ScrHeight / 3 ;

float radius = ScrHeight / 5 ;//150;

float arcLeft = cirX - radius;

float arcTop = cirY - radius ;

float arcRight = cirX + radius ;

float arcBottom = cirY + radius ;

RectF arcRF0 = new RectF(arcLeft ,arcTop,arcRight,arcBottom);

//画笔初始化

Paint PaintArc = new Paint();

Paint PaintLabel = new Paint();

PaintLabel.setColor(Color.WHITE);

PaintLabel.setTextSize(16);

PaintLabel.setAntiAlias(true);

PaintArc.setAntiAlias(true);

//位置计算类

XChartCalc xcalc = new XChartCalc();

float Percentage = 0.0f;

float CurrPer = 0.0f;

float NewRaidus = 0.0f;

int i= 0;

//将百分比转换为扇形半径长度

Percentage = 360 / arrPer.length;

Percentage = (float)(Math.round(Percentage *100))/100;

for(i=0; i

{

//将百分比转换为新扇区的半径

NewRaidus = radius * (arrPer[i]/ 100);

NewRaidus = (float)(Math.round(NewRaidus *100))/100;

float NewarcLeft = cirX - NewRaidus;

float NewarcTop = cirY - NewRaidus ;

float NewarcRight = cirX + NewRaidus ;

float NewarcBottom = cirY + NewRaidus ;

RectF NewarcRF = new RectF(NewarcLeft ,NewarcTop,NewarcRight,NewarcBottom);

//分配颜色

PaintArc.setARGB(255,arrColorRgb[i][0], arrColorRgb[i][1], arrColorRgb[i][2]);

//在饼图中显示所占比例

canvas.drawArc(NewarcRF, CurrPer, Percentage, true, PaintArc);

//计算百分比标签

xcalc.CalcArcEndPointXY(cirX, cirY, radius - radius/2/2, CurrPer + Percentage/2);

//标识

canvas.drawText(arrPerLabel[i],xcalc.getPosX(), xcalc.getPosY() ,PaintLabel);

//下次的起始角度

CurrPer += Percentage;

}

//外环

PaintLabel.setStyle(Style.STROKE);

PaintLabel.setColor(Color.GREEN);

canvas.drawCircle(cirX,cirY,radius,PaintLabel);

canvas.drawText("author:xiongchuanliang", 10, ScrHeight - 200, PaintLabel);

}

}

代码实现起来很容易,但这种图的设计创意确实非常好。 叹服。

感兴趣的可以看看。

android图片花,Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)相关推荐

  1. python+matplotlib绘制南丁格尔玫瑰图

    实验:绘制南丁格尔玫瑰图   本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫 ...

  2. 使用Matplotlib绘制南丁格尔玫瑰图

    前言 在前文中,我们介绍了使用pyecharts绘制南丁格尔玫瑰图,本章我们再学习一下使用matplotlib绘制南丁格尔玫瑰图,了解在极坐标系中绘制柱状图.并对比一下两种不同的绘制方法,如何实现? ...

  3. python实验之绘制南丁格尔玫瑰图

    一.实验目的 了解玫瑰图的前世今生:了解 matplotlib 标准库中的 pyplot 模块:了解在极坐标 系中绘制柱状图. 二.实验基本原理及步骤(或方案设计及理论计算) 实验步骤: 查阅文档,了 ...

  4. 【Python绘图】pyecharts绘制南丁格尔玫瑰图

    from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...

  5. python画玫瑰图_央视都在用的“南丁格尔玫瑰图”,原来Python也可以画

    前一阵子,我看到央视新闻中,有一张比较好看数据图,如下: 后来才知道这叫"南丁格尔玫瑰图",是南丁格尔护士在克里米亚战争期间提交的一份关于士兵死伤报告时发明的一种图表. 我心想能不 ...

  6. staruml顺序图生成协作图_一个工具箱 之 南丁格尔玫瑰图生成器

    南丁格尔玫瑰图是一种圆形的直方图,由弗罗伦斯·南丁格尔所发明,又名为极区图.出于对资料统计的结果会不受人重视的忧虑,她发展出一种色彩缤纷的图表形式,让数据能够更加让人印象深刻. 南丁格尔玫瑰图将柱图转 ...

  7. 使用excel中的雷达图绘制南丁格尔玫瑰图

    效果展示: 注: 数据文件链接: https://pan.baidu.com/s/1iF_nQ6hhL0MlO8P4qPDuAA 密码: 1snj 数据展示: 绘制思路: 1.计算出确诊人数的平方根( ...

  8. 性感的数据可视化 —— 桑基图、气泡图、南丁格尔玫瑰图

    阿里云数据中台官网 https://dp.alibaba.com/index (作者:常成) 2019年的"凯度信息之美奖"揭晓了,有很多很有意思的信息可视化作品.很多作品看到的时 ...

  9. 性感的数据可视化 —— 精讲桑基图、气泡图、南丁格尔玫瑰图

    作者:常成 2019年的"凯度信息之美奖"揭晓了,有很多很有意思的信息可视化作品.很多作品看到的时候都被感动到,数据/信息不再是冷冰冰的,而是立体的,通过可视化可以让人们更清晰的看 ...

  10. 为敬畏生命而生—南丁格尔玫瑰图制作

    长得像饼图又不是饼图,长得像堆积簇状图又非簇状图,这种有着极坐标的怪异统计图,有着一个美丽的名字-南丁格尔玫瑰图. 说到南丁格尔玫瑰图,这里有着一段为敬畏生命而存的历史. 19世纪50年代,英国.法国 ...

最新文章

  1. python 迭代器 生成器 解析
  2. MongoDB基本概念学习 - 文档
  3. 请解释和、|和||的区别?
  4. 【NLP】NLP从业人员必须知道的十大必备知识库(附资料下载)
  5. 屠龙之路_坚持就是胜利_NinthDay
  6. 数据结构排序法之希尔排序法(Shell Sort)
  7. python项目之站长素材爬取
  8. 动态DP详解(转载)
  9. 产品体验报告:在行APP分析
  10. JPEG 图像压缩原理
  11. CCF_Java_201909-3_字符画
  12. python人脸识别实验报告总结_人脸识别实验报告.doc
  13. 了解眩光与星芒,夜景灯光拍摄翻倍美
  14. linux暂停进程运行的按键组合是,Linux基础命令(五):进程——ps、top、jobs、bg、fg、kill、killall、shutdown...
  15. 统计推断(二) Estimation Problem
  16. Facebook名人软件Mentions有了Android版本
  17. mysql marked crashed_MySQL解决is marked as crashed and should be repaired故障
  18. 阿里P8大牛亲自教你!树莓派docker
  19. 前端页面遇到稀有字体如何处理
  20. 云计算是如何赋能智慧社区加速落地的?

热门文章

  1. Android本地默认IP
  2. 3 前端面试,js(上)
  3. 基于SpringBoot的毕业设计选题系统
  4. html如何制作图片平移的效果,抖音里单张图片平移视频怎么制作?影音制作实现一张图片从左到右滑动视频效果...
  5. Flutter之pigeon
  6. python 计算置信区间_python 计算数据中值的置信区间
  7. 注册机偷懒写法1、之直接扣代码
  8. PDF文件有密码怎么办?
  9. 基于Workbench的橡胶计算收敛调试
  10. 鸿蒙Ability继承FractionAbility可以直接获取Fraction内的控件