SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 637|回复: 0
打印 上一主题 下一主题

用SAS实现堆积式南丁格尔玫瑰图Nightingale Rose Diagram (上)

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-3-2 22:44:12 | 只看该作者

用SAS实现堆积式南丁格尔玫瑰图Nightingale Rose Diagram (上)

From sxlion's blog on saslist

ExcelPro的图表博客的作者刘老师最近用EXCEL做出了一个非常炫的图叫堆积式南丁格尔玫瑰图,还叫半径不等的扇形图、极区图 南丁格尔玫瑰图、风玫瑰图等等,据说最早是一个叫南丁格尔的护士最早使用的,她自己叫这个图为“鸡冠花图(coxcomb)”,一种圆形的直方图,除了讲述用EXCEL的具体做法,还对此图从专业方面给出了评价,指出了该图的优缺点和适用场合。具体介绍见刘老师的博文一,博文二。   这种图在excel里面是雷达图拼凑起来的,具体说是360个,当然越多图越圆,我没有试过。下面我给出用SAS代码实现的一种方法,虽然还没完成,但是大概差不多了,从构思到半成型花了差不多一天的时间,思路花了三分之一的时间,大部分时间在调试代码(好久没用,不熟练。) 下面给出我的思路: 全部用annotate完成:1,首先用PIE函数画出整个轮廓,包括外面的光圈,pie图和中心的圆;2,然后用piexy函数对各片pie进行标注;3,最后对每个pie的不同部分用point和draw函数进行标注,这里只完成了前两步,后面一步在(下)里面完成,技巧已经在包含前两步里面。 着手编程时,参考了Robslink的代码,当然,代码需要改动很大,并且原图的配色确实很逊,和上面的图没法比。  本图代码见底下附。 点评: 1,对于这样的大型图,excelpro认为用excel做的是难度是5星,实用性为3星,我认为酷劲也该给个五星。 2,excel需要构造一堆数来完成这个图形, SAS也需要一堆代码来搭积木。excel的优点就是实时可见,随时调整,而SAS则需要修改好代码后,反复运行调试参数;不过SAS还有个优点,就是一旦完成,自动化程度高。比如说下次碰到的指标为10个,比这次少一个,怎么办?excel的话,需要重新构造10块饼的数据,从头再来,而SAS就不需要,直接运行即可,因为里面用到宏直接传递这些绘图信息。     当然excel里面也有VBA,也可以自动化的功能,当然这个工作量就剧增了。 问题: 1,圆心的填色“facebook”处好呆板,SAS里面好像没有现成的那种颜色,需要用修改GTL的方法得到那种渲染效果的颜色,不过没有尝试。 2,几次遇到SAS绘图的清晰度问题,也就是怎么要得到高dpi的图,尝试了几种方法,都没有得到想要的。怎么保持图片大小不变,而清晰度增加,换个角度怎么让SAS出图片尺寸小,文件非常大,上M都可以,如果谁知道请告知,谢谢! 附代码: %let name=rose2; FILENAME file “c:\”; data ex; input index $4. value col $; col=”CX”||col; cards; a 30 989898 a 70 353535 b 41 808080 b 59 353535 c 88 636466 c 12 353537 d 54 385599 d 46 2E4A7A e 13 375299 e 34 2D4978 e 30 637798 e 12 8395BB e 7 BACAE2 e 4 8F9CA8 f 11 375299 f 29 2D4978 f 23 637798 f 18 8395BB f 12 BACAE2 f 7 8F9CA8 g 21 375299 g 28 2D4978 g 22 637798 g 29 8395BB h 70 F1F1F1 h 30 353533 i 12 E6E6E6 i 88 353535 j 51 CCCCCC j 49 353535 k 40 B3B3B3 k 60 353535 ; run; /*构造控制绘图参数 PIE函数的半径rad,起始角和角度ang */ data ex2; set ex nobs=max; by index; retain rad ang 0; if first.index then do ; rad=1;ang+1; output; end; else do; rad+1;output; end; if _N_=max then do; call symput(“piece”, ang); end; %put &piece.; run; /*设置最大饼环的半径为整个图的百分比*/ %let radius=25; data pies; set ex2; by index; length style function color $ 12; xsys=’3′; ysys=’3′; hsys=’3′; x=50; y=50; /* 定位圆心 */ function = ‘PIE’; style = ‘SOLID’; if first.index then [...]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-11 10:53 , Processed in 0.070211 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表