如何把多張圖片放在一頁裡面,這算困擾我很久的問題,當然我知道Greplay可以用,大致上我也會用,但我總覺得預設的template不是很好用,終於在SUGI發現了Kevin P. Delaney寫的文章,不只簡單教了如何把多張圖片放在同一頁上,還教如何將圖片轉成PDF檔。
主要參考文章:
Multiple Graphs on One Page: The Easy Way (PDF) and the Hard Way (RTF)
ODS LAYOUT: Arranging ODS Output as You See Fit
先提如何將圖片放在一個PDF檔案中,其實語法相當的簡單。可以分為三步驟,1:打開一個PDF檔案。2:想要畫的SAS圖形。3:完成繪圖把該PDF檔關閉。
1:ODS PDF file="你想放的路徑(例如:c:\temp\graph.pdf)";
2:SAS/Grasph 語法;
3:ODS PDF close;
來做一個簡單的範例,先產生一堆在不同自由度下T分佈的機率吧。
data t (drop=i j);
do j=1 to 30 by 2;
do i=-3 to 3 by 0.1;
df=j;
x=i;
y=probt(x,df);
output;
end;
end;
run;
接者用Gplot把圖畫出來然後放一個PDF檔中。
options nodate nonumber;
goption reset=all device=pdfc;
ods pdf file="C:\temp\CHart\chart_test_1.pdf" STARTPAGE=never;
proc gplot data=t;
title2 "Chart1";
where df le 15;
plot y*x=df;
symbol1 i=l;
run;quit;
ods pdf close;
我這裡只把DF小於15的資料畫出來。其實這樣就簡單完成把圖形放置PDF檔中的語法了,比較特別需要說明的為device=pdfc,這指令是和SAS說在PDF檔中圖片的格式,作者覺得pdfc的格式在PDF檔案中會有比較好的效果,相對於GIF或其他的圖片格式。
過來就是重頭戲了,如何把多張圖片放在一頁,在文中作者教了至少4中方法,我這裡只說明ODS LAYOUT這個指令,Layout是在SAS V9或V9.1才有的指令,我覺得還滿簡單的,相對於要去修改Greplay的版模。
在畫圖之前先簡單說明LAYOUT我會的語法。
ods layout Start width=20cm height=28cm;
ods region x=0% y=5% width=45% height=45%;
/*SAS/Graphs 語法1*/
ods region x=51% y=5% width=45% height=45%;
/*SAS/Graphs 語法2*/
ods region x=0% y=51% width=45% height=45%;
/*SAS/Graphs 語法3*/
ods region x=51% y=51% width=45% height=45%;
/*SAS/Graphs 語法4*/
ods layout end;
ODS LAYOUT:Start就是宣告我們要開始使用layout的指令,請想像我們手上拿一張白,width就是設定紙的寬度,我設定了20公分,height設定紙的高度,我設定28公分。
ODS REGION:宣告我下面的圖片要放在那個位置,
『x=51% y=5%』是說我將圖片要放在由左上角算起,整張紙X軸的第51%和Y軸上第5%的交叉點,當然這裡也可以用實際的長度單位來設定,例如x=11cm y=1cm。
『width=45% height=45%』設定我這一張圖片的大小,我是用相對長度,為整張紙45%寬度和紙長45%的長度,同樣也可以設為實際長度,如width=8cm height=10cm。
ods layout end:這也是必要語法,宣告上面的ODS LAYOUT設定結束。
依序設計這四張圖片想要放的位置就完成了,我隨意將剛剛製造的資料檔分成四張圖繪製,然後配合上面的語法就可完成我想要的工作了,完整的程式如下:
options nodate nonumber;
goption reset=all device=pdfc ;
ods pdf file="C:\temp\CHart\chart_test_2.pdf" STARTPAGE=never;
ods layout Start width=20cm height=28cm;
symbol1 i=l;
ods region x=0% y=5% width=45% height=45%;
proc gplot data=t;
title2 'Chart1';
where df le 5;
plot y*x=df/noframe;
run;
ods region x=51% y=5% width=45% height=45%;
proc gplot data=t;
title2 'Chart2';
where df ge 5 and df le 15;
plot y*x=df/noframe;
run;
ods region x=0% y=51% width=45% height=45%;
proc gplot data=t;
title2 'Chart3';
where df ge 15 and df le 25;
plot y*x=df/noframe;
run;
ods region x=51% y=51% width=45% height=45%;
proc gplot data=t;
title2 'Chart4';
where df ge 25 and df le 30;
plot y*x=df/noframe;
run;quit;
ods layout end;
ods pdf close;
結果如下圖:
利用PDF輸出和ODS LAYOUT的指令理論上就在一頁可繪製出多張高品值的圖形了,當然ODS LAYOUT應用不只用於圖形,想要結合表格和圖形,也是很OK的啦。