悬停标签你好,
当我单击图形的一个点时,我想在悬停标签中显示照片(例如在文件“大类家庭”,脚本“带图片的图形生成器”中)。
我想做同样的事情,但没有“图片”栏
事实上,我有一个包含很多行的数据库,为每行放置照片会太重
我想在我的计算机上有一个包含所有照片的文件夹,格式为“.jpg”。 这些照片的名称与我数据库的“名称”列中的名称相同
例如,凯蒂的照片将在我的电脑文件夹中命名为:“KATIE.jpg”
当我单击一个点时,我想显示相应的图像(位于我计算机上的文件夹中,而不是在“图像”列中),这要归功于“名称”列,它的命名方式与我的相同相片
你能帮我吗 ?
目前,当我经过某个点时,我只能打开包含所有照片的文件夹,但它不会显示与悬停标签中的点相对应的照片
谢谢
数据存取大规模定制回复:悬停标签@tx尼尔森感谢您的检查。
你是对的,缩略图争论是主要问题@弗朗索瓦丝询问的是 JMP16 独有的功能。 在我与此线程的交流中,这一点已在该线程的早期确立@艾玛1 。 我以为她知道这一点,但我应该更明确(也许在脚本中添加了版本检查)。
在将图像返回到图片脚本(graphlet JSL 回调)中显示之前,可以通过显式缩小图像来制作 JMP15 等效版本。
回复:悬停标签@nascif_jmp ,我已经验证了@弗朗索瓦丝发现运行 JMP 15 的 graphlet 中没有显示任何图形。但是,该图形在 JMP 16 中显示。
回复:悬停标签你好,
我不明白你的脚本:
看图片,标签上没有图片。
此致
回复:悬停标签再一次问好, @弗朗索瓦丝,
我对这个问题进行了更多思考,我认为这可能与在 Set Graphlet 语句之外使用 JSL 变量有关。 如果没有看到你的脚本,很难说,但我又看了一遍我发布的示例脚本@艾玛1我发现定义缩略图大小的变量是在 graphlet 定义之外定义的。 这可能会有问题。
请参阅解决此问题的附加示例 - 希望它能为您提供解决您所描述的问题的途径。
好机会!
回复:悬停标签该图使用了多个分组。
即使我把它去掉了,也不好。
一切顺利
回复:悬停标签尽管从屏幕截图来看,这两个点似乎位于同一面板上。 不看剧本很难说。 如果您无法在此处发布副本,请将副本传递给我们的技术支持。
另外,由于这个问题已经标记为已解决,我建议开始一个新线程。
回复:悬停标签你好@弗朗索瓦丝,
该图是否使用 GroupX、GroupY 或某种其他类型的分组? 如果是这样,您很可能配置了一个面板,但没有配置另一个面板 - 这些面板在幕后是独立的。
一个简单的解决方法是删除分组,添加缩略图自定义,然后再添加分组。 这确保了定制将同等地应用于所有面板。
回复:悬停标签你好,
我在脚本中为悬停标签和所有帧添加了相同的缩略图,但我不明白为什么我有两个大小不同的图像。
有人解释一下吗?
最好的
问候
回复:悬停标签你好@艾玛1 ,
很高兴看到你取得进步。 关于错误消息,我的猜测是它与 JMP 15 中不支持的缩略图属性的使用有关。 删除后,您似乎在 JMP 15 中没有收到错误消息,对吗? 此外,在您的代码示例中,您注释掉了 Thumbnail() 属性,但保留了前面的逗号。 我也会删除它。
关于为什么您在第一次尝试中只获得第二个图中的配置,这是因为您重复使用了“gb”变量名称。 当您第二次调用“gb = Graph Builder(...”时,您覆盖了对第一个图表的引用。
在您的第二次尝试中,事情成功了,因为您在重用变量之前进行了配置,因此对第一个图的引用仍然有效。 但你是对的,代码重复是不幸的。
我附上一个更新的示例,展示如何使用两个 JSL 功能解决此问题:
- 函数(捕获代码块,以便可以在多个地方使用它们)和
- 列表(将多个引用保留在单个变量中,可以迭代以将操作应用于所有引用)。
使用这些技术将使您的脚本易于维护和组织。
您可以在以下位置了解有关它们的更多信息JMP 脚本编写指南。
回复:悬停标签我在另一台计算机上的 JMP 15 上测试了相同的脚本,并收到了相同的错误消息,该消息与单击缩略图中的照片时显示的一样
祝你有美好的一天
回复:悬停标签我在 JMP 15 下测试了我的脚本,我做了几次,每次都会出现此错误消息(并且 JMP 15 关闭):

你有解释吗?
我收到一条消息,该消息已转至技术支持
回复:悬停标签通过重新编写我的脚本,当我单击缩略图时,我成功地进一步减小了图像的大小。 我保留了 0.25 的值,这对我来说似乎很完美
对于我的第二个问题(脚本中显示仅适用于我的第二个图表而不是第一个图表的图像的部分),我解决了它。
我复制了允许我在缩略图中显示图像的脚本部分,并将其“粘贴”在每个图形下方。
它加重了我的脚本的负担,但我只找到了这个解决方案。 你在想别的事吗?
谢谢
回复:悬停标签你好,
这是我的脚本:
Names Default To Here( 1 );
cwd = "...";
//dt = Open("....jmp");
//thumbSize = {400, 400};
scaleValue = 1.0;
gb = Graph Builder(
Size( 604, 492 ),
Variables( X( :Mois ), Y( :"A"n ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);
gb = Graph Builder(
Size( 604, 492 ),
Variables( X( :Semaine ), Y( :B ), Group X( :Produit ) ),
Elements( Points( X, Y, Legend( 5 ) ), Smoother( X, Y, Legend( 6 ) ) )
);
frames = (gb << report) << xpath( "//FrameBox" );
Show( N Items( frames ) );
frames << Set Graphlet(
Picture(
Picture Box(
fileName = cwd || :Name( "Quantième +n°cuve" )[local:_firstRow] || ".jpg";
Show( fileName );
img = Open( fileName, "jpg" );
img << scale( scaleValue );
img;
)
),
//Thumbnail( thumbSize )
);
首先,我没有在脚本中放入“缩略图”,因为其他用户有JMP 15。 图像在标准尺寸缩略图 (170 x 200) 中仍然显示得很好。 “scalevalue”用于当您点击缩略图时显示一定尺寸的照片? 就是这样 ?
然后,我编写了一个脚本来生成两个图表
图像仅出现在第二个(多部分)图形的标签中,而不出现在第一个图形上。
然而,在我的第二张图中,缩略图问题得到了解决,我的所有部分的标签中都有图像。
我想找到一种方法,将脚本的最后部分(在标签中显示照片)用于所有以前的图形(实际上不止 2 个),以便照片位于所有图形的缩略图中。 是否可以 ?
谢谢
祝你有美好的一天
回复:悬停标签JMP16 唯一特有的是 Thumbnail() 属性,该属性允许您缩小缩略图。
我怀疑,通过新的方式,我们在单击显示图像之前缩小图像,您可能不需要它。
回复:悬停标签好的,我会尝试您的脚本将其应用到我的其他图形!
另一方面,我不明白什么在 JMP 16 上有效,而在 JMP 15 上无效? 你能解释一下吗?
事实上,我正在测试 JMP 16 EA,但其他用户有 JMP 15,所以我需要一个与 JMP 15 配合使用的脚本......
谢谢
祝你有美好的一天
回复:悬停标签再一次问好, @艾玛1 !
我很高兴缩略图大小设置现在可以为您工作,很抱歉我没有给您提供完整的示例。 但你想通了,干得好!
只是提醒其他读者,此设置是在 16.0 中添加的,所以我猜您使用的是 Early Adopter 版本。
至于点击时显示的图像太大,请继续阅读,我在下面的脚本中添加了解决方案。
关于在使用分组变量的图表中设置图像显示图基元,您已经猜到了这个问题。 在幕后,每个面板(或我们所说的框架)上的图形都是一个单独的图形,dispatchReport 命令仅配置第一个图形。
一个简单的解决方法是使用 XPath 查找复合图中的所有框架:
gb = dt << Graph Builder( ... );
frames = (gb << report) << xpath("//FrameBox");
Show(NItems(frames)); // one frame(graph) per panel
框架引用被捕获在列表中。 现在,我们可以通过向列表发送 setGraphlet 消息(实际上是任何消息)来一次性配置所有这些消息,列表会将消息“广播”给其成员:
frames << Set Graphlet( ... );
完整的脚本附在下面。 请注意我们如何使用scale() 消息来更改图像的大小(我将其放大,您可能希望将其缩小),然后再将其传回以在您单击缩略图时由 JMP 显示(该图像仍然是使用由 Thumbnail() 属性确定的大小)。
img = Open( fileName, "jpg" );
img << scale( scaleValue );
如果您想在单击缩略图时显示不同的图像,或者执行不同的操作(打开网页或运行脚本),您可以将 JSL 片段传递给名为 Click() 的 setGraphlet() 属性。
回复:悬停标签再一次问好 !
我尝试“粘贴”我的脚本以将照片显示到其他图形,但仍然有问题
当它的图形带有我们在顶部“分组”的变量时(如我发送给您的图像),奶酪的照片仅显示在左侧部分,而不显示在其他部分。
就好像 JMP 认为有两个图形并仅在左侧部分应用了脚本。

另外,我有一些图表在“发送到报告”内有多个“调度”。
在这些情况下,我可以将奶酪照片的搜索脚本放在哪里,以便将其应用于我的整个图片?
感谢您的帮助,并对所有这些问题表示歉意。
确实,第一次你帮了我很多......
回复:悬停标签你好,
我有另一个问题 :
该脚本仅适用于图表(我在开始时构建的)
我有另一个脚本(更长),它允许您构建多个图表并将它们显示在同一窗口和不同选项卡中
我想将以前的脚本(当我们单击一个点时显示奶酪的照片)应用于我的所有其他图形
是否有捷径可寻?
谢谢
回复:悬停标签@nascif_jmp我成功了!
它必须放在“图形生成器”之前
tX = 400;
tY = 400;
size = Eval List( {tX, tY} );
gb = Graph Builder( /* ... */ );
对于缩略图:
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
Picture Box(
fileName = cwd || :Name( "Quantième +n°cuve" )[local:_firstRow] || ".jpg";
Show( fileName );
Open( fileName, "jpg" );
)
),
Thumbnail( size )
)}
)
)
再次感谢你的帮助 !
祝你有美好的一天
回复:悬停标签你好,
我正在尝试使用脚本增加缩略图的大小
我在脚本的开头添加了:
gb = Graph Builder(
tX = 400;
tY = 400;
size = Eval List( {tX, tY} );
Size( 531, 456 );,
Show Control Panel( 0 )
// ...
);
但是,当我像这样在末尾添加“缩略图”时,它不再起作用:
gb = Graph Builder(
tX = 400;
tY = 400;
size = Eval List( {tX, tY} );
Size( 531, 456 );,
Show Control Panel( 0 ),
// ...
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Thumbnail( size ),
Picture(
Picture Box(
fileName = cwd || :Name( "Quantième +n°cuve" )[local:_firstRow] || ".jpg";
Show( fileName );
Open( fileName, "jpg" );
)
)
)},
)
)
);
我尝试将“缩略图(大小)”设置到脚本中的其他位置,但无法增加大小,我认为我没有将其放在正确的位置
最好直接点击缩略图中的照片查看大图,但尺寸太大
祝你有美好的一天
谢谢
回复:悬停标签我很高兴它成功了! 更何况看到如此美丽的奶酪! 
您可以将缩略图的大小添加到脚本中。 添加到脚本的开头:
tX = 400; tY = 400;
size = EvalList({tX, tY});然后在 setGraphlet 调用中添加(可能在 Picture 属性之后)
Thumbnail( size )
另请注意,您可以选择单击缩略图以在单独的窗口中以完整尺寸启动图像。
回复:悬停标签非常感谢您的帮助我成功了!
只是我的“cwd”路径末尾缺少一个“/”
这是照片:

在我的屏幕截图中,我在悬停标签编辑器中增加了照片的大小,然后在“缩略图”选项卡中增加了照片的大小
我设置宽度=高度=400,而一开始的宽度=200,高度=170
是否可以在脚本中添加此照片尺寸? 400×400?
或者脚本的每个用户是否需要使用悬停标签编辑器更改此设置?
谢谢
回复:悬停标签你好@艾玛1 ,
我向您保证,JMP 可以在 ID 和文件名之间建立联系。 但我们必须为其提供足够的信息才能做到这一点。
您是否定义了“cwd”变量来指向文件所在的文件夹? “打开”命令需要完整的文件名。
在创建图形生成器实例之前,请在脚本的开头添加一个表达式,将 cwd 定义为带有图像文件夹路径的字符串。
就像是:
Names Default to Here(1);
cwd = "C:/myProject/myImages/"; //CHANGE THE PATH TO MATCH YOUR IMAGE FOLDER
gb = Graph Builder( ...
在我共享的原始示例中,我使用当前目录(加载脚本的目录)定义“cwd”,因为在我的情况下,图像文件夹与脚本位于同一目录中。 这可能适合也可能不适合您。 如果直接指定图片文件夹路径会更简单。
另外,不要忘记使用 Show() 并检查日志以确保文件名是您期望的名称。
你太近了! 我期待看到悬停标签的屏幕截图,其中包含您的图像之一!
回复:悬停标签你好
我尝试了你的代码行:
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
Picture Box(
fileName = cwd || :Name( "Quantième +n°cuve" )[local:_firstRow] || ".jpg";
Show( fileName );
Open( fileName, "jpg" );
)
)
)}
)
)
不幸的是,它仍然不起作用。 我的悬停标签中仍然有一个十字。
JMP 不会在我的列名称和计算机文件夹中的图像名称之间建立联系。
我还尝试更改名称“Quantième+n°cuve”以放置一个更简单的名称(“id”),同时更改数据库中的列名称,但它仍然不起作用。
感谢您的帮助
回复:悬停标签叉号表示加载文件失败。 所以我们还没有正确生成文件名。
是时候进行一些调试了。
尝试这个:
图片(图片框(
文件名 = cwd || :姓名( “Quantième +n°cuve”) [本地:_firstRow] || “.jpg”;
显示(文件名);
打开( 文件名, “jpg” ))
),
然后将鼠标悬停在某个点上后检查 JMP 日志。 确保打印的文件名与文件夹中的图像文件名匹配。
另请注意我如何更改引用列名称的方式,您必须对包含无效 JSL 名称字符(如该字符)的列名称使用 Name() 函数。 这一改变实际上可能会解决这个问题。
回复:悬停标签好的,非常感谢!
现在,我有这个:

我的脚本的最后一行是:
Picture(PictureBox(Open( cwd || :"Quantième +n°cuve"[local:_firstRow] || ".jpg", "jpg"))),
现在,我的悬停标签上有一个十字......
你能帮我吗 ?
谢谢
回复:悬停标签好吧,让我们来看看:
>> 我应用了您告诉我的内容,但是当我单击一个点时,悬停标签不会显示,只会打开我计算机中的照片文件。
顾名思义,当您将鼠标悬停或将鼠标悬停在图表中的标记上时(而不是单击它时),就会显示悬停标签(JMP 的名称,通常称为工具提示)。 显示悬停标签后 - 如果一切顺利,它应该包含图像文件的缩略图 - 您可以单击图像执行其他操作,例如在新的 JMP 窗口中打开图像。
>> 在我的脚本的最后一行:“Picture (PictureBox (Open (cwd," \ .jpg "))),”
上面的 open 命令有两个问题:
1) 第一个参数缺少表行中创建相应文件名的值。 它正在尝试打开一个文件夹,而不是图像文件。
2)第二个参数,告诉 open 命令如何读取文件数据的类型修饰符,应该只是“jpg”。
回想一下,这是我之前发布的示例中的打开命令:
Picture(PictureBox(Open( cwd || local:_Species || ".jpg", "jpg"))),
请注意它如何使用局部变量(“local:_Species”)来创建文件名以匹配您的观察结果。 我相信您的数据表中有类似的列。 为标记列自动创建保存当前可视标记相应值的局部变量。 如果数据表中与文件名匹配的列未标记,您仍然可以通过使用局部变量“local:_firstRow”作为索引的直接列引用来获取其值。 它看起来像这样:
Picture(PictureBox(Open( cwd || :species[local:_firstRow] || ".jpg", "jpg"))),
这些局部变量被定义为悬停标签执行上下文。
>> 在此步骤中是否可以指定打开我的照片文件夹和数据库中的某一列中具有相同名称的点的照片? 要将此列中的名称链接到我的计算机文件夹中的图像名称吗?
是的。 我们非常接近让它发挥作用。 
回复:悬停标签好的谢谢 !
我应用了您告诉我的内容,但是当我单击一个点时,悬停标签不会显示,只会打开我计算机中的照片文件。
在我的脚本的最后一行:“Picture (PictureBox (Open (cwd," \ .jpg "))),”
在此步骤中是否可以指定打开我的照片文件夹和数据库中的某一列中具有相同名称的点的照片? 要将此列中的名称链接到我的计算机文件夹中的图像名称吗?
谢谢
回复:悬停标签@艾玛1 ,
我在回复中作为示例发布的脚本显示了如何将悬停标签内的图像显示为您所描述的缩略图。
它确实从磁盘读取图像,而不是从网络读取图像。
“打开”功能尽管名称如此,但并不打开文件夹。 它加载图像并将其传递给图片框,它会缩小并在悬停标签内显示为缩略图。
单击事件时图像在浏览器上的显示是可选的。 如果您不需要,可以从脚本中删除“Click”属性。
在这种情况下,单击缩略图将在常规 JMP 窗口中显示图像。
回复:悬停标签非常感谢两位的回答@哈德利迈尔斯和@nascif_jmp 。
我已经阅读了 Iris 的文章并尝试了该脚本。
但是,我不想引用网络链接,而是引用文件夹中的图像。
它不应该出现在我的脚本中的网络链接,而是查找特定照片的链接
此外,不需要使用脚本中的“打开”功能来打开照片文件夹,只需将该照片显示在悬停标签中即可
回复:悬停标签我比我建议的更喜欢这个。
回复:悬停标签你好@艾玛1 ,
这可以使用 Graphlets 来完成,Graphlets 是 JMP 15.0 中添加的悬停标签扩展。您将需要一些 JSL 来告诉 JMP 如何根据图像列的值查找图像文件。 下面的示例说明了该方法,使用鸢尾花数据集并从相应的物种派生图像文件名。 作为奖励,它展示了当您单击悬停标签缩略图时如何在浏览器窗口中打开照片。
您还可以使用悬停标签编辑器来实现相同的技术,只需较少的编码(您只需要提供下面的“图片”和“单击”(可选)属性的内容。
更多详细信息请参阅我们的文档。
还检查维基阅读器文件交换脚本,用于显示来自 Web API(在本例中为维基百科)的图像(和文本)的示例。
// Uses Graphlet to display flower image as thumbnail, click to open in browser
Names Default to Here(1);
cwd = Get Default Directory();
dt = Open("$SAMPLE_DATA/Iris.jmp");
gb = dt <<
Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Petal length ), Y( :Sepal length ), Color( :Species ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(PictureBox(Open( cwd || local:_Species || ".jpg", "jpg"))),
Click(Web( "file://" || cwd || local:_Species || ".jpg" ))
)}
)
)
);
回复:悬停标签你好,
这是一个非常有趣的请求!我能想到的一种可能的方法是使用脚本来1)创建一个新列,2)将该图片插入该列中文件名与另一列中的值匹配的行,3)将图片显示为悬停标签。这样,只有将鼠标悬停在点上时,图片才会添加到表格中。您可以在脚本的开头添加一行,在创建新列之前删除图片列(如果存在),从而确保一次仅将一张图片插入表中。这听起来可行吗?