<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我有一个脚本,其中输出之一是使用双变量平台的双变量 (XY) 图。 它基本上是在 y 轴上绘制设备参数值与 x 轴上的时间的关系。 这些部分在源数据表的列中具有共同的 ID 值。
现在,该平台已经具有这样的功能:如果您单击一个标记,则会在数据表中选择该标记所基于的行(显示框中的其他标记会变淡)。 我想要的是,当用户单击一个标记时,具有相同 ID 值的所有其他标记也会突出显示(这样用户就可以看到该设备随时间的变化情况)。 我只是在努力寻找一种方法来做到这一点。 是否可以访问平台已存在的事件处理代码(即,当用户单击标记时允许选择行,或者当用户单击并拖动绘图窗口中的矩形时允许选择多行)?
对此的任何帮助将不胜感激。
谢谢。
仅供参考,使用行状态处理程序的另一种方法:
名称默认为此处( 1 ) ;
// 桌子
dt =新表( “双变量 ID 选择” ,
添加行( 10 ) ,
新专栏( “ID” ,数字, “名义” ,格式( “最好的” , 12 ) ,设定值( [ 2014年, 2011年, 2012年, 2013年, 2014年, 2011年, 2013年, 2012年, 2011年, 2014年] ) ) ,
新专栏( “X” ,数字, “连续的” ,格式( “最好的” , 12 ) ,设定值( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ) ,
新专栏( “是” ,数字, “连续的” ,格式( “最好的” , 12 ) ,设定值( [ 20 , 21 , 25 , 28 , 30 , 31 , 33 , 36 , 37 , 40 ] ) ) ,
设置标签列( : ID )
) ;
// 行状态处理函数
选择匹配ID =功能( { X } ,
// 获取当前选中的行
选定的行= [] ;
我= 1 ;
对于每一行(
如果(已选择(行状态() ) ,
选定的行= V连接(选定的行,我)
) ;
我++;
) ;
// 如果有选择,将其“扩展”到所有必需的行
如果( N 行(选定的行) > 0 ,
展开选定行= [] ;
为了(我= 1 ,我<= N 行(选定的行) ,我++,
这个ID = : ID [选定的行[我]] ;
匹配行= dt <<获取行位置( : ID ==这个ID ) ;
展开选定行= V连接(展开选定行,匹配行) ;
) ;
dt <<选择行(展开选定行) ;
) ;
) ;
// 将处理程序分配给表
rsh = dt << MakeRowStateHandler (选择匹配ID ) ;
// 使用图形生成器尝试一下
dt <<图形生成器(
尺寸(第530章,第454章) ,
显示控制面板( 0 ) ,
变量( X ( : X ) ,是( :是) ) ,
元素(积分( X ,是,传奇( 5 ) ) ,更顺畅( X ,是,传奇( 6 ) ) )
) ;
大家好,
我找到了一种行之有效的方法。 基本上,您只需创建一个图形脚本,然后在其中编写从所选行获取 ID 的代码,然后使用 select where 语句来匹配具有该 ID 的所有行。 如果您在双变量窗口中单击并拖动多个点,这也适用。 下面的示例代码。
xParam ="Column Name 1 Here";
yParam = "Column Name 2 Here";
idParam = "Column Name 3 Here";
//tableRef = data table reference
bivPlatform = Bivariate(
Y( Eval(yParam) ),
X( Eval(xParam) ),
);
bivReport = bivPlatform << Report;
bivFrame = bivRawReport[FrameBox( 1 )]; //Assign reference to framebox
// Add Graphics script to select all rows with matching ID when one row is selected on the graph
bivFrame << Add Graphics Script( 2, //Order graphics script is run with respect to other elements in Frame box (Not really needed here)
//Get selected IDs
selectedIDMatrix = tableRef:idParam[ ( tableRef << Get Selected Rows() ) ];
//Get unique IDs (optional I guess)
idArray = Associative Array(selectedIDMatrix);
uniqueIDMatrix = idArray << Get Keys;
//Select other datapoints with matching IDs
tableRef << Select Where( Contains( As List(uniqueIDMatrix), As Column(tableRef, idParam) ) );
);
嗨,斯威斯,
感谢您的支持,并期待在升级到 JMP 12 时拥有此功能。
我想在二元显示框中寻找此功能。 要使用上面的示例,我想单击 2014 年的数据点,并突出显示 2014 年的所有点。 我希望有一个纯粹的脚本解决方案。
无论如何,再次感谢您的回复。
恩凯莱,
感谢您提出的问题,能够在“Fit X By Y Bivariate Graph”中选择某些内容,然后查看所有对应的点返回到突出显示的数据表,这些点与所选点具有相似的 ID。虽然对于您想要做的事情仍然可能有一个更优雅的“从头开始编写脚本”的答案,但我找到了一种使用新的 JMP 12 应用程序生成器功能的简单方法,该功能允许将图形用作数据过滤器。然后希望您可以在当前的工作中使用这个现成脚本的部分内容,或者也许能够直接使用这个开箱即用的功能。请注意,我使用的是适用于 Mac 的 JMP 12.1 版本。
在本例中,我们创建了一个简单的数据表,如您所描述的,包含三列:ID、X 和 Y,其中多个 ID 具有多行不同的 X 和 Y 测量值。 然后,我们将数据表和列的分布组合到下面的一个窗口中(在 JMP 中组合窗口以获得自定义报告视图),以便您可以看到我们的初始设置。

然后我们创建了一个图表,显示 Y 与 X 的双变量拟合。此时,如果您选择一个点,您实际上只是根据 X 和 Y 坐标进行选择。显示该点的 ID 标签没有问题,但这只会将该点阴影(选择)回数据表中。所以问题是双变量将仅基于相似的 X 和 Y 坐标而不是常见的 ID 来查找匹配。请参阅下一个自定义报告视图。
因此,我们想也许我们可以通过在双变量旁边创建一个“辅助”图来使这个过程变得非常简单的两步过程,这样我就可以一键选择所有感兴趣的 ID 点。为此,我创建了 ID 分布(我将其制作为标称数据列类型,以获得更好的选择功能),然后关闭除马赛克图之外的所有显示选项。然后将分布图和双变量图连接到一个窗口中以获得另一个自定义报告视图。然后,在报告标题中的红色三角形下,我们选择了“编辑应用程序”按钮,该按钮将打开“应用程序生成器”工作区(选择基础数据表后)。现在,在 App 开发器中,只需选择第一个分布马赛克图,右键单击它并选择用作过滤器即可。现在我可以有一个双击解决方案...首先我选择我关心的双变量拟合 Y By X 图表上的点,然后可以滑动并选择(单击方向)部分阴影马赛克中的完整 ID现在将突出显示数据表中所有相似的 ID。在马赛克图上选择同一 ID 号后,我们还可以在双变量 Y By X 图表上以图形方式看到与相同 ID 号相对应的所有点。


现在,您可以转到报告标题下的红色三角形,并将脚本保存到脚本窗口,以查看在创建此视图时为您生成的基础脚本工作。同样,虽然这不像直接从“双变量拟合 Y × X”那样灵活,但它确实显示了一个开箱即用的解决方案,并为您提供了一种自动生成一些脚本的方法。将附在该 JMP 工作文件中,其中包含已保存的脚本,供您查看。
希望这可以帮助!