通過GPLOT過程制作圖形


通過GPLOT過程制作圖形

和數據報表一樣,圖形也是展現數據的重要方法,圖形的直觀效果是數據報表無法替代的。SAS/GRAPH是SAS進行數據可視化展現的重 要組成部分,具有強大的作圖功能。可以展現的圖形包括以下這些:

  • ·散點圖與連線圖(PLOTS)
  • ·圖表(CHARTS)
  • ·地圖(MAPS)
  • ·三維圖(3D GRAPHICS)
  • ·幻燈片(TXET SLIDES)

 

主要介紹SAS/GRAPH中兩個基本的作圖過程:作圖過程(GPLOT)和圖表過程(GCHART)。讀者有興趣可以參考SAS幫助文檔學習更多的作圖過程。

使用GPLOT過程可以制作平面的散點圖和連線圖。平面的散點圖 就是以數據集中某兩個變量作為縱坐標和橫坐標,以每個觀測為一個數 據點,數據集中的多個觀測就形成一幅散點圖,連線圖就是將分散的數 據點用直線或者曲線連接起來。散點圖和連線圖在分析比較數據的趨勢時比較常用。

1 制作散點圖

使用GPLOT過程制作散點圖的基本語法如下:

PROC  GPLOT  DATA=數據集;
PLOT  縱坐標變量*橫坐標變量;
RUN;
PLOT語句;
…
RUN; 
QUIT;

一個GPLOT過程中可以使用多個RUN語句,並以QUIT語句結尾。 每個RUN語句中也可以使用多個PLOT語句。

  • ·在一個PROC語句中使用多個RUN語句,可以針對不同的圖形使用 不同的WHERE語句,利用全局語句定義不同的標題、腳注、坐標軸等 屬性。在SAS/GRAPH中GPLOT、GCHART、GMAP和GSLIDE支持使 用多個RUN語句。
  • ·QUIT語句表示結束該PROC步。如果在RUN語句后面出現其他的PROC步或者DATA步,該PROC步也會自動結束。

數據集ex.sales_year中包含了某公司自1998年至今在北美和 歐洲的銷售數據(交易數量和銷售金額)。其中變量如下:年份(Year)、N_Transactions(北美的交易數量)、N_Amount(北美的銷售金額)、E_Transactions(歐洲的交易數量)、E_Amount(歐洲的銷 售金額)。要求制作一個散點圖,顯示每年的北美銷售金額。

proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year;
run;
quit;

 這是最簡單的散點圖,橫坐標為Year,縱坐標為N_Amount,圖形的元素都使用系統的默認設置,每個數據在圖上顯示為一個“+”號。

1.選項RESET=

由於圖形的展現涉及的方面很多,包括顏色、線型、字體等,因此 圖形選項也很多,在制作圖形時可以使用GOPTIONS語句來控制各種選項。在開始學習制作圖形時,不妨使用選項RESET=ALL,它可使所有的圖形選項都恢復系統默認的設置。需要注意的是,在使用該選項之 后,TITLE語句與FOOTNOTE語句中指定的標題和腳注也將被取消。

2.使用TITLE和FOOTNOTE語句設置標題和腳注和前面制作報表一樣,在作圖時也可以使用TITLE語句和FOOTNOTE語句在圖形上加入標題和腳注。需要注意的是,在 SAS/GRAPH中,TITLE語句和FOOTNOTE語句除了可以設定標題和腳 注的內容以外,還可以對其字體、大小、顏色進行設定。

在制作圖形時,TITLE語句和FOOTNOTE語句的使用形式如下:

TITLEn  選項 '標題內容'; 
FOOTNOTEn 選項 '腳注內容';

其中n=1~10,缺省時,n默認取值為1。TITLEn和FOOTNOTEn的更 新和置換規則和5.2.3節中介紹的一樣。 

將所有TITLE語句和FOOTNOTE語句恢復默認設置的方法有以下兩 種:

  • ·GOPTIONS RESET=(TITLE FOOTNOTE);
  • ·GOPTIONS RESET=GLOBAL;

TITLE語句和FOOTNOTE語句的常用選項

3.使用SYMBOL語句設置散點屬性

在圖5.27中,如果希望輸出的數據在圖上顯示為一個紅色的圓點,該如何進行設置呢?這時需要使用SYMBOL語句。在GPLOT過程中, SYMBOL語句用來設置散點的符號、顏色等屬性。使用形式如下:

SYMBOLn  選項;

其中,n是不同SYMBOL的序號,取值為1~255,缺省時默認取值1。SYMBOL語句和TITLE語句一樣是全局語句,可以出現在PROC步 前面或PROC步的程序中間。

將某個SYMBOL語句恢復為默認設置的方法如下:

SYMBOLn;

將所有SYMBOL語句都恢復為默認設置的方法如下:

GOPTIONS  RESET=SYMBOL;

在上例的散點圖中,將散點符號換成紅色的“.”。 示例代碼如下:

symbol  value=dot  cv=red;
proc  gplot  data=ex.sales_year;
title  f='Albany  Amt'  c=blue  h=3   u=2   'Yearly  Amount  in  North  America';
footnote  j=r  'Optimization  Solution  Co.  Ltd';
plot  N_Amount*Year;
run;
quit;
goptions  reset=all;

以上程序使用SYMBOL語句通過選項VALUE=將散點符號設置為圓 點(.),通過選項CV=將散點顏色設置為紅色。並且利用TITLE語句和 FOOTNOTE語句設置了標題和腳注的文字和屬性。

可在SYMBOL語句中用不同的選項來設置不同的屬性,下表SYMBOL語句中用於設置散點屬性的選項。

 

2 制作連線圖

SYMBOL語句可以使用選項INTERPOL=制作連線圖。語法如下:

SYMBOLn INTERPOL=插值方法;

選項INTERROL=可以簡寫為I=。其中插值方法主要有以下幾種。

  • ·NONE:表示不作連線圖,這是系統默認取值。
  • ·JOIN:表示將數據點按照數據集中出現的順序用直線連接。
  • ·SPLINE:表示使用光滑的插值曲線將數據點按照數據集中出現的 順序連接起來,並且使得曲線經過每個數據點。
  • ·SMnn:表示用光滑的插值曲線來擬合數據點,曲線可以不經過數據點,nn的取值為0~99,取值越大,插值曲線的光滑程度越高。
  • ·Rxyzzzmm:表示根據數據點作回歸線,x表示回歸類型,取值為L、Q、C;y表示回歸線是否過數據點,取值為0、1;zzz表示置信限,取值為CLM、CLI;mm表示置信水平。
  • ·NEEDLE:表示針對每個點畫一條從點到橫坐標軸的連線。
  • ·STEPxyz:表示制作階梯圖,x表示數據點在階梯上的位置,取值為L、R、C;y表示是否用豎線連接各階梯;z表示是否對數據按橫坐標 變量排序。

同時,SYMBOL語句中還提供了更多的選項來控制連線線型、粗 細、顏色等屬性。如表所示是SYMBOL語句中常用的設置連線屬性的選項。 

 

下面將上圖的散點用藍色的實線連接起來。示例代碼如 下:

symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year;
run;
quit;
goptions  reset=all;

當定義了多個SYMBOL語句時,可以使用以下語法來指定圖形使用 特定的SYMBOL語句設置的屬性:PLOT縱坐標變量*橫坐標變量=n;

該語句表示該散點圖使用SYMBOLn設置的屬性。

1.使用選項HAXIS=和VAXIS=控制坐標軸取值范圍

在上圖中,可觀察到橫坐標的取值范圍為1990~2020。其實我們 的數據集中年份截止到2012年。如果想使得圖形中橫坐標的取值范圍為1990~2012,該如何設置呢?作圖語句中提供了選項HAXIS=和選項VAXIS=,可以用來分別設定橫坐標和縱坐標的取值范圍。如:

symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year  /haxis=1990  to  2012 by   5;
run;
quit;
goptions  reset=all;

除了這樣直接定義坐標軸的取值范圍以外,還可以通過AXIS語句 來進行這一操作。AXIS語句除了可以設定坐標軸范圍,還可以對坐標 軸進行更加豐富的設置。

2.使用AXIS語句設置坐標軸屬性

通過AXIS語句可以設定坐標軸的刻度范圍、顏色、描述標簽、每 兩個主刻度中間次刻度的個數等屬性。和SYMBOL語句一樣,AXIS語 句也是全局語句,它也可以用於其他作圖過程中坐標軸的設置。AXIS語句的形式如下:

AXISn  選項;

其中,n是不同AXIS的序號,取值為1~99,缺省時默認取值為1。 SYMBOL語句和TITLE語句一樣是全局語句,可以出現在PROC步前面 或PROC步的程序中間。

將某個AXIS語句恢復為默認設置的方法如下:

AXISn;

將所有AXIS語句都恢復為默認設置的方法如下:

GOPTIONS  RESET=AXIS;

GPLOT過程中使用AXIS語句的形式如下:

PROC  GPLOT  DATA=數據集;
PLOT  縱坐標變量*橫坐標變量 /HAXIS=AXISn  VAXIS=AXISm;
AXISn  選項;
RUN;
QUIT;

其中,HAXIS=AXISn指明縱坐標用AXISn語句設定的屬性, VAXIS=AXISm指明橫坐標用AXISm語句設定的屬性,AXISn語句可以 出現在PROC步前面或者PROC步中間。

在以下的連線圖中對橫坐標和縱坐標的主刻度和次刻度進行設定。 示例代碼如下:

axis1   order=(1990  to  2012 by   5)  ;
axis2   order=(13000  to  20000 by   1000)
minor=(color=blue  height=0.25  number=1);
symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year/haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

在上面的程序中,先通過AXIS語句設置了AXIS1和AXIS2,在 AXIS1中規定坐標軸的取值為1990~2012,每5個點一個主刻度,每個主 刻度中間有一個次刻度,次刻度顯示為藍色,同理還定義了AXIS2。在 PLOT語句中,使用選項HAXIS=AXIS1和VAXIS=AXIS2分別指定了橫 坐標和縱坐標調用AXIS1和AXIS2設置的屬性。

AXIS語句中的選項很多,用法也非常豐富,這里簡單羅列了一些 常用的選項及用法示例

 

3 制作多幅圖形

前面提到在一個GPLOT過程中可以使用多個PLOT語句,這時每個 語句都可以制作一幅單獨的圖形。其實,使用一個PLOT語句也可以制 作多幅圖形。使用語法如下:

PLOT  縱坐標變量1*橫坐標變量1   縱坐標變量2*橫坐標變量2   <  …   / 選項>;

繪制北美銷售金額連線圖和歐洲銷售金額連線圖。 示例代碼如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  E_Amount*Year/haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

 

輸出內容如圖5.31所示。 上述程序制作了兩幅圖,第一幅是由PLOT語句中的N_Amount*Year制作的,第二幅是由E_Amount*Year制作的,兩幅圖上 橫縱坐標的尺度都相同。

為了進行比較,有時需要將多條連線繪制在同一幅圖形中。例如, 為了比較北美和歐洲的銷售及變化趨勢,除了上面的做法,更方便的是 將北美和歐洲的銷售連線圖畫在同一幅圖形中。又如在進行時間序列分 析時,為了比較預測值和實際值的趨勢及大小,也需要在同一幅圖中比較。

 

在同一幅圖形中繪制多條連線有以下3種方法:

  • ·使用選項OVERLAY疊加圖形。
  • ·使用PLOT2語句疊加圖形。
  • ·使用分組變量制作多條連線圖。 下面將具體介紹每種方法及其使用場景,讀者可以根據具體的數據集選用不同的方法。

 1.使用選項OVERLAY疊加圖形(單軸

使用選項OVERLAY可以將同一個PLOT語句中的多個圖形展現在 同一幅圖形中。

將上例中的兩條連線繪制在同一圖形中。 示例代碼如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
symbol1  value=dot  cv=red interpol=join  ci=red;
symbol2  value=#  cv=green  interpol=join  ci=green  line=4;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  E_Amount*Year/overlay  legend  haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

由於兩個連線在同一圖形中,系統約定由SYMBOL1語句設定第一條連線,SYMBOL2語句設定第二條連線。所以當有多條連線時,應該 以不同序號的SYMBOL語句分別設定相應的連線屬性。

 

除非特別指定,否則每個SYMBOL語句設定的屬性在一個作圖過程中只使用一次。

當同一圖形中有多條連線時,為了區分連線的含義,需要使用選項 LEGEND添加圖例。上述程序中,通過圖形下方的圖例,可以很清楚地 區分紅線代表北美的銷售額,黃線代表歐洲的銷售額。

 2.使用PLOT2語句疊加圖形(雙軸

使用PLOT2語句可以為其所指定的縱坐標變量在圖的右側設立一條 垂直坐標軸,這樣不同的縱坐標變量就可以使用不同的縱軸尺度。 PLOT2語句的使用方法和PLOT語句一樣。使用語法如下:

PLOT2  縱坐標變量1*橫坐標變量1   <縱坐標變量2*橫坐標變量2     …   >  </  選項>;
axis1    order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2    order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
axis3    major=(number=8) minor=(number=1);
symbol1  value=dot  cv=red interpol=join  ci=red;
symbol2  value=diamond  cv=green  height=2  interpol=join  ci=green  line=10;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  /legend  haxis=axis1  vaxis=axis2;
plot2  N_Transations*Year/legend  vaxis=axis3;
run;
quit;
goptions  reset=all;

在上述程序中,需要注意以下幾點:

  • ·在GPLOT過程中使用PLOT2語句時,必須使用PLOT語句。
  • ·如果需要顯示所有圖形的圖例,需要在PLOT語句和PLOT2語句中 都使用選項LEGEND
  • ·使用PLOT2語句,可以使用選項VAXIS=專門設定右邊坐標軸的屬性。

3.使用分組變量制作多條連線圖

前面在介紹疊加圖形時可看到,不同圖形的縱坐標變量都存儲在數 據集中的不同字段下。當縱坐標變量的數據都存儲在數據集中的同一字 段下時,如何制作多條連線圖?這時就需要指定第3個變量,根據第3個 變量的不同取值,在同一幅圖中制作多條連線圖,也稱這第3個變量為 分組變量。其基本語法如下:PLOT縱坐標變量*橫坐標變量=分組變量</選項>;當使用分組變量時,系統默認提供圖例。  

數據集ex.sales_year_by_area中是全球4個地區的歷年銷售數量和銷售金額的數據,包含4個變量:年份(Year)、銷售數量(Transactions)、銷售金額(Amount)、地區(Area)。現在要在同 一幅圖中制作多條連線圖展現每個地區歷年銷售金額的情況。

示例代碼如下:

axis1 order=(1990  to  2012 by   5)
minor=(color=blue  number=1);
axis2 minor=(color=blue  height=0.25  number=1);
symbol  value=:  height=2  interpol=join;
proc  gplot  data=ex.sales_year_by_area;
title  'Yearly  Amount  Series  By  Area';
plot  Amount*Year=Area/haxis=axis1  vaxis=axis2  ;
run;
quit;
goptions  reset=all;

在上述程序中,只使用了一個SYMBOL語句,定義了插值方法、散 點符號和大小,但是沒有指定顏色。因此在圖形中,每條連線都使用了 相同的散點符號,不一樣的顏色。

SYMBOL語句中沒有指定顏色時,該語句中定義的屬性將被重復使用,顏色按照選項COLORS=中指定的顏色或者系統顏色列表中的顏色依次循環調用。 

4.使用LEGEND語句設置圖例屬性

當一幅圖形中有多條連線時,為了辨識每條連線的含義,可在 PLOT語句中使用選項LEGEND在圖形中增加圖例,此時選項LEGEND 使用了默認的方式顯示圖例。這里將介紹如何使用LEGEND語句對圖例 的大小、布局、邊框、位置及圖例中文字的屬性進行更加豐富的設置。

LEGEND語句的使用方法如下:

LEGENDn  選項;

其中n=1~99,默認取值為1。LEGEND語句是全局語句,更新規則 和SYMBOL語句一樣。

將某個LEGEND語句恢復為默認設置的方法如下:

LEGENDn;

取消所有LEGEND語句的方法如下:

GOPTIONS  RESET=LEGEND;

GPLOT過程中繪制多條連線圖時,調用LEGEND語句設置的圖 例屬性的方法如下:

LEGEND=LEGENDn; 

將例5.28中的圖例放在連線圖橫坐標下面的中間部分,分兩排排列,並將圖例區加上深藍的邊框和淺藍的陰影。

示例代碼如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   minor=(color=blue  height=0.25  number=1);
legend1  cborder=blue  cshadow=lightblue  across=2  position=(bottom  center)  label= (color=lightpurple  height=1.5  font='Courier  New'  'Global');
symbol  value=:  height=2  interpol=join;
proc  gplot  data=ex.sales_year_by_area;
title  'Yearly  Amount  Series  By  Area';
plot  Amount*Year=Area/haxis=axis1  vaxis=axis2  legend=legend1;
run;
quit;
goptions  reset=all;

上述程序中使用LEGEND1語句設置了圖例的屬性,並在PLOT語句 中調用了LEGEND1。 

4 制作氣泡圖

GPLOT過程中可以使用BUBBLE語句制作氣泡圖。基本語法如 下:

BUBBLE  縱坐標變量*橫坐標變量=氣泡變量  </  選項>  ;

氣泡圖有3個維度,包括:縱坐標變量、橫坐標變量和氣泡變量, 它們都是數據集中的變量,其中縱坐標變量和橫坐標變量確定氣泡的位 置,氣泡變量確定氣泡的大小,所以氣泡變量必須是數值型變量。

利用數據集ex.sales_year制作氣泡圖,反映歐洲地區歷年的 銷售情況。

示例代碼如下:

axis2   minor=(color=blue  height=0.25  number=1);
proc  gplot  data=ex.sales_year;
title  'Yearly  Sales  Overview';
bubble  E_Amount*Year=E_Transactions/vaxis=axis2 bcolor=red  bsize=12;
where  year>=1999;
run;
quit;
goptions  reset=all;

在上述代碼中縱坐標為銷售金額,橫坐標為年份,銷售數量決定了氣泡的大小,並且在BUBBLE語句使用了選項BCOLOR=和BSIZE=來設 定氣泡的顯示屬性。在圖5.36的方框中,兩個氣泡分別表示2010年和2011年的銷售情況,從銷售金額來看,2011年比2010年有所上升(氣泡 所處的位置升高),從銷售數量來看,2011年比2010年下降了(氣泡的 大小變化),由此可以推斷,單位數量的銷售金額從2010年到2011年提 高了。可見,使用氣泡圖能更加直觀地反映多個維度的信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM