1

我正在创建一个VLine带有Proc SgPlot4 组数据的图。这是我创建情节的代码。(当然,我已经对变量名称进行了通用化。)这包含在一个宏中,但我认为这没有任何区别。

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 的分配不正确markersymbollinestyle换一种说法,无论markersymbollinestyle指定什么GraphData1都用于绘图中的所有线条,不管以后的任务。为什么会这样?

4

2 回答 2

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。

于 2015-12-21T19:05:03.703 回答
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 等?

于 2013-05-10T14:50:26.607 回答