使用行状态的标记和颜色强制图例你好,
我正在尝试用标记和颜色制作一个图例,但我想选择它们。 我认为多亏了行状态(颜色状态、标记状态、组合状态),这会很容易。 但是一旦为每一行分配了颜色和标记,我就无法找到一种方法来强制它们出现在图例中。
我想通过脚本来做(我想添加一个带有图例的框),但我无法找到一种方法来处理我创建的“标记”。
谢谢
回复:使用行状态的标记和颜色强制图例谢谢伊恩,
它更接近我最初的想法,并且很容易集成到我的脚本中。
所以我稍微喜欢这个解决方案,即使另一个效果很好。
回复:使用行状态的标记和颜色强制图例我还没想出如何用脚本来做,但如果你去行>颜色或按列标记
你得到以下

现在您可以右键单击图例并将其更改为您想要的任何内容,如果您选择了“使用图例制作窗口”,它将为您创建一个图例。 这具有在表中选择您在图例中选择的任何内容的额外好处。
您可以在脚本内部执行相同的操作:
Names Default to here(1);
dt = Open("$SAMPLE_DATA\Big CLass.jmp");
legend = dt << Marker By Column(:age);
new window("Not Really",
Hlistbox(
bivariate(Y(:height), X(:weight)),
legend
)
)
但是您失去了(至少我还没有找到方法)您所追求的可定制性
回复:使用行状态的标记和颜色强制图例作为替代方案,您可以考虑使用“MarkerSeg”。 在下面的代码中,“dt”是您希望着色和标记的列的所有不同级别的表格。 您可以使用“表格>摘要”并使其不可见。
NamesDefaultToHere(1);
// Example data table (markers and colors assigned by 'Lot ID')
dt = New Table( "Rows With Colors and Markers",
Add Rows( 12 ),
New Column( "Lot ID",
Character,
"Nominal",
Set Values(
{"lot1", "lot10", "lot11", "lot12", "lot13", "lot2", "lot3", "lot4",
"lot5", "lot6", "lot7", "lot8"}
),
Lock( 1 )
),
Set Row States(
[896.813481688499, 1104.17848521471, 34064.2516910434, 1584.79095828533,
1856.1745531559, 34848.5869575739, 35120.7292968035, 2704.17450988293,
2976.75480300188, 3200.51829791069, 3408.21706777811, 36368.77437675]
)
);
// Make legend window with MarkerSeg
n = NRow(dt);
xx = J(n, 1, 1);
yy = Transpose(1::n);
legendList = Column(dt, "Lot ID") << getValues;
gb = Graph Box(
FrameSize( 150, 300*(n/16) ),
Y Scale( 0, n+1 ),
X Scale( 0, 6 ),
Y Name(" "),
X Name(" "),
Y Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
X Axis(ShowLabels(0), ShowMajorTicks(0), ShowMinorTicks(0)),
Marker Seg( xx, yy, Row States( dt ) ),
For( i = 1, i<=n, i++, Text( {1.5, i-0.1}, legendList[i] ) )
);
db = PanelBox("Row State Colours and Markers for 'Lot ID'", gb);
New Window( "My Legend", db);
回复:使用行状态的标记和颜色强制图例这似乎是一个很好的解决方案。 我现在需要根据我的情况调整它。 非常感谢!
只是对行状态感到失望!
回复:使用行状态的标记和颜色强制图例如果你看
帮助==>脚本索引
并查看 Graph Builder 和 Legend Box() 元素,在 Graph Builder 运行后操作图例是有限的。 但是,您可以使用一种适用于任何事物但有点麻烦的技术。 如果您生成一个文字字符串,其中包含让 Graph Builder 执行您想要的操作所需的代码,那么您可以运行该文字字符串。 这是一个非常原始的例子,但我想你会看到你可以用它做什么
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Summarize( dt, groups = by( dt:sex ) );
numofgroups = N Items( groups );
TheCode =
"Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
\!"400\!",
ScaleBox,
{Legend Model(
1,";
For( i = 0, i <= numofgroups - 1, i++,
Show( i );
TheCode = TheCode || "Properties(" || Char( i ) || ", {Line Color (" || Char( i + 3 ) || "),Marker( " || Char( 16 - i ) || ")}),";
);
TheCode = TheCode || "Dispatch( {}, \!"400\!", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} ))';";
Eval( Parse( TheCode ) );回复:使用行状态的标记和颜色强制图例谢谢吉姆
1. 我同意这不是一个真正的问题... 我可以通过一些工作得到清单!
2. 可能我不够清楚。 正如您所提到的,我可以轻松地在图例中获取需要修改的项目数(N)。 这意味着我需要在创建图形构建器的脚本中创建 N 行(我需要使用“图例框(properties(0...N)”)调度 N 行)。 但是,如果我在图例框中构建一个包含 N+1 行的图形,它将部分工作(第 N+1 行不会被修改)。 因此,我需要在制作graphbuilder的脚本中(可行吗?)或在制作graphbuilder的脚本之后(这更有意义,但我无法找到可以发送到legendbox的消息) .
回复:使用行状态的标记和颜色强制图例1. 标记的编号如下图所示。 这是由脚本生成的,如脚本指南中所示
帮助==>书籍==>脚本指南

一些标记具有分配给它们的名称,您已经在 Graph Builder 脚本中看到了这些名称。 我不知道这些名称的任何列表,但您始终可以交互地运行 Graph Builder 并分配所需的标记,然后查看它生成的脚本,看看它是否为您提供了名称而不仅仅是数字。
2. 图例将按字母或数字顺序列出,除非打开了值排序或行顺序级别。 以编程方式,您可以确定这一点,然后调整您的代码。 至于找出数据表中的年龄,Summarize() 函数是我使用最多的函数
总结(dt,按组=按(:年龄));
变量“bygroup”将列出找到的所有不同年龄。
N 项(按组);
为您提供找到的不同年龄的数量
回复:使用行状态的标记和颜色强制图例感谢你及时的答复,
1/ 只要我有一套完整的标记名称(我在文档中找到标准 JMP 颜色),它就可以工作。 你知道我在哪里可以找到与标记名称等效的东西吗?
2/ 在这种情况下,如果颜色和标记写在专用表中,我可以通过 (eval(substitute(expr(graphbuilder(color1,marker1),expr(color1),mycolor, expr(标记1),我的标记)))。 它有效,向前迈出了一大步,但我需要知道图例中的项目数才能进行替换。
为了让“大类”文件更清楚,如果覆盖是使用 :AGE 制作的,并且我不知道文件中的 AGE,我该怎么办?
如果我能够向图例框发送消息,我也许可以循环执行(在图形生成器之后)。 但是我在修改该项目的文档消息中找不到......最后树节点在图例框节点中是“空的”。
回复:使用行状态的标记和颜色强制图例我发现 JMP 处理此问题的最简单方法是修改图例,因此使用 JSL 修改图形,以匹配您的行状态。 这是一个脚本,显示了如何在 Graph Builder 中修改图例。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 1 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
), Legend Model(
1,
Properties( 0, {Marker( "FilledTall" )} ),
Properties( 1, {Line Color( 1 ), Line Style( "Dashed" ), Marker( "Filled Diamond" )} )
)}
),
Dispatch( {}, "400", LegendBox, {Legend Position( {1, [2, 3], 1, [0, 1]} ), Position( {2, 3, 0, 1} )} )
)
);
它产生以下
