你好,
创建 Graph Builder 对象后,可以定义变量如下:变量(X(:x),Y(:y),颜色(:color))
我想要做的是通过从列表中选择特定列来动态更改颜色列。如何实现?
先感谢您。
很有趣。我想我已经从你的剧本中得到了一些信息,但下周我需要一些时间来处理这个问题。
这是脚本的快速版本
Names Default To Here(1);
If(Is Empty(Current Report()),
Throw("No open reports found");
);
cur_report = Current Report() << XPath("//OutlineBox[@helpKey='Graph Builder']");
If(N Items(cur_report) < 1,
Throw("No graph builder open");
,
cur_report = cur_report[1] << Get Scriptable Object;
dt = cur_report << Get Data Table;
);
// Find current Color role
find_role_column = Function({gb, role = "Color"}, {Default Local},
vars = gb << Get Variables();
col = "";
role_idx = 0;
For Each({var, idx}, vars,
role = var["Role"];
If(role == "Color",
col = var[1] << get name;
role_idx = idx;
break();
);
);
return(Eval List({col, role_idx}));
);
replace_role_column = function({gb, new_col, role = "Color"}, {Default Local},
{colname, role_idx} = find_role_column(gb);
gb << inval;
If(role_idx > 0,
gb << Remove Variable(role_idx);
);
Eval(EvalExpr(
gb << Add Variable({Expr(NameExpr(AsColumn(new_col))), Role(Expr(role))});
));
wait(0);
gb << update window;
return(1);
);
nw = new window("demo",
clb = Col List Box(Datatable(dt), width(250), maxSelected(1),
<< Set Function(function({this},
replace_role_column(cur_report, this << get selected, "Color");
));
)
);
clb << Set Items(dt << Get Column Names("String"));
创建更好的图表需要一些时间,我可能有足够的周末时间来创建一个(它与我的列快速交换器非常相似 - 在图形生成器中轻松更改多个 Y 轴和 X 轴列)
我确实为添加名为 Role Switcher 的新切换器创建了愿望清单项。目前我认为这将需要脚本解决方案,如果它仅限于图形生成器和颜色角色,则创建起来会更容易一些(我有时间时很可能会为此创建插件)。
“列切换器的唯一‘问题’是您不能同时在多个角色中拥有同一列。”:不幸的是,这正是我所需要的。
这不正是列切换器的功能吗?列切换器的唯一“问题”是,您不能同时在多个角色中拥有同一列。
嗨,Jarmo,这是真的,但显然我必须更加精确:列切换器只需要影响颜色列,而不是 x 或 y 列。