Следите за порядком цветов группы SGPlot - PullRequest
0 голосов
/ 03 октября 2018

Я бы хотел сохранить порядок цветов, показанных на гистограмме sgplot.Мне все равно, какие цвета используются, я только хотел бы сохранить порядок цветов.

В приведенном ниже примере завод 1 синий на первом графике и красный на втором.Как я могу убедиться, что растения получат одинаковые цвета?

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

Data A;
  Input Scenario $ Product $ Plant $ Quantity;
  Datalines;
XX A 1 100
XX B 1 200
XX C 1 300
XX A 2 333
XX D 2 888
YY F 1 100
YY B 1 200
YY C 1 300
YY A 2 333
YY D 2 888
;;;

Proc SGPlot Data=A (Where=(Scenario = 'XX')) ;
  VBar Product / Response=Quantity Stat=Sum Group=Plant 
               Dataskin=Sheen Transparency=0.4 
               GroupOrder=Ascending;
Run;

Proc SGPlot Data=A (Where=(Scenario = 'YY')) ;
  VBar Product / Response=Quantity Stat=Sum Group=Plant 
               Dataskin=Sheen Transparency=0.4 
               GroupOrder=Ascending;
Run;

, что дает: enter image description here

и: enter image description here

1 Ответ

0 голосов
/ 04 октября 2018

В конце концов я сделал это (что кажется слишком сложным, мне все еще интересны лучшие ответы, чем мои, цвета разные, но последовательные):

Data A;
  Input Scenario $ Product $ Plant $ Quantity;
  Datalines;
XX A 1 100
XX B 1 200
XX C 1 300
XX A 2 333
XX D 2 888
YY F 1 100
YY B 1 200
YY C 1 300
YY A 2 333
YY D 2 888
;;;

* Could not find SAS-standard;
Data MyColorList;
  Length FillColor $7.;
  Input FillColor $ @@;
  Nr = _N_;
  Datalines;
#00FF00 #00FFFF #70DB93 #D9D919  
#A67D3D #FF7F00 #855E42 #545454  
#238E23 #4E2F2F #8E236B #DB70DB  
#8C1717 #DB9370 #D8D8BF
;;;

%Let VarName = Plant;
Proc SQL;
  Create Table DAttrs As Select Distinct &VarName. As Value From A Order By     &VarName.;
Quit;

Data DAttrs (Drop=rc Nr);
  If _N_ eq 1 Then Do;
    Declare Hash H (Dataset: "MyColorList");
    H.Definekey('Nr');
    H.Definedata('FillColor');
    H.Definedone();
    If 0 Then Set MyColorList;
  End;
  Set DAttrs;
  ID = "&VarName.";
  Nr = mod(_N_, 15);
  rc = H.Find();
Run;

Proc SGPlot Data=A (Where=(Scenario = 'XX')) 
            DAttrMap=DAttrs ;
  VBar Product / Response=Quantity Stat=Sum 
                 Group=&VarName. AttrID=&VarName. 
             GroupOrder=ascending Dataskin=Sheen 
                 Transparency=0.4 NoStatLabel ;
Run;

Proc SGPlot Data=A (Where=(Scenario = 'YY')) 
            DAttrMap=DAttrs ;
  VBar Product / Response=Quantity Stat=Sum 
             Group=&VarName. AttrID=&VarName. 
             GroupOrder=ascending Dataskin=Sheen 
                 Transparency=0.4 NoStatLabel;
Run;

Что приводит к этому: enter image description here

А:

enter image description here

...