你好,
我想通过全局框控制图形 Y 轴的界限(以允许用户快速更改界限而无需双击轴属性...)。
在附带的脚本中,我创建了一个窗口和一个图形。 然后我添加了 2 个我初始化的全局框(Lim1 和 Lim2)。
生成图形后,我修改了 Lim1 和 Lim2 的值,但图形轴没有相应更新......我看不出我做错了什么。
有人可以帮忙吗?
谢谢。
我遇到了你的问题,试图做一些非常相似的事情(通过许多图表上的数据设置轴限制,这样就不会错过异常值)。 我通过将轴限制设置为要评估的表达式来解决它(即等于最小值 - LSL 或最低数据点,与最大值相反)。 见下文:
// Get min/max for Graph 1
dt = Current Data Table();
G1 = dt << Get Rows Where (:Column 1 == "Group1");
G1_Min = Eval( Min((LSL[1]*0.95), Min(:Column 2[G1])));
G1_Max = Eval( Max((USL[1]*1.05), Max(:Column 2[G1])));
dt << clear select;
// Get min/max for Graph 2 etc. repeat for each graph
dt = Current Data Table();
G2 = dt << Get Rows Where (:Column 1 == "Group2");
G2_Min = Eval( Min((LSL[2]*0.95), Min(:Column 2[G2])));
G2_Max = Eval( Max((USL[2]*1.05), Max(:Column 2[G2])));
dt << clear select;
// Assign axis limits and specification lines within the graph parameters (for Graph 1 - repeat for each)
Dispatch ({Min(G1_Min), Max(G1_Max), Inc( Eval((G1_Max - G1_Min) / 7))),
Add Ref Line( LSL[1], "Solid", "Medium Dark Blue", "LSL", 1 ),
Add Ref Line( USL[1], "Solid", "Medium Dark Blue", "USL", 1 )}* 注意:我知道你的问题已经解决了 4 年,但它可能会帮助其他有类似问题的人。
尼尔森,杰夫,
我理解您的推理:使用坐标轴的交互式平台(拖动、移动……)确实非常有用……但是出于几个原因,它对我没有帮助:
- 我将生成的大多数图表都将包含异常值,这些异常值的值将远远高于其余人口。 在这种情况下,交互式解决方案非常耗时且痛苦......
- 我打算在一个窗口中生成大约 30 个图表:您可以想象以交互方式更改 30 个图表不是一种选择。用一个或几个框来设置所有值更省时。
无论如何,我看到 Nelson 的解决方案运行良好。 它看起来很复杂:我必须详细查看已完成的工作。
多谢。
我稍微改变了格式,只是因为我不确定一切都在做什么。 但是,下面是我通常如何处理您质疑的项目的示例。 我更大的问题是,对于用户来说,拖动和移动轴设置是否比实际输入最小值和最大值更简单?
Names Default To Here( 1 );
//DataPath = "C:\Program Files (x86)\SAS\JMP\11\Samples\Data\Variability Data\Wafer.jmp";
myTable = Open( "$SAMPLE_DATA\Variability Data\Wafer.jmp" );
Param = "Y";
Lim1 = 40;
Lim2 = 160;
FrameSize_X = 775;
FrameSize_Y = 200;
MyWindow = New Window( "Window Controls",
gr = MyTable << Variability Chart(
Y( :Name( "Y" ) ),
X( :Operator, :Wafer ),
Max Iter( 100 ),
Std Dev Chart( 1 ),
Show Range Bars( 0 ),
Show Grand Median( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
Automatic Recalc( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Y"},
"2",
ScaleBox,
{Min( Lim1 ), Max( Lim2 ), Inc( Abs( Lim2 - Lim1 ) / 10 ), Minor Ticks( 0 ),
Show Major Grid( 1 ), Show Minor Grid( 1 ), Inside Ticks( 1 )}
),
Dispatch( {"Variability Chart for Y"}, "Y", TextEditBox, {Set Text( Param )} ),
Dispatch(
{"Variability Chart for Y"},
"Variability Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y ), ,
Row Legend(
Name( "Operator" ),
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
),
Dispatch(
{"Variability Chart for Y"},
"Varability Std Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y )}
)
)
),
Panel Box( "1/ Start...",
g3 = V List Box(
H List Box(
Text Box( "Lim 1" ),
n1 = Number Edit Box(
Lim1,
5,
<<SETFUNCTION></SETFUNCTION>问题是全局变量用于在创建图形时设置轴,但之后图形与全局变量没有任何关系。
有多种方法可以创建您正在寻找的交互性(我相信这里有人可以提供原型)但请不要忽视内置交互性JMP 中每个图形的轴。 您所要做的就是将鼠标悬停在轴上,光标将变成一只手,您可以单击并拖动来更改轴。

通过向用户传授这些知识,您将为他们提供出色的服务。这样一来,他们就可以控制他们在 JMP 中看到的每个图表,而不仅仅是您为他们创建的图表以及为他们提供方便的文本框控件的图表。