如何检测X轴顺序的变化?如何检测 X 轴顺序的变化?我使用以下 JSL 代码标记背景颜色,但用户可以更改 X 轴的顺序,如下图所示。如果我无法检测到用户对图表进行了此更改,则先前标记的背景颜色区域将不会遵循新的顺序,也不会更新。
例如,如果我最初标记年龄为 13 岁,而用户将顺序更改为“升序,体重”,我需要知道用户已触发顺序更改,以便红色标记可以正确更新到年龄 13 的位置,而不是保持固定。
我可以使用什么方法来检测用户何时改变X轴顺序,或者如何使背景颜色标记随顺序自动变化?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
GraphX =dt<< Graph Builder(
Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :weight ), Overlay( :sex ) ),
Elements( Box Plot( X, Y, Legend( 4 ) ) )
);
rep1 = GraphX << report;
frameboxDCRFH = rep1 << XPath( "//FrameBox" );
frameboxDCRFH << Add Graphics Script(
Transparency( 0.1 );
Fill Color( "Red" );
Rect( 0.5, Y Origin() + Y Range(), 1.5, Y Origin(), 1 )
;
);

自动化和脚本回复:如何检测 X 轴顺序的变化?我认为我们无法访问此类处理程序,所以您必须在图形脚本中考虑它,或者使用单独的绘图来创建颜色。一种考虑图形脚本的方法
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(534, 492),
Show Control Panel(0),
Variables(X(:age), Y(:weight), Y(:Column 6, Position(1)), Overlay(:sex)),
Elements(
Box Plot(X, Y(1), Legend(4)),
Points(X, Y(2), Overlay(0), Legend(6), Summary Statistic("Median"))
)
);
fb = Report(gb)[FrameBox(1)];
fb << Add Graphics Script(
fb = Report(gb)[FrameBox(1)];
barseg = fb << Find Seg(MarkerSeg(1));
xval = (barseg << Get X Values)[1];
Transparency(0.1);
Fill Color("Red");
Rect(xval - 0.5, Y Origin() + Y Range(), xval + 0.5, Y Origin(), 1)
);
第 6 列的公式
If(:age == 13,
Col Median(:weight, :age),
.
)
添加颜色条形图


回复:如何检测 X 轴顺序的变化?您可以通过将“额外”列移到右侧来改善情节

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Column 6", Numeric, "Continuous",
Set Property(
"Axis",
{Show Major Ticks(0), Show Minor Ticks(0), Show Labels(0), Min(0.49),
Max(0.5), Inc(0.2), Minor Ticks(0), Label Row(
{Show Major Labels(0), Show Major Ticks(0), Show Minor Ticks(0)}
)}
),
Formula(
If(:age == 13,
1
,
.
)
);
);
gb = dt << Graph Builder(
Size(712, 621),
Show Control Panel(0),
Variables(X(:age), Y(:weight), Y(:Column 6, Position(1), Side("Right")), Overlay(:sex)),
Elements(Bar(X, Y(2), Overlay(0), Legend(9), Summary Statistic("Median")), Box Plot(X, Y(1), Legend(4))),
SendToReport(
Dispatch({}, "400", ScaleBox, {Legend Model(9, Properties(0, {Fill Color(67), Transparency(0.2)}, Item ID("Median(Column 6)", 1)))}),
Dispatch({}, "Y r title", TextEditBox, {Set Text("")}),
Dispatch({}, "400", LegendBox, {Legend Position({9, [2], 4, [0, 1, -3, -3]})})
)
);
回复:如何检测 X 轴顺序的变化?我希望移除右侧的轴。但是,我只知道如何像下图一样手动修改“显示属性”,并将“可见性”设置为“隐藏”。如何使用 JSL 实现此设置?

回复:如何检测 X 轴顺序的变化?我还想使用 JSL 自动移除图例设置中的中位数标记。下图展示了如何手动移除它。如何使用 JSL 隐藏它?

回复:如何检测 X 轴顺序的变化?你的轴设置是什么?你可以使用这些设置来隐藏/删除大部分轴。除非你在条形图中使用点,否则中位数不应该添加标记。如果你指的是图例项而不是标记,最简单的方法是手动隐藏它并复制脚本。
回复:如何检测 X 轴顺序的变化?
我有一个衍生问题。
如果原始图表中已经有一个标记为“颜色”的变量,并且无法控制条形图颜色为红色,我该怎么做才能修复它以保持红色?
以下 JSL 应该解决这两点:
1. 将 color() 添加到变量中:
变量(X(:年龄),Y(:体重),Y(:第 6 列,位置(1),侧面(“右”)),覆盖(:性别),
颜色(“性别”)
),
2. 将填充颜色()更改为红色: Dispatch({}, "400", ScaleBox, {Legend Model(9, Properties(0, { 填充颜色(“红色”) , Transparency(0.2)}, Item ID("Median(Column 6)", 1)))}),
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Column 6", Numeric, "Continuous",
Set Property(
"Axis",
{Show Major Ticks(0), Show Minor Ticks(0), Show Labels(0), Min(0.49),
Max(0.5), Inc(0.2), Minor Ticks(0), Label Row(
{Show Major Labels(0), Show Major Ticks(0), Show Minor Ticks(0)}
)}
),
Formula(
If(:age == 13,
1
,
.
)
);
);
gb = dt << Graph Builder(
Size(712, 621),
Show Control Panel(0),
Variables(X(:age), Y(:weight), Y(:Column 6, Position(1), Side("Right")), Overlay(:sex),Color("sex")),
Elements(Bar(X, Y(2), Overlay(0), Legend(9), Summary Statistic("Median")), Box Plot(X, Y(1), Legend(4))),
SendToReport(
Dispatch({}, "400", ScaleBox, {Legend Model(9, Properties(0, {Fill Color("Red"), Transparency(0.2)}, Item ID("Median(Column 6)", 1)))}),
Dispatch({}, "Y r title", TextEditBox, {Set Text("")}),
Dispatch({}, "400", LegendBox, {Legend Position({9, [2], 4, [0, 1, -3, -3]})})
)
);
回复:如何检测 X 轴顺序的变化?禁用条形图变量的颜色并更改颜色?
回复:如何检测 X 轴顺序的变化?我在自定义图表中设置了条形的颜色,但没有任何变化。
或者我应该在另一个面板上设置条形的颜色?我找不到其他地方可以设置条形颜色。

回复:如何检测 X 轴顺序的变化?运行你的脚本后,我禁用了条形图的颜色(右)

然后我可以修改中位数(第 6 列)
