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;
我有一个变量有两组。我正在尝试生成一个由两个颜色渐变比例组成的热图,第 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;