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

SAS: how to combine color gradient scales in a single 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 blue);
      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=freqall template=heatmap; 
run;

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

因为 group=2 项目是 3 和 4,并且不与 group=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;