你好,
我正在尝试使用图形生成器将一组点用线段连接起来,并仅显示其他点的标记。这样我的图看起来就像这样(此处的线条是手动添加到图片中以便说明):

我尝试使用单独的列来实现叠加功能,它确实允许为不同的点组绘制单独的线。但我无法删除这些线,只为单个点组保留标记(反之亦然)。
在JMP表中,我将应该用线连接的点分别设置为4个点。理想情况下,这4个点中的最后一个应该与第一个点相连。
附件是 JMP 文件(JMP 18,常规版本,不是 PRO)。
非常感谢任何建议或意见。
谢谢你!
弗拉基米尔

我以交互方式制作了此
- 我在数据表中添加了一个额外的覆盖行,以添加连接线以结束其开始的位置

- 然后我将 Overlay_column 拖到颜色下拉框
- 然后我在图表中添加了一条线,显示了两条线

- 我不想要黑线,所以我只是将黑线的线条颜色设置为白色

- 这使得非叠加数据点的标记看起来很奇怪。这是因为之前的黑线显示在点的上方。
- 要将黑点移动到现在的白色(用户看不见的)线条上方,我右键单击图表并选择“自定义”

- 然后我选择标记 0,并使用向下箭头将黑色标记向下移动到线 (0) 上方

- 最终的图表

这是生成图表的 JSL
Graph Builder(
Show Control Panel( 0 ),
Variables(
X( :Ex ),
Y( :Gxy ),
Overlay( :overlay_column ),
Color( :overlay_column )
),
Elements(
Points( X, Y, Legend( 5 ) ),
Line( X, Y, Legend( 6 ), Row order( 1 ) )
),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(
5,
Properties(
0,
{Line Color( 0 ), Marker( "FilledCircle" )},
Item ID( "0", 1 )
),
Properties( 1, {Marker( "Circle" )}, Item ID( "1", 1 ) )
), Legend Model(
6,
Properties( 0, {Line Color( 2 )}, Item ID( "0", 1 ) )
)}
),
Dispatch( {}, "Graph Builder", FrameBox, {Reorder Segs( {1, 2, 5, 6} )} )
)
);
还有其他方法可以解决这个问题。这里有一个直接的 JSL 方法,使用“添加图形脚本”来绘制线条

Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :Ex ), Y( :Gxy ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "Gxy", ScaleBox,
{Min( 0.781114518510881 ), Max( 3.84890945699133 ), Inc( 0.5 ),
Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Pen Color( "Red" );
Line( {5, 1}, {5.5, 3.5}, {10, 3}, {11, 1.5}, {5, 1} );
)}
)
)
);
无需覆盖列和行
嘿@VladimirB ,
我可以得到你想要的结果,但这种方法真的很笨重,因为你必须对行进行排序,才能确保点按照你想要的方式连接。所以现在你并不是只需选择这些点,它们就能构成一个漂亮的闭合形状。但是,由于你的示例中的数据顺序正确,所以这种方法确实能达到你想要的效果。

我创建了两个新列(col 4 和 col 5),它们仅返回所选行的值,然后在末尾添加了一个虚拟行,允许 col 4 和 col 5 返回所选的最低值,从而关闭形状。


我添加第 4 列作为第二个 Y 轴,第 5 列作为第二个 x 轴,并且点元素仅尊重 Gxy 和 Ex,线元素仅尊重行顺序中的 Col4 和 Col 5。
所以就像我说的,虽然有点笨重,但它可以让你达到目的,并可能激励你或其他用户做出更好的东西!
史蒂夫
嘿@VladimirB ,
所以我想做一个像你问的那样,能交互地创建连接点的东西,所以我写了这个脚本,可以交互地连接点。附件里有一个脚本,你可以用它来选择点,并让它们通过线段连接起来。
当你运行它时,它会询问你使用哪些列作为 Y 轴和 x 轴列

当您按下“确定”时,它将创建三列,然后会弹出一个新窗口:

此时您可以运行表脚本

这给了你这个

现在您可以选择一个点,然后在用户界面窗口中单击“设置值”

然后您可以选择一个新点并再次按“设置值”按钮来连接这两个点

重复此操作,直到选定所有点

选择所有点后,单击“完成”按钮将线链接到起点

如果你错过了一个点,你可以选择它并按“设置值”,这会让它看起来一秒钟混乱

但您可以使用“插入中间点”按钮来修复它。在这种情况下,点 8 实际上应该位于点 5 之后,因此当您点击按钮时,您将输入 5 并按下“确定”。

然后 Bam! 点被重新排序

如果需要重新开始,请按“清除值”按钮
希望这能帮到你!另外,我确信这在很多情况下都不够稳定,所以除了我刚才演示的工作流程之外,它很有可能存在 bug。
嘿@hogi ,
我确信你可以让它比我更有用。
史蒂夫