<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我正在编写一个 JMP 脚本,该脚本创建一个带有复选框和下拉菜单的窗口。 这些菜单用于选择条件,然后可用于运行报告和生成图表。 我正在制作的一张图表上有不同数量的线条,具体取决于选中的复选框数量。 无论选择哪个复选框,我都能够成功生成包含所有线条的图表。 我遇到的问题是传说。 第一个数据集始终与图例和线条中显示的点一起出现。 该图表上的所有其余数据集都在线显示了图例上的线。 要解决此问题,通常我会双击图例,手动取消选中图例上不想显示的点,然后复制脚本以使此操作自动发生。 当图表上有 4 组数据时,在我对图例框进行更改后,脚本将如下所示:
发送至报告(
派遣(
{},
“400”,
传奇盒,
{位置( {-1, -3, -3, -3, 0, 1, 2, 3} )}
)
... //(其他 Dispatch() 命令)
)
我还有其他命令转到图形,例如轴标签名称更改,因此它出现在 SendToReport() 命令中的其他 Dispatch() 命令中。 我遇到的问题是我无法根据所选复选框的数量更改 Postion() 命令内的列表。 我可以对正确的列表进行硬编码,但该代码仅适用于该数量的选定复选框。 例如,如果我将列表设置为 {-1, -3, -3, 0, 1, 2},那么只有当我选中 3 个复选框时,代码才能正常工作。 我创建了一个变量,该变量根据所选复选框的数量更改为正确的列表(并验证它是否被正确分配),但是当我将变量放入 Position() 函数内时,代码不会进行我想要的更改到。 下面的代码根据单击的复选框数量将正确的列表分配给变量 PL(SUM() 函数内的变量表示复选框的输出)。
PL = 如果(
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 1, {-1, 0 },
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 2, {-1, -3, 0, 1},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 3, {-1, -3, -3, 0, 1, 2},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 4, {-1, -3, -3, -3, 0, 1, 2, 3},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 5, {-1, -3, -3, -3, -3, 0, 1, 2, 3, 4},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 6, {-1, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4 , 5},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 7, {-1, -3, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4, 5, 6},
总和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 8, {-1, -3, -3, -3, -3, -3, -3, -3, 0, 1 , 2, 3, 4, 5, 6, 7},
);
我已经验证此代码正在将正确的列表分配给变量。 当我按如下方式插入变量时,它不会像我希望的那样从图例框中删除点标签,并且当我将生成的图形脚本复制到图例框时,Dispatch() 命令丢失。
派遣(
{},
“400”,
传奇盒,
{位置(PL)}
)
我以前以类似的方式使用过变量,但我总是引用列表中的一个数字,而不是尝试插入整个列表(例如 PL[1])。 我尝试了很多变体,但到目前为止还没有奏效(PL[]、{PL}、{PL[]})。
请帮我弄清楚我做错了什么。 如果有任何不清楚的地方,请告诉我,我可以提供帮助回答问题所需的更多详细信息。 在宏伟的计划中,这是一个非常小的问题,但它让我发疯,我很难在没有找到解决方案的情况下克服它。 帮助!
杰巴克里21
除了伊恩的建议之外。 这是另一种方法。
首先,如果您有一个 IF 语句,我会使用 Choose() 代替。 条件的参数是从 1 开始的整数序列,因此相等子句(expr==1、expr==2、expr==3)是内置的。 (有关更多信息,请参阅 JSL 语法参考)..
话虽如此,这将是您的新条件语句:
PL=选择(和(IW27、II09、II44、II08、II42、IW29、CC23、IW24)、
{- 1 , 0 }, // 1
{- 1 , - 3 , 0 , 1 }, // 2
{- 1 , - 3 , - 3 , 0 , 1 , 2 }, // 3
{- 1 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 }, // 4
{- 1 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 }, // 5
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 }, // 6
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 }, // 7
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, // 8
) ;
为了在另一个 JSL 语句中使用 PL,就像您尝试使用 Dispatch() 一样,参数变量需要包装在 Expr() 中。 所以,
派遣(
{},
“400”,
传奇盒,
{位置(表达式( PL) )}
)
这允许您评估(或扩展)PL 的内容,前整个事情都会被评估。 为了使其工作,您必须使用 Eval( Eval Expr ()) 包装整个图表函数。 完整的示例如下所示:
dt =打开( “$SAMPLE_DATA/澳大利亚旅游局.JMP” );
PL = { 0 , - 1 , 1 , - 1 , 2 , - 1 };
//PL = {-1, 0, -1, 1, -1, 2};
评估(
求值表达式(
dt <<图形生成器(
显示控制面板( 0 ),
变量(
X(:日期),
是(:姓名( “收入($'000)” ) ),
是(:姓名( “床位使用率(%)” ) ),
是(:姓名( “平均停留时间(天)” ) )
),
元素( 位置( 1 , 1 ), 点( X, Y, 图例( 4 ) ), 更平滑( X, Y, 图例( 3 ) ) ),
元素( 位置( 1 , 2 ), 点( X, Y, 图例( 1 ) ), 更平滑( X, Y, 图例( 2 ) ) ),
元素( 位置( 1 , 3 ), 点( X, Y, 图例( 6 ) ), 更平滑( X, Y, 图例( 5 ) ) ),
发送至报告(
派遣( {}, “图表标题” , TextEditBox, {设置文本( 《旅游趋势》 )} ),
派遣( {}, “400” , 图例框, {位置(表达式(PL))})
)
)
)
);
希望这可以帮助!