我有两个组的一个变量。我正在尝试生成一个由两个颜色渐变比例组成的热图,其中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;
目前,我的代码仅使用一种颜色。有两个颜色渐变的想法?
答案 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;