Стилизация разных групп в SAS SGPLOT - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать график с несколькими группировками.Пример кода данных:

proc sort data=sashelp.cars out=cars;
  by DriveTrain;
  where n(Cylinders);
run;

Я использовал dattrmap, чтобы добавить различные цвета к различным группам следующим образом:

  data MyAttrMap;
   length MARKERCOLOR CONTRASTCOLOR color $25;
   ID='myreg'; value='All' ; MARKERCOLOR='red'; color='red'; MARKERSYMBOL = 'circle'; output;
   ID='myreg'; value='Front'; MARKERCOLOR='blue'; color='blue'; MARKERSYMBOL = 'circle'; output;
   ID='myreg1'; value='USA'; CONTRASTCOLOR='yellow'; color='yellow'; output;
   ID='myreg1'; value='Europe'; CONTRASTCOLOR='black'; color='black'; output;
   ID='myreg1'; value='Asia'; CONTRASTCOLOR='green'; color='green'; >       >       output;
  run;

  proc sgplot data=work.cars
   dattrmap=MyAttrMap;
   hbarparm category=enginesize response=horsepower/group=DriveTrain barwidth=.5 attrid=myreg name='dt';
  scatter X=MPG_City Y=enginesize /group=origin name='origin' attrid=myreg1;
   keylegend 'dt' / title='Drive Train' location=outside position=bottom;
  keylegend 'origin' / title='Origin' location=outside position=bottom;
  where DriveTrain in ('All' 'Front');
  run; 

Attrmap был создан с намерением иметь разные цвета для Origin и DriveTrain, однако, когда создается вывод, те же цвета, примененные к Origin, применяются к DriveTrain.

Я также пытался использовать шаблон Proc для изменения стиля следующим образом:

  /*Different colors from the ones used above*/
  proc template;
   define style MyStyle;
  parent = Styles.Listing;
   STYLE graphdata1 /
                MARKERSYMBOL = 'circle'
                 LINESTYLE = 1
                 CONTRASTCOLOR = liypk
                 COLOR = red
          ;
          STYLE graphdata2 /
                MARKERSYMBOL = 'circle'
                 LINESTYLE = 1
                 CONTRASTCOLOR = stybr
                 COLOR = yellow
          ;
          STYLE graphdata3 /
                MARKERSYMBOL = 'circle'
                 LINESTYLE = 1
               CONTRASTCOLOR = mog
                COLOR = green
         ;
          STYLE graphdata4 /
                MARKERSYMBOL = 'circle'
                LINESTYLE = 1
                CONTRASTCOLOR = brown
                COLOR = pink
         ;
          STYLE graphdata5 /
                MARKERSYMBOL = 'circle'
                LINESTYLE = 1
                CONTRASTCOLOR = black
                 COLOR = grey
          ;
   end;
  run;

Но все же были получены те же результаты.Может кто-нибудь сказать мне, что я делаю неправильно или как заставить это работать?Я использую SAS 9.3.

Другая проблема, с которой я сталкиваюсь, - это сортировка.Я хочу отсортировать столбцы так, чтобы одно и то же происхождение появлялось вместе и по лошадиным силам.Я отсортировал, используя sortkey=national, и использовал grouporder=data в соответствии с рекомендациями SAS, но это не изменило порядок вывода.Любая помощь приветствуется.

Here is the output.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Проверьте ваш набор данных карты атрибутов. Поскольку вы не указали длины столбцов Value и ID , они усекаются и не соответствуют вашим данным, поэтому они не назначаются правильно.

Упрощая вашу проблему, я назначил все элементы для тестирования:

Я также предположил, что это было смоделировано из-за ошибок в журнале.

proc sort data=sashelp.cars out=cars;
    by DriveTrain;
    where n(Cylinders);
run;

data MyAttrMap;
    length ID $10. linecolor MARKERCOLOR CONTRASTCOLOR fillcolor color value $25;
    ID='myreg1';
    value='USA';
    contrastcolor='cxaf8dc3';
    LINECOLOR='cxaf8dc3';
    MARKERCOLOR='cxaf8dc3';
    fillcolor='cxaf8dc3';
    output;
    ID='myreg1';
    value='Europe';
    contrastcolor='cx7fbf7b';
    LINECOLOR='cx7fbf7b';
    MARKERCOLOR='cx7fbf7b';
    fillcolor='cx7fbf7b';
    output;
    ID='myreg1';
    value='Asia';
    contrastcolor='cx91bfdb';
    LINECOLOR='cxfc8d59';
    MARKERCOLOR='cxfc8d59';
    fillcolor='cxfc8d59';
    output;
run;

ods graphics / attrpriority=none;

proc sgplot data=work.cars dattrmap=MyAttrMap;
    scatter X=MPG_City Y=enginesize /group=origin name='origin' attrid=myreg1;
    where DriveTrain in ('All' 'Front');
run;
0 голосов
/ 22 января 2019

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

ods html style=normal;
ods graphics / height=900px;

proc sgpanel data=sashelp.cars;
  panelby origin 
  / columns=3
  ;

  hbar enginesize 
  / group=drivetrain
    groupdisplay=cluster
  ;

  where 
    DriveTrain in ('Front', 'All')
    and not missing(cylinders)
  ;
run;

enter image description here

...