長條圖(Bar Chart)亦可以稱為柱狀圖、條圖、條狀圖、棒形圖等,應該是非常使用的圖形,與折線圖(Line Chart)一起繪製於同一張圖上,稱為Bar-Line Chart。
這次要分享的為Bar-Line Chart,統計圖結果如下:
先建立範例檔案,於【程式01】
/*程式01*/
data vbar_1; do i=1 to 200; do year=2012 to 2017; do week=1 to 7; time=normal (1)*(10+(year-2011))+100+(year-2011)*10; if uniform(1) >=(0.3-(year-2011)*0.02) then output; end; end; end;
run; |
【程式02】先將我們需要會製圖型的統計量準備好。不過這非必要過程,繪長條圖SGPLOT可直接使用原始資料等,在選擇適當的統計量就可以,【程式04】會提到。
/*程式02*/
proc means data=vbar_1 noprint nway; class year; var time ; output out=vbar_2 (drop=_type_ _freq_ ) n=sum_time mean=mean_time;
run; |
【程式03】為Bar-Line Cahrt的主要程式。
/*程式03*/
ods html gpath = "e:\temp\" image_dpi=300 style=htmlblue;
ods graphics on / reset=all reset=index noborder height=6in width =6in antialiasmax=10000 imagename = "圖1" imagefmt =png ;
ods results off;
proc sgplot data=vbar_2; format sum_time comma8.0 mean_time 5.1; styleattrs backcolor=white; vbar year / response=sum_time datalabel =sum_time dataskin=pressed legendlabel="案件數"; vline year / response=mean_time y2axis datalabel =mean_time markers dataskin=pressed datalabelpos=data legendlabel="平均受理時間(秒)" ; refline 1000/ lineattrs=(pattern=2 color=gray thickness=0.5%) axis=y; xaxis label="年度"; yaxis label="件數" values=(900 to 1300 by 50 ); y2axis label="平均受理時間(秒)" values=( 110 to 180 by 10 ) offsetmin=0.6 labelpos=datacenter; title j=c h=14pt '歷年受理處理案件統計'; run;
ods results on; title;quit; |
「ods html」和「ods graphics」可讓統計圖直接輸出為檔案。
「vbar」為繪製(垂直)長條圖主要語法。如果要改為水平長條圖可用hbar。
「vline」為繪製(垂直)折線圖主要語法。如果要改為水平折線圖可用hline。其中語法y2axis為宣告折線圖的軸要用第二Y軸。
「refline」繪製參考線。於Y軸數值為1000的位置繪製一條參考線。
「xaxis」修改X軸。
「yaxis」修改Y軸。
「y2axis」修改第二Y軸。offsetmin將第二Y軸直到高度60%的位置。
「title」設定標題文字和格式。
【程式04】為直接使用原始資料等,以SGPLOT內建的統計功能產生統計量,同時於折線圖上加上標準差。主要差別請看有底線的語法。於實務上,【程式04】的方法比較實用。
/*程式04*/
ods html gpath = "e:\temp\" image_dpi=300 style=htmlblue;
ods graphics on / reset=all reset=index noborder height=6in width =6in antialiasmax=10000 imagename = "圖2" imagefmt =png ;
ods results off;
proc sgplot data=vbar_1; format i comma8.0 time 5.1; styleattrs backcolor=white; vbar year / response=i STAT=FREQ datalabel =i dataskin=pressed legendlabel="案件數"; vline year / response=time STAT=MEAN LIMITSTAT=STDDEV y2axis datalabel =time markers dataskin=pressed datalabelpos=data legendlabel="平均受理時間(秒)" ; refline 1000/ lineattrs=(pattern=2 color=gray thickness=0.5%) axis=y; xaxis label="年度"; yaxis label="件數" values=(900 to 1300 by 50 ); y2axis label="平均受理時間(秒)" values=( 110 to 180 by 10 ) offsetmin=0.6 labelpos=datacenter; title j=c h=14pt '歷年受理處理案件統計'; run;
ods results on; title;quit; |
-------相關連結------
沒有留言:
張貼留言