使用 Mousetrap() 的嵌套图表向下钻取我有一个用例来构建一个具有向下钻取功能的图表。
用户将单击图表上的一个点,然后使用 Mousetrap() 函数运行一个脚本,该脚本将弹出一个新窗口,其中包含另一个图表以及一些更详细的向下钻取信息。
然后我想支持从第一个弹出窗口向下钻取的额外级别。
我将在附加脚本中使用 BigClass 数据集通过一个简单示例进行说明。
脚本中的注释突出了问题:只有一个 mouse-trap() 函数调用,第一个向下钻取工作。
但是,如果我添加第二个鼠标陷阱,特别是将其添加到将由第一次向下钻取生成的图表中,则会发生第二次向下钻取操作应用于第一次鼠标单击,这出乎意料.
不确定是否可以像这样使用 MouseTrap() ?
d
回复:嵌套图表使用捕鼠器向下钻取()@马克贝利感谢您参考 graphlets!
@tsl所以您想跨多个级别向下钻取。 非常好,这是使用数据可视化本身缩小关注范围来了解数据的好方法。
让我们数一数您可以在 JMP15 中使用 graphlet 执行此操作的方法。 此新功能遵循“瓷器 + 管道”架构,这意味着有预定义的、易于使用的方法来完成标准行为,构建在编程 (JSL) API 之上,您还可以访问该 API 以实现自定义案例。 您描述的场景可以使用两种不同的“瓷器”或点击式方法来实现。
如果您的注意力集中在一个特定的、单一的测量值上——比如高度——您可以使用像直方图这样的 Graphlet 预设。 创建基线图后,右键单击图背景以访问新的“悬停标签”菜单。 从那里你会看到预设选项

Graphlet 预设将创建指定可视化类型的 Graphlet,从基线图中选择的变量派生角色映射。 由于基线图显示高度变量的计数,直方图 graphlet 预设将自动显示每个给定条的变量分布。但是每个条形已经过滤到一个单一的高度值,所以这不是一个有趣的分布。 假设我们的基线是直方图;直方图预设将显示每个 bin 上值的分布:

请注意悬停标签缩略图如何像图形预览一样工作。 如果您继续并单击缩略图,它将在新窗口中启动等效图形。 这个新图表被向下过滤以仅包括与悬停在视觉元素(在本例中为 60-62 bin)对应的行,从而实现向下钻取操作。 过滤操作是使用折叠的本地数据过滤器实现的,使其能够适应不相关的选择更改,并允许通过过滤器设置的更改进行进一步探索。

Graphlet Presets 的另一个特点是它们被预先配置为递归的,以支持高级的向下钻取场景。 因此,您可以继续与新直方图中的 bin 进行交互。 您将看到您也可以向下钻取它们:

现在附加到页面的 .jsl 示例有一个更复杂的向下钻取场景,其中可视化类型和角色分配被选择为每个向下钻取级别的特定值:
* 0级(基线):高度值计数
* 级别 1:按性别划分的体重箱线图
* 级别 2:日志中显示的行详细信息
这种级别的定制仍然可以使用不同类型的“瓷器”来完成:Paste Graphlet 命令。 此命令允许用户“堆叠”graphlet 定义,这些定义将在用户向下钻取每个级别的可视元素时使用。
因此,在创建基线图之后,继续创建代表每个所需向下钻取级别的图。 不用担心过滤 - 与前面的情况一样,过滤会自动为您完成。 然后 - 从最后的级别 - 将其脚本复制到剪贴板:

然后移动到前面的图表,然后粘贴(脚本作为)graphlet:

在上图中,我们将 1 级向下钻取图(按性别划分的权重小图)粘贴到基线图中。 结果:

由于定义了此场景,因此不需要 2 级粘贴 graphlet。 显示悬停视觉元素的行值已经是悬停标签的默认行为。 将鼠标悬停在第二个箱形图上后,我们将在第二级向下钻取中看到以下内容:

通过右键单击悬停标签,用户可以复制其内容、子集数据或进一步更改悬停标签配置。
我希望这可以帮到你。 对于分类钻取示例,请检查以下问题的答案https://community.jmp.com/t5/Discussions/drill-down-in-a-graph-hierarchy/mp/11702
有关悬停标签自定义的更多信息,请访问: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-hover-graphs.shtml#
关于 graphlet 的信息具体位于: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-graphs-or-images-to-hover-labels.s...
回复:嵌套图表使用捕鼠器向下钻取()谢谢 ! 极好的建议! 它有效,正如您所评论的那样,通过分离成函数来编写更好的代码。 我能够将其合并到我的“真实世界”用例中,其中我实际上有 4 个级别的渐进向下钻取,因此使用函数使其更具可读性回复:嵌套图表使用捕鼠器向下钻取()好主意! 将您的代码移动到一个函数中并且它可以工作:
makesubset = Function( {_x},
{TestWin}, // local variables
dt << select where( :height == _x );
TestWin = New Window( "Drill Down Window",
dt << GraphBuilder( Size( 534, 448 ), Show Control Panel( 0 ),
Where( Selected() ), Variables( X( :sex ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 4 ) ), Box Plot( X, Y, Legend( 5 ) ) )
)
);
TestWin[FrameBox( 1 )] << add graphics script(
Mousetrap(
_x2 = Round( X, 0 );
Show( _x2 );
)
);
);
dt = Open( "$sample_data/big class.jmp" );
dt << Graph Builder( Size( 527, 454 ), Show Control Panel( 0 ),
Variables( X( :height ) ), Elements( Bar( X, Legend( 6 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script( 2, Description( "Script" ),
Mousetrap(
_x = Round( X, 0 );
makesubset( _x );
)
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);它的行为方式与您描述的方式相同,因为 Mousetrap 函数并不像其他函数那样真正执行。 <
我怀疑它保留了最后一个。 扫描不会跟随到函数调用中,函数调用可能会使您的 JSL 更易于阅读和维护。
@EvanMcCorkle是的,它在捕鼠器中发现捕鼠器似乎很奇怪。
回复:嵌套图表使用捕鼠器向下钻取()JMP 15 正是为此目的引入了“悬停标签”。 有三个方面可以协同工作:graphlets、textlets 和 gridlets。
请参阅帮助 > JMP 文档库 > 脚本指南 > 第 9 章:JMP 报表,第 512 页。 有很多解释和示例可以帮助您了解如何实施向下钻取行为。