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

现在您可以右键单击图例并将其更改为您想要的任何内容,如果您选择了“使用图例创建窗口”,它将为您创建一个图例。 这样做的另一个好处是可以在表中选择您在图例中选择的任何内容。
您可以使用以下命令在内部脚本中执行相同的操作:
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);
回复:带有行状态标记和颜色的强制图例这似乎是一个很好的解决方案。 我现在需要将其适应我的情况。 多谢!
只是对行状态感到失望!
回复:带有行状态标记和颜色的强制图例如果你看
帮助==>脚本索引
并查看图形生成器和图例框()元素,在图形生成器运行后操作图例是有限的。 但是,您可以使用一种适用于任何情况的技术,但有点麻烦。 如果您生成一个文字字符串,其中包含让图形生成器执行您想要的操作所需的代码,则您可以运行该文字字符串。 这是一个非常原始的例子,但我想你会看到你可以用它做什么样的事情
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)。 这意味着我需要在制作 graphbuilder 的脚本中创建 N 行(我需要使用“legend box(properties(0...N)”)调度 N 行)。 但是,如果我在图例框中构建一个包含 N+1 行的图表,它将部分工作(第 N+1 行不会被修改)。 因此,我需要在制作图形构建器的脚本内(是否可行?)或在制作图形构建器的脚本之后创建一个循环(这更有意义,但我无法找到可以发送到 legendbox 的消息) 。
回复:带有行状态标记和颜色的强制图例1. 标记的编号如下图所示。 这是由脚本生成的,如脚本指南中所示
帮助==>书籍==>脚本指南

有些标记已分配有名称,您可以在图形生成器脚本中看到这些名称。 我不知道这些名称的任何列表,但您始终可以交互地运行图形生成器并分配所需的标记,然后查看它生成的脚本,看看它是否为您提供了名称而不仅仅是数字。
2. 图例将以字母或数字顺序列出,除非打开“值排序”或“行顺序级别”。 您可以通过编程来确定这一点,然后调整您的代码。 至于找出数据表中的年龄,我最常使用 Summarize() 函数
总结(dt,按组=按(:年龄));
变量“bygroup”将包含找到的所有不同年龄的列表。
N 项(按组);
为您提供找到的不同年龄的数量
回复:带有行状态标记和颜色的强制图例感谢你及时的答复,
1/ 只要我有完整的标记名称集(我在文档中找到了标准 JMP 颜色),它就可以工作。 你知道我在哪里可以找到与标记名称等效的内容吗?
2/ 在这种情况下,如果颜色和标记写在专用表中,我可以通过 (eval(substitute(expr(graphbuilder(color1,marker1),expr(color1),mycolor, expr(标记1),我的标记)))。 它有效,向前迈出了很好的一步,但我需要知道图例中的项目数量才能进行替换。
为了让“大类”文件更清楚,如果覆盖是用 :AGE 制作的,并且如果我不知道文件中的 AGE,我该怎么办?
如果我能够向图例框发送消息,我也许可以循环执行此操作(在图形生成器之后)。 但我在文档消息中找不到修改该项目的信息...最后树节点在 legendbox 节点中为“空”。
回复:带有行状态标记和颜色的强制图例我发现 JMP 处理此问题的最简单方法是修改图例,从而使用 JSL 修改图形,以匹配您的行状态。 以下脚本展示了如何在图形生成器中修改图例。
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} )} )
)
);
它产生以下内容
