如何通过 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 用户界面。 它可以在 JSL 中使用 New Web Report 自动化。 这是脚本索引的摘录:
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<<复制轴设置和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 从剪贴板粘贴图形;或者:如何创建一个独立的图例?可以使用 Main Menu("Paste") 从剪贴板粘贴,但它不是很有用(很难用 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 从剪贴板粘贴图形;或者:如何创建一个独立的图例?我不确定你到底想做什么,但 Get Picture 可能是你需要的。 它为您提供了一个图片对象,然后您可以将其放入 JMP 显示树中。 这是脚本索引中的一个示例:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
New Window( "Example", rbiv << Get Picture );
那是你要找的吗? 这将只是一张静态图片,而不是交互式的。