2018年2月20日

〔SAS〕以SGPANEL繪製熱圖組

本篇可以算是「使用SGPLOT繪製熱圖(Heatmap)」的加強版?

其實是把多張熱圖同時放在一張圖上而已啦。統計圖結果如下:

Heatmap

當同時有多張圖想要呈現於一張統計圖上時,SGPANEL是非常推薦的程序。不過SGPANEL支援的語法和SGPLOT是不太相同的,需要花一點時間調整一下,但不會差很多。

先建立範例檔案,於【程式01】

/*程式01*/
data heatmap_1 (drop=i);;
     do year=2012 to 2017;
         do week=1 to 7;
             do team=1 to 6;
                 do i=1 to 200;
                     if uniform(1)>=0.3 then output;
                 end;
             end;
         end;
     end;
run;

熱圖部分,需要事先準備好「可以畫圖」的資料,所以【程式02】將原始資料先轉為可繪圖的資料,並設定自訂格式於【程式03】

/*程式02*/

proc freq data=heatmap_1 noprint;
     tables team*year*week /   sparse out=heatmap_2 (where=(percent^=.)) outpct;
run;

/*程式03*/
proc format ;
     value teamf 1="第一隊" 2="第二隊" 3="第三隊" 4="第四隊" 5="第五隊" 6="第六隊";
     value fweekday 1="一"  2="二" 3="三" 4="四" 5="五" 6="六" 7="日";
run;

【程式04】為熱圖組的程式。

/*程式04*/
ods html gpath = "e:\temp\"  image_dpi=300  style=htmlblue;
ods graphics on / reset=all reset=index noborder height=6in width =5in
                                 antialiasmax=10000  imagename = "圖" imagefmt =png ;
ods results off;
         proc sgpanel data=heatmap_2  ;
           format team teamf. week fweekday.;
           panelby team /columns=2 rows=3 novarname;
           heatmap x=year  y=week / freq=count discretex discretey colormodel=(white red) ;
           styleattrs backcolor=white wallcolor=white;
           gradlegend / title='案件數' ;
           colaxis valueattrs=(size=7) label="年度";
           rowaxis  discreteorder=data reverse valueattrs=(size=7) label="星期";
           title j=c h=14pt '歷年案件數';
         run;
ods results  on; title;quit;

「ods html」和「ods graphics」可讓統計圖直接輸出為檔案。

「panelby」設定圖組分組的變項。novarname可以設定不呈現變項名於圖上。

「heatmap」為繪圖的主要語法。

「gradlegend」修改熱圖旁的圖例說明。

「colaxis」修改X軸。

「rowaxis」修改Y軸。

以上就是本次的分享~

熱圖需SAS 9.4M3版本。

-------相關連結------

〔SAS〕使用SGPLOT繪製熱圖(Heatmap)
〔SAS〕使用SGPLOT繪長條圖及折線圖


1 則留言: