如何获取图例框信息,例如颜色和标记类型亲爱的 JMP 社区:
(W10 企业版 64 位、JMP Pro 15.0)
我有一个用户正在使用图形生成器生成一个包含多个信息位的相当复杂的图形。 市场数据按区域、客户等划分。因此,散点图采用颜色编码并具有多个标记。 作为示例,下面的图表可能看起来像这样(使用 Big Class Families.jmp)。

我想做的是获取他的原始图形生成器图,并从图例中提取标记样式和颜色,并将它们设置为 dt 属性。 目的是让用户可以运行一些 JSL 代码作为工具栏中的热按钮,以修复数据的标记和颜色。 需要这样做的原因是,在图形生成器中,每当用户使用数据过滤器更改区域时,客户组的颜色编码和标记都会发生变化,因为每个区域内的客户数量都会发生变化。 例如,他们希望将其作为数据列的固定属性。
我正在尝试一些像这样的 JSL 代码,试图从树结构内的 LegendBox(1) 获取信息,但我得到 null 作为该行的结果: test = legend<
Names Default to here(1);
dt = Open("$Sample_Data/Big Class Families.jmp");
gb=dt<<GRAPH builder=""></GRAPH><BR />test = legend<<GET property=""></GET>如果颜色信息是 RGB 或其他形式,那就没问题,它不需要像“蓝色”或“红色”这样的名称。
非常感谢任何有关如何进行的建议。
谢谢,
DS
回复:如何获取图例框信息,例如颜色和标记类型你好@MJE ,
感谢您的额外反馈。 有用! 感谢您的解决方案,我会将其标记为这样。 我确实稍微修改了它,使其更像用户所要求的,但除此之外,它完成了工作。 据我所知,标记和颜色列表的顺序与图例相同。
这是我使用的代码的修改版本:
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :age ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height)
);
segs = Report(gb)[Framebox(1)]<<FIND segs=""></FIND>
我得到的输出:
MarkerList = {"圆形", "加号", "菱形", "X", "三角形", "Y"};
颜色列表 = {{66, 112, 221}, {212, 73, 88}, {61, 174, 70}, {162, 43, 221}, {204, 121, 41}, {40, 182, 143} };

谢谢!,
DS
回复:如何获取图例框信息,例如颜色和标记类型也许这里的这一部分可能对您有帮助。 至少,它为您提供了一些信息,图表中的实际数据点具有哪种颜色和标记。 不幸的是,我无法找到一种方法来直接将数据点(分别是标记段)与实际行号相关联。 也许其他人有关于如何做到这一点的想法......
“获取标记”消息可以替换为“获取标记”,以便为您提供此标记段中已使用标记的列表。 但由于它们在这种状态下都是相同的,所以我将其缩短以提高可读性。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :sex ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height)
);
//gb << show tree structure;//only for debugging and building the script
segs = Report( gb )[Framebox( 1 )] << Find Segs;
For ( i = 1, i <= n items (segs), i++,
seg = Report( gb )[Framebox( 1 )] << Find Seg( MarkerSeg(i) );
nx = seg << get x values;
ny = seg << get y values;
m = seg << get marker;
c = seg << get colors;
show (nx, ny, m, c);
);
希望这可以帮助。
br
马尔特
回复:如何获取图例框信息,例如颜色和标记类型你好@MJE ,
感谢您的反馈。 不幸的是,这并不是我感兴趣的事情。 用户实际上并没有更改行状态或标记,他们让图形生成器自动执行此操作。 但每次进行更改时,颜色和标记都会根据 JMP 的默认值发生变化。 我想提取图形生成器自动执行的标记和颜色“设置”,然后将其应用到 dt,以便它是固定的,并且在对图形生成器进行更改时不会更新。 我想自动执行此操作,以方便用户。
我认为它更接近 MarkerSeg 和 <<
我现在正在阅读它,并尝试使用下面修改后的代码修改脚本索引中的示例。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class Families.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Graph Spacing( 5 ),
Variables( X( :weight ), Y( :height ), Overlay( :age ), Color( :sex ) ),
Elements( Points( X, Y, Legend( 33 ) ) ),
MarkerSeg(:weight, :height, Row States(dt))
);
gb << show tree structure;//only for debugging and building the script
lgnd = (gb << Report)[FrameBox(1)];
markerseg = (lgnd<<FIND seg=""></FIND>
但是,当我运行它时,我得到以下标记的输出:{“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”,“Dot”}
从我在原始帖子中包含的图形来看,每个数据点都不是“点”。
谢谢!,
DS
回复:如何获取图例框信息,例如颜色和标记类型你好@SDF1 ,
如果我正确理解您的问题,您可能需要检查行状态。
<< copy from row states
和
<< copy to row states
允许您将行状态信息(例如颜色、标记等)传输到单独的列中,然后再次传输回行状态(示例和语法可以在脚本索引中找到)。
br
马尔特