如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?大家好,
我已经达到了我的(相当有限的)脚本技能的极限,正在寻求帮助。
我目前正在尝试做的是基于“按列颜色”或行图例创建一个图例,该图例不会附加到某个图,但可以放置在单独的大纲框等中。
我尝试这样做的原因是,我正在编写一个 JSL 脚本,该脚本最终将从数据库中检索一大堆数据,并为具有不同图例的不同流程步骤提供大量可视化效果。 最重要的是,我想将其作为交互式 html 文件分发。 由于会有很多图表,因此需要大量滚动,我希望生成一个大纲框/滚动框对齐,其中图例和一些书面信息在滚动图表时应该保持可见(在窗口的单独部分)。
到目前为止,我成功做到的是将生成的图例的边框框复制到剪贴板(一个是指安装了“行图例”的通用单向图)
rOne = One << report;
Link = rone[Owner Box(1)] << parent;
show (Link);
Link << copy picture
它将图例边框框复制到剪贴板。 例如,我可以将其粘贴到 Word 中,并准确获取我正在寻找的内容。 不幸的是,我找不到 JSL 命令来将剪贴板中的图形粘贴到可视化中。 我在图片框环境中通过“获取剪贴板”进行了尝试,但此命令似乎仅适用于文本。
有谁知道是否可以从剪贴板粘贴图形?
或者,是否有人有一个代码片段,允许创建一个独立的图例(我尝试从行状态转换它,但没有走得太远)?
任何帮助是极大的赞赏。
问候
马尔特
大规模定制回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?你好,约翰,
我会这样做,但只有在我尝试确保交互式 html 环境中确实有一个关于滚动框的主题,而不是在我的代码中(这是我第一次尝试使用滚动框,可能还有一些改进的空间:) )
问候
马尔特回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?马耳他,
请发送有关交互式 HTML 问题的更多详细信息。
如果您不愿意与社区分享,请给我发送私人消息或向技术支持报告问题。
谢谢,
〜约翰
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?感谢您的输入@多发性硬化症。
我真的很喜欢直接从数据表创建图例的想法。 这可能会非常方便,尽管在脚本的末尾,会有一大堆图例窗口漂浮在周围......回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?非常感谢您提供快速简单的解决方案@Melanie_J_Drake ,尽管我决定采用更雄心勃勃的 danschikore 解决方案:)回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?非常感谢, @danschikore 。 你的解决方案很棒。 我不得不稍微修改你的代码以使其适合我的可视化方案,但它工作得很好。
我在滚动框显示方面仍然遇到一些问题,但这似乎是交互式 html 可视化中的一些错误(例如数据消失;在一个特别有趣的情况下,绘图没有显示在 JMP 环境中,但在保存为交互式 html 时确实显示了(尽管有些扭曲))。
非常感谢你的工作
问候
马尔特
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?所有这些答案都很棒!
我只是想补充 gzmorgan0 关于许多交互式 HTML 文件的建议。 创建 HTML 用户界面以引用多个交互式 HTML 文件的一种方法是使用 JMP 主菜单中的文件 > 发布。 它将为您的交互式 HTML 报告创建一个带有缩略图的 HTML 用户界面。 可以使用新 Web 报告在 JSL 中实现自动化。 以下是脚本索引的摘录:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp", Invisible );
webreport =
New Web Report(
Add Report(
Distribution(
Continuous Distribution(
Column( :weight )
),
Nominal Distribution( Column( :age ) )
),
Title( "Distribution Web Report" ),
Description(
"This report was created with the sample found in the Scripting Index"
)
)
);
file = webreport << Save( "$TEMP" );
If( !Is Empty( file ),
Web( file )
);
该示例仅添加一份报告,但您可以添加任意数量的报告。 它还保存到临时位置,但您可以将其设置为共享网络驱动器,然后将该位置发送给您的同事。
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?@danschikore ,那真是太酷了。
这是使用数据过滤器上下文框的另一种选择。 我认为编写脚本更容易一些,并且允许对交互式 HTML 进行多个过滤器。 它没有JMP图例,但数据过滤器功能强大。下面提供了一个示例。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
nw = New Window( "Shared Local Filter",
Data Filter Context Box(
H List Box(
Current Data Table() << Data Filter( Local, Add Filter( columns( :sex ) ) ),
ScrollBox(
Platform(
Current Data Table(),
biv = Bivariate(
X( :height ),
Y( :weight ),
By( :age ),
)
)
)
)
)
);
_xxx = biv<< Xpath("//FrameBox");
_xxx << {MarkerSize(6)};
_xxx << RowLegend("sex", color(1), Marker(1)); //this will just be a reminder
nw << Save Interactive HTML("C:/temp/SharedLocalFilter.html");
@MJE如果您确实有很多报告,您可能需要考虑为 JMP 创建的交互式 HTML 页面/文件创建自己的 HTML 界面,而不是滚动报告。互联网上有许多 html 搜索 UI 的示例。
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?JMP 在某些地方使用剪贴板中的内容 - 通常与复制到剪贴板的方法配对,例如轴<<复制轴设置和axis<<粘贴轴设置。
对于您的用例,我建议复制或移动框而不是创建图像。要从行图例复制,您可以执行以下操作:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "age", color( 1 ), Marker( 1 ) );
subset = dt<<GET rows="" where=""> 58 & :weight < 95);
w = New Window("Custom Report",
H List Box(
Graph Box(FrameSize(300,300),MarkerSeg(:weight[subset], :height[subset],Row States(dt, subset))),
(biv<<REPORT></REPORT></GET>
导出为 HTML 时,图例仍会转换为图像,但这会将所有内容保留为 JMP 中的 JMP 显示框。但是,您会注意到克隆的图例不像原始图例那样可单击。使用从......中去除()和插入() ,您可以重新排列框而无需克隆它们。这使得可滚动报告类似于您的建议:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ), by( :age ) );
rbiv = biv[1] << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "sex", color( 1 ), Marker( 1 ) );<BR />
// extract legend and report
legend = rbiv[OwnerBox(1)];
legendparent = legend<<PARENT></PARENT>// rearrange into a scrolled layout
toprpt << Append(hlist = HListBox(scrollbox=VScrollBox(800)));
InsertInto(scrollbox, fullrpt, 1);
InsertInto(hlist, legendbox, 2);
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?可以使用主菜单(“粘贴”)从剪贴板粘贴,但它不是很有用(很难用 jsl 控制时间和目标)。
不确定你想要什么,但我确信有比通过此处的剪贴板更好的选择。
下面是一个可能有用的示例:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/big class.jmp");
ow = Report(dt << Oneway(Y(:Height), X(:Age)));
rl = dt << Color By Column(:Age, Make Window With Legend);
nw = New Window("row legend",
H List Box(Scroll Box(Size(400, 600), V List Box(ow, ow, ow, ow)), rl)
);
// nw << Save Interactive HTML("path/example.html");
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建一个独立的图例?我不确定你到底想做什么,但“获取图片”可能正是你所需要的。 它为您提供一个图片对象,然后您可以将其放入 JMP 显示树中。 以下是脚本索引中的示例:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
New Window( "Example", rbiv << Get Picture );
这就是您要找的吗? 这只是一个静态图片,而不是交互式的。
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建独立图例?我想向插件添加第二种模式https://marketplace.jmp.com/appdetails/Image+to+Table经过@Jed_Campbell .
插件从硬盘加载图像。在某些情况下,从剪贴板粘贴图像会很有帮助。
是否有一个 JSL 命令可以从剪贴板粘贴图形?
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建独立的图例?
是否有 JSL 命令可以从剪贴板粘贴图形?
我认为目前没有办法用 JSL 来实现这一点。或许JMP 愿望清单里可以添加这个功能?
回复:如何通过 JSL 从剪贴板粘贴图形;或者:如何创建独立的图例?好的,这里是: 从剪贴板粘贴图形