關(guān)于SAS畫圖中軸的第一篇請參考:
先講幾個通識點:
①:紅框這種網(wǎng)格線叫做grid
②:藍(lán)框這一個個刻度叫做tick,那tick左邊的數(shù)字就叫做tickvalue了。
③:橘黃框就叫做label了。

所以如果你想修改label的屬性,就得在GTL里面搜索包含“l(fā)abel”這幾個關(guān)鍵詞的選項,比如LABELATTRS,LABELPOSITION;如果你想修改tick的屬性,就得在GTL里面搜索包含“tick”這幾個關(guān)鍵詞的選項,比如TICKSTYLE,TICKVALUEATTRS。
今天繼續(xù)介紹軸的幾個屬性:
1)刻度顯示,如何達(dá)到圖中藍(lán)框的效果,小刻度不顯示值,大刻度顯示值,這個屬于linearopts的屬性。也就是這段程序
linearopts=(tickvaluepriority=true MINORTICKS=TRUE tickvaluesequence=(start=0 end=50 increment=10))
ods listing close;
ods rtf file = "XXXXX\commnplot.rtf" ;
proc template;
define statgraph scatterplot;
begingraph;
entrytitle 'Mileage by Horsepower';
layout overlay / xaxisopts=(griddisplay=on
linearopts=(tickvaluelist=(150 200 250 300 350)))
yaxisopts=(griddisplay=on
linearopts=(tickvaluepriority=true MINORTICKS=TRUE
tickvaluesequence=(start=0 end=50 increment=10))
);
scatterplot x=horsepower y=mpg_city;
endlayout;
endgraph;
end;
run;
/*ods listing style=htmlblue;*/
proc sgrender template=scatterplot data=cars;
run;
所以能實現(xiàn)圖中的效果,就是通過這個
MINORTICKS=TRUE,如果我改成FALSE,可以看到刻度與刻度之間的小刻度(minor tick)消失了。如果你的坐標(biāo)刻度值是3,5,11,23這樣不規(guī)律的值,
MINORTICKS=TRUE就不起作用了。

2)OFFSETMAX:作用是在軸的最大末端保留一個區(qū)域。同時在這個區(qū)域不顯示任何刻度。取值是0-1,我們?nèi)∫粋€offsetmax=0.3看看,可以看到預(yù)留了一個挺大的空白區(qū)域。
我程序中不同選項之間空了很多行,就是提醒大家不同選項之間是獨立的,有的人可能會把一些子選項加到錯誤的母選項中,比如說把label="see me see me"加到linearopts里面。
proc template;
define statgraph scatterplot;
begingraph;
entrytitle 'Mileage by Horsepower';
layout overlay /
xaxisopts=(griddisplay=on
linearopts=(tickvaluelist=(150 200 250 300 350))
)
yaxisopts=(griddisplay=on
linearopts=(tickvaluepriority=true MINORTICKS=false
tickvaluesequence=(start=0 end=60 increment=10))
label="see me see me"
offsetmax=0.3
);
scatterplot x=horsepower y=mpg_city;
endlayout;
endgraph;
end;
run;

3)OFFSETMIN:跟OFFSETMAX相反的就是OFFSETMIN了,我們設(shè)置offsetmin=0.3看看

注意,我加的offsetmin=0.3和offsetmax=0.3都是在Y軸里面,也就是yaxisopts=()這里面,所以控制的是Y軸的空白區(qū)域;如果你想控制X軸的空白區(qū)域,那么加到xaxisopts=()就好了。
注意offsetmin+offsetmax不能超過1,否則不起作用
NOTE: The sum of OFFSETMIN and OFFSETMAX cannot be greater than 1.0. The defaults will be used.
4)VIEWMAX=:跟offsetmin/offsetmax長得相似,并且可能搞混的就是VIEWMAX/VIEWMIN。
VIEWMAX/VIEWMIN:指定要包含在顯示中的最大/最小數(shù)據(jù)值,比如我現(xiàn)在注釋tickvaluesequence,定義一個最大的VIEWMAX=50,
proc template;
define statgraph scatterplot;
begingraph;
entrytitle 'Mileage by Horsepower';
layout overlay /
xaxisopts=(griddisplay=on
/* linearopts=(tickvaluelist=(150 200 250 300 350))*/
)
yaxisopts=(griddisplay=on
linearopts=(tickvaluepriority=true MINORTICKS=false
/*tickvaluesequence=(start=0 end=60 increment=10)*/ viewmax=50)
label="see me see me"
offsetmin=0.1
);
scatterplot x=horsepower y=mpg_city;
endlayout;
endgraph;
end;
run;

看到展示的最大數(shù)值只有50,50以上的就不顯示了。
需要注意的是,如果你加上了tickvaluepriority=true(默認(rèn)選項是FALSE),擴展軸數(shù)據(jù)范圍(但不減少它),以包含由TICKVALUELIST=選項指定的最小值和最大值。如果用戶指定的最小值和最大值在數(shù)據(jù)范圍內(nèi),則此選項不起作用。
我們可以來看看區(qū)別:
linearopts=(tickvaluepriority=true MINORTICKS=false
tickvaluelist=(10 20 30 40 50 ) viewmax=50)
我的軸刻度只到50,但是我們知道數(shù)據(jù)中有60的數(shù)據(jù),然后我的tickvaluepriority選擇了true,也就是會拓展軸長度。需要注意的是,當(dāng)tickvaluepriority選擇了true時,VIEWMIN和VIEWMAX都會不起作用。

接著我改成FALSE,
TICKVALUEPRIORITY=FALSE只顯示TICKVALUELIST=選項指定的刻度值,這些值屬于由VIEWMIN=和VIEWMAX=選項設(shè)置的顯式數(shù)據(jù)范圍,或者由實際數(shù)據(jù)最小值和數(shù)據(jù)最大值設(shè)置的隱式數(shù)據(jù)范圍。
linearopts=(tickvaluepriority=false MINORTICKS=false
tickvaluelist=(10 20 30 40 50 ) viewmax=55)

改成60
linearopts=(tickvaluepriority=false MINORTICKS=false
tickvaluelist=(10 20 30 40 50 ) viewmax=60)

所以只有在tickvaluepriority=true時,VIEWMIN和VIEWMAX才會失效,tickvaluepriority=false時,這時候只看VIEWMIN和VIEWMAX或者數(shù)據(jù)實際值了。
最后我們假設(shè)沒有tickvaluepriority這個選項(默認(rèn)也是false),這時候就根據(jù)實際數(shù)據(jù)來設(shè)置VIEWMIN和VIEWMAX,
linearopts=( MINORTICKS=false
tickvaluelist=(10 20 30 40 50 ) viewmin=30 viewmax=60)
輸出如下:
