2015-04-21 5 views
1

Можно ли повернуть метки оси X в SAS SGPLOT так, чтобы они были перпендикулярными (при 90 градусах по оси x)? Опция fitpolicy поворачивается на 45 градусов, но это не совсем то, что мне нужно.Как повернуть метки оси X в графе SAS SGPLOT так, чтобы они были перпендикулярными (при 90 градусах по оси x)

код SAS:

ods pdf style = custom file=''; 
proc sgplot data = filename; 
series x = date y = unemployment_rate_15_24/lineattrs = (color = CX963634 thickness = 2 pattern=solid); 
series x = date y = unemployment_rate_15_/lineattrs = (color = CX538DD5 thickness = 2 pattern=solid); 
xaxis type=time fitpolicy=rotatethin notimesplit interval=year offsetmax=0 label = ' ' values = ("28FEB1995"d to "28FEB2015"d by year); 
yaxis label = ' ' values = (0 to 18 by 2); 
x2axis display=(nolabel novalues); 
keylegend/location = inside position = topright; 
label unemployment_rate_15_24 = "Youth (15-24 years) unemployment rate"; 
label unemployment_rate_15_ = "Overall (15+ years) unemployment rate"; 
run; 
ods pdf close; 

Я также попытался использовать Graph Template Language в SAS. Вот equiavalent код, написанный в GTL:

proc template; 
define statgraph mysgplot; 
begingraph; 
layout overlay/
cycleattrs=true 
xaxisopts=(label=" " offsetmax=0 type=time timeopts=(tickvaluelist=(12842 13207 13573 13938 14303 14668 15034 15399 15764 16129 16495 16860 17225 17590 17956 18321 18686 19051 19417 19782 20147) viewmin=12842 viewmax=20147 tickvaluefitpolicy=rotatethin splittickvalue=false interval=year)) 
yaxisopts=(label=" " type=linear linearopts=(tickvaluelist=(0 2 4 6 8 10 12 14 16 18) viewmin=0 viewmax=18)) 
x2axisopts=(display=(ticks line) type=auto); 
seriesplot x='date'n y='unemployment_rate_15_24'n/primary=true lineattrs=(color=cx963634 pattern=1 thickness=2) legendlabel="Youth (15-24 years) unemployment rate" NAME="SERIES"; 
seriesplot x='date'n y='unemployment_rate_15_'n/lineattrs=(color=cx538dd5 pattern=1 thickness=2) legendlabel="Overall (15+ years) unemployment rate" NAME="SERIES1"; 
discretelegend "SERIES" "SERIES1"/location=inside halign=right valign=top; 
endlayout; 
endgraph; 
end; 
run; 

proc sgrender data = filename template=mysgplot; 
run; 
+0

христианин, это будет отлично, если вы можете добавить небольшой набор данных примеров или использовать один из существующих, например, 'SASHELP'. –

+1

Какая версия SAS у вас есть? – Reeza

+0

Просто используйте любой набор данных, который у вас есть ... У меня версия EG 4.3. – Christian

ответ

1

Я не верю, что это можно сделать в SGPLOT без использования аннотаций. У них есть хороший фрагмент кода для этого с аннотацией here.

С GTL, в 9.4 вводят TICKVALUEROTATION, который необходимо использовать в тандеме с TICKVALUEFITPOLICY=ROTATE|ROTATEALWAYS и SPLITTICKVALUE=FALSE. Смотрите это:

data testdata; 
    call streaminit(7); 
    do timevar = 12900 to 16900 by 500; 
    age=10+rand('Normal',5,2); 
    output; 
    end; 
    format timevar date9.; 
run; 

proc template; 
define statgraph mysgplot; 
begingraph; 
layout overlay/
cycleattrs=true 
xaxisopts=(label=" " offsetmax=0 type=time 
    timeopts=(tickvaluerotation=VERTICAL TICKVALUEFITPOLICY=rotatealways splittickvalue=false)) 
yaxisopts=(label=" " type=linear linearopts=(tickvaluelist=(0 2 4 6 8 10 12 14 16 18) viewmin=0 viewmax=18)) 
x2axisopts=(display=(ticks line) type=auto); 
seriesplot x=timevar y=age 
    /lineattrs=(color=cx538dd5 pattern=1 thickness=2) legendlabel="Overall (15+ years) unemployment rate" NAME="SERIES1"; 
discretelegend "SERIES" "SERIES1"/location=inside halign=right valign=top; 
endlayout; 
endgraph; 
end; 
run; 

proc sgrender data = testdata template=mysgplot; 
run; 

Я немного упростить ось, чтобы убедиться, он работает должным образом, но я думаю, что большинство из ваших утверждений оси в порядке.

В 9.3 или более ранних версиях, я думаю, вы застряли в аннотации или на 45 градусов. Или посмотрите, можете ли вы убедить SCATTERPLOT рисовать за пределами осей. Или, возможно, используя SERIESPLOT и SCATTERPLOT, чтобы нарисовать собственные оси, но это немного похоже на верх.

Вот что приведенный выше код выглядит следующим образом: Rendered Image

+0

Я получаю следующее сообщение об ошибке: ERROR 772-580: Синтаксическая ошибка: ожидается постоянная или динамическая. Это имеет для вас смысл Джо? – Christian

+0

Не без контекста. – Joe

+0

Ну, если я просто запускаю шаблон proc, я получаю это сообщение об ошибке. Работает ли это для вас? Я не уверен, что еще делать! – Christian

Смежные вопросы