我正在使用VLine
创建一个Proc SgPlot
图,其中包含4组数据。这是我创建情节的代码。 (当然,我已经对变量名称进行了通用化。)这包含在宏中,但我认为这没有任何区别。
proc sgplot data=mydata;
vline NominalTime / Response=responseVariable Group=MyGroups stat=mean markers;
format MyGroups MyGroups.;
Where scaleNum=&scaleNum;
run;
我正在使用Proc Template来自定义线条颜色,LineStyles和MarkerSymbols。模板代码如下:
proc template;
define style Styles.MyNewStyle;
parent = styles.HTMLBlue;
style GraphBackground /
backgroundcolor=white;
style GraphData1 from GraphData1 /
markersymbol = "circle"
color = CXFFB44B
contrastcolor = CXFFB44B
;
style GraphData2 from GraphData2 /
markersymbol = "circle"
color = white
contrastcolor=CX000000
;
style GraphData3 from GraphData3 /
markersymbol = "Square"
color = CXD33183
contrastcolor=CXD33183
;
style GraphData4 from GraphData4 /
markersymbol = 'Square'
linestyle = 2
color = white
contrastcolor=CX555555
;
style GraphFonts from GraphFonts /
'GraphDataFont' = ("Arial",11pt)
'GraphValueFont' = ("Arial",11pt)
'GraphLabelFont' = ("Arial",11pt,bold)
'GraphFootnoteFont' = ("Arial",8pt)
'GraphTitleFont' = ("Arial",12pt,bold);
end;
run;
当然,我使用ods html
来改变输出样式:
ods html style=MyNewStyle;
以下是问题的关键所在:使用指定的颜色生成绘图,但是对于组2到4的分配不正确markersymbol
和linestyle
。另有说明,{{1我在markersymbol
中指定的linestyle
用于绘图中的所有行,无论以后的赋值如何。为什么会这样?
答案 0 :(得分:3)
理解这种行为的关键是从SAS 9.3开始,HTML目标默认使用HTMLBlue样式。这种风格是"颜色优先"样式,只有颜色首先旋转。有12种定义的颜色。因此,前12个组值获得这12种颜色中的一种,具有第一个标记符号和线条图案。在前12组之后,接下来的12组获得第二个标记符号和线条图案,再次使用12种颜色。
使用HTMLBlue,其他标记和线条图案将仅显示在前12个组值之后。
大多数其他样式的属性优先级为"无"。这意味着所有三个属性同时旋转。因此,第一组值获得颜色1,符号1和模式1.第二组值获得颜色2,符号2和模式2,依此类推。
使用SAS 9.4,在样式定义和ODS GRAPHICS语句中引入了选项ATTRPRIORITY来控制此行为。现在,您可以使用此选项使任何样式按您希望的方式旋转属性。要使HTMLBlue的行为类似于LISTING,请使用ODS图形选项ATTRPRIORITY = none。
答案 1 :(得分:1)
这可以按预期工作:
proc template;
define style Styles.MyNewStyle;
parent = styles.HTMLBlue;
style GraphBackground /
backgroundcolor=white;
style GraphData1 from GraphData1 /
markersymbol = "circle"
color = CXFFB44B
contrastcolor = CXFFB44B
;
style GraphData2 from GraphData2 /
markersymbol = "circle"
color = white
contrastcolor=CX000000
;
style GraphData3 from GraphData3 /
markersymbol = "Square"
color = CXD33183
contrastcolor=CXD33183
;
style GraphData4 from GraphData4 /
markersymbol = 'Square'
linestyle = 2
color = white
contrastcolor=CX555555
;
style GraphFonts from GraphFonts /
'GraphDataFont' = ("Arial",11pt)
'GraphValueFont' = ("Arial",11pt)
'GraphLabelFont' = ("Arial",11pt,bold)
'GraphFootnoteFont' = ("Arial",8pt)
'GraphTitleFont' = ("Arial",12pt,bold);
end;
run;
data mydata;
do mygroups = 1 to 4;
do nominaltime=1 to 20;
responsevariable = mygroups*nominaltime;
output;
end;
end;
run;
ods html style=mynewstyle;
proc sgplot data=mydata;
vline NominalTime / Response=responseVariable Group=MyGroups stat=mean markers;
* format MyGroups MyGroups.;
* Where scaleNum=&scaleNum;
run;
ods html close;
如果这对您的系统有效,那么您的MyGroups就会出现问题。我怀疑格式或价值观。 MyGroups本身具有什么价值 - 1-4或MyGroups的其他东西。格式转换为1-4?
如果这对您的系统不起作用,请提供更多系统详细信息 - 9.3,9.2等?