Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)

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

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

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

漂亮的美图献上:

附上实现代码:

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<arrPer.length; 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); } }

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

一定要附上南丁格尔维基百科的链接:      http://zh.wikipedia.org/wiki/%E5%BC%97%E7%BE%85%E5%80%AB%E6%96%AF%C2%B7%E5%8D%97%E4%B8%81%E6%A0%BC%E7%88%BE

感兴趣的可以看看。

时间: 2024-09-27 12:32:40

Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)的相关文章

Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)_Android

南丁格尔玫瑰图 在常规图表中实在很惊艳,但我初看没看懂,一查原来南丁格尔这么伟大,确实值得尊敬. 再仔细研究了下这种图的构成,发现原来就是把柱形图的柱形换成了扇形图的半径来表示,当然,变种有好多,我这只是说我理解的这种. 知道了其构成方式后就好实现了,依传入参数个数决定其扇形角度,依百分比决定其扇形的半径长度,然后就一切都水到渠成了. 漂亮的美图献上: 附上实现代码: package com.xcl.chart; /** * Canvas练习 * 自已画南丁格尔玫瑰图(Nightingale r

教你用Excel2013制作南丁格尔玫瑰图

  南丁格尔玫瑰图用在数据图表中显得很大气上档次,给人一种焕然一新的惊艳感觉,下面小编就为大家介绍Excel2013制作南丁格尔玫瑰图方法,希望能对大家有所帮助! 方法/步骤 1.首先我们打开excel 2013软件,界面如下所示 2.接着我们随便编上几组数据,我以12行10列为模板,然后选中这些数据 3.点击插入 ,在图表区 选择圆环图 4.接下来我们右键图表--设置数据系列格式 ,在右侧窗口中将圆环内径大小调为3%左右,其结果如下图 5.接下来是重点,我们利用颜色填充 来做所要做的图表,我们

Excel怎么制作南丁格尔玫瑰图

南丁格尔玫瑰图制作方法. PS:这种图从外观特征上看是一种"半径不等的饼图",起源是南丁格尔出于对资料统计的结果会不受人重视的忧虑,她发展出一种色彩缤纷的图表形式,让数据能够更加让人印象深刻. 这种图表形式有时也被称作"南丁格尔的玫瑰",其实就是一种圆形的直方图. 1.首先我们打开2013或以上版本的Excel 2.接着我们随便编上几组数据,以12行10列为模板,然后选中这些数据 3.点击"插入" ,在图表区选择圆环图 4.接下来我们右键图表--

excel如何制作南丁格尔玫瑰图

  1.打开excel软件,接着我们随便编上几组数据,然后选中这些数据. 2.点击插入 ,在图表区选择圆环图,右键图表选择"设置数据系列格式",在右侧窗口中将圆环内径大小调为3%左右. 3.点击圆环 ,双击某一个单独的环,直接选择填充,利用F4键进行快速的填充. 4.接着我们再美化,我们右键图表空白处选择"填充颜色",选择你想要的背景颜色.

Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)_Android

本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

利用HTML5中的Canvas绘制一张笑脸的教程

今天,你将            学习一项称为Canvas(画布)的web技术,以及它和文档对象模型(通常被称为DOM)的关联.这项技术非常强大,因为它使web开发人员能够通过使用JavaScript访问和修改HTML元素.          现在你可能想知道为什么我们需要大刀阔斧地使用JavaScript.简而言之,HTML和JavaScript是相互依存的,一些HTML组件,如canvas元素,并不能脱离JavaScript单独使用.毕竟,如果我们不能在上面绘图,那canvas能派什么用处呢

Android中使用ListView绘制自定义表格技巧分享_Android

先上一下可以实现的效果图  要实现的效果有几方面 1.列不固定:可以根据数据源的不同生成不同的列数 2.表格内容可以根据数据源的定义合并列 3.要填写的单元格可以选择自定义键盘还是系统键盘 奔着这三点,做了个简单的实现,把源码贴一下(因为该点是主界面中的一部分,不便于放整个Demo) 自定义适配器,CallBackInterface是自定义的回调接口,这里定义回调是因为数据输入时需要及时保存 复制代码 代码如下: public class SiteDetailViewAdapter extend

HTML5中使用Canvas绘制带阴影效果的图形

1,阴影的相关属性 HTML5 Canvas中提供了设置阴影的四个属性值分别为: context.shadowColor = "red" 表示设置阴影颜色为红色 context.shadowOffsetX = 0表示阴影相对TEXT的水平距离,0表示两者水平位置重合 context.shadowOffsetY = 0表示阴影相对TEXT的垂直距离,0表示两者垂直位置重合 context.shadowBlur = 10 阴影模糊效果,值越大模糊越厉害. shadowColor:阴影颜色(

Android中的Animation应用

最近在应用中用到了Animation.在网上浏览了下,感觉有些东西讲得很精辟.因此,我想总结下. Drawable最强大的功能是:显示Animation.AndroidSDK介绍了2种Animation: TweenAnimation(渐变动画):通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 FrameAnimation(帧动画)  :顺序播放事先做好的图像,类似放电影 在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的