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

我想做的是采用他的原始图形构建器绘图并从图例中提取标记样式和颜色并将它们设置为 dt 属性。 目的是让用户可以在他们的工具栏中将一些 JSL 代码作为热按钮运行,这将修复数据的标记和颜色。 需要这样做的原因是,在 Graph Builder 中,每当用户使用数据过滤器更改区域时,客户集的颜色编码和标记都会发生变化,因为每个区域内的客户数量都会发生变化。 例如,他们希望将此作为数据列的固定属性。
我正在尝试一些类似这样的 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 ,
感谢您的反馈。 不幸的是,这并不是我感兴趣的事情。 用户实际上并没有更改行状态或标记,他们让 Graph Builder 自动执行此操作。 但每次进行更改时,颜色和标记都会根据 JMP 的默认设置进行更改。 我想提取 Graph Builder 自动执行的标记和颜色“设置”,然后将其应用于 dt,以便在对 Graph Builder 进行更改时将其固定并且不会更新。 为了方便用户,我想自动执行此操作。
我认为它更接近 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
马耳他