解决方案2:价值颜色
对于通常不对应于单个行的图形元素,例如条形图和树图,行颜色将无济于事。但是,我们可以使用Value Colors属性颜色在Graph Builder中的Color角色中使用它,这些颜色将在图形中使用。 若要以编程方式创建“值颜色”列属性,请首先创建测试“值颜色”属性,然后在数据表上执行“复制表脚本”以查看JMP如何将“值颜色”记录为JSL。你会看到这样的事情:
...
Set Property( "Value Colors",
{"#000000" = -5425372, "#003399" = -13577875, "#004899" = -4354269,
"#0063aa" = -13400361, "#006fba" = -2668175, "#0070bc" = -10628061,
...})
在每个赋值中,左侧是数据值,右侧是颜色值的JSL编号表示,与RGB Color()函数的结果相同。
所以我们的任务是使用JSL表达式以编程方式创建这样的表达式,然后将其发送到数据表以使用Add Column Properties()消息设置该属性。
这是我的代码:
eadd = Expr(
Column( "color" ) << Add Column Properties( Set Property( "Value Colors", LLL ) )
);
evc = {};
ec = Expr( SSS = CCC );
For Each Row(
ec2 = Substitute( Name Expr( ec ),
Expr( SSS ), :color,
Expr( CCC ),
RGB Color(
Hex To Number( Substr( :color, 2, 2 ) ),
Hex To Number( Substr( :color, 4, 2 ) ),
Hex To Number( Substr( :color, 6, 2 ) )
)
);
Insert Into( evc, Name Expr( ec2 ) );
);
Substitute Into( eadd, Expr( LLL ), Name Expr( evc ) );
eadd; // evaluates the expression
按照惯例,我在表达式变量前加上“e”,并使用大写替换模式。基本思想是使用占位符使用基本形式表达式,然后使用Substitute用计算值替换占位符。但在这里,有两个级别的替代正在进行。一个命令, EADD ,有 LLL 占位符表示值颜色列表,每个作业对应一个, EC ,有占位符 SSS 和 CCC 对于字符串和颜色。