SAS:如何在单个热图中组合两个颜色渐变比例?

时间:2019-07-26 13:52:59

标签: colors sas gradient heatmap

我有两个组的一个变量。我正在尝试生成一个由两个颜色渐变比例组成的热图,其中n°1组为红色,n°2组为灰色。如何使用proc模板为每个组指定颜色渐变? 我不知道是否有可能。

使用proc模板可以使用离散变量。但是使用连续变量并使用颜色渐变,是否可能?

以下是我的数据示例:

item resp percent group
1     1     16     1
1     2     35     1
1     3     35     1
1     4     12     1
2     1     12     1
2     2     39     1
2     3     27     1
2     4     22     1
3     1     12     2
3     2     39     2
3     3     27     2
3     4     22     2
4     1     55     2
4     2     39     2
4     3     6      2
4     4     0      2

proc template;
define statgraph heatmap;
    begingraph;
      rangeattrmap name="rmap";
        range 0 - 100 / rangecolormodel=(white CXE60004);
      endrangeattrmap;
      rangeattrvar attrmap="rmap" var=newpct attrvar=pColor;
      layout overlay / yaxisopts=(display=(ticks tickvalues line))  ;
        heatmapparm x=resp y=item colorresponse=pColor / 
                          name="heatmap";
        continuouslegend "heatmap";
      endlayout;
    endgraph;
  end;
run;

proc sgrender data=freqallits template=heatmap; 
run;

目前,我的代码仅使用一种颜色。有两个颜色渐变的想法?

1 个答案:

答案 0 :(得分:1)

因为组= 2的项是3和4,并且不与组= 1的项1和2重叠,所以可以将第二组中的百分比数据重新映射到第二个相邻范围。将该相邻范围添加到您的rangeattrmap中。

示例:

data have; input
item resp percent group; datalines;
1     1     16     1
1     2     35     1
1     3     35     1
1     4     12     1
2     1     12     1
2     2     39     1
2     3     27     1
2     4     22     1
3     1     12     2
3     2     39     2
3     3     27     2
3     4     22     2
4     1     55     2
4     2     39     2
4     3     6      2
4     4     0      2

proc template;
  define statgraph heatmap;
    begingraph;
      rangeattrmap name="rmap";
        range   0 - <100 / rangecolormodel=(white red);
        range 100 - <200 / rangecolormodel=(green white);
      endrangeattrmap;
      rangeattrvar attrmap="rmap" var=percent attrvar=pColor;
      layout overlay / yaxisopts=(display=(ticks tickvalues line))  ;
        heatmapparm x=resp y=item colorresponse=pColor / 
                          name="heatmap";
        continuouslegend "heatmap";
      endlayout;
    endgraph;
  end;
run;

data have_map;
  set have;
  if percent = 100 then percent = 99.99;
  if group = 2 then percent = percent + 100;
run;

proc sgrender data=have_map template=heatmap; 
run;

enter image description here