按变量分类的条形图大家好,
这听起来像是一个简单的问题,但我还没有找到解决这个问题的方法。
我对多个样本进行了测试,对于每个样本,测试输出构成样本的三种不同成分的百分比。
我设置了一个包含 4 列的数据表:1 列用于样品名称,另外 3 列用于 3 个组分的百分比。
我正在尝试创建一个集群条形图,如所附图片(在 Excel 中完成)所示,其中数据分为 3 个不同的集群,对应于 3 个组件。
我知道我可以先尝试堆叠所有组件列(“按变量聚类”描述这里);然而,这会使它成为一个超长的表格并且难以导航(我有多种类型的测试,每种测试都输出不同的组件)。 此外,我需要有 2 个单独的表,一个用于更易于导航的原始数据格式,另一个用于聚集条形图。
我正在考虑两种不同的方法来解决这个问题。
1) 对于每个测试,并排绘制每个组件的结果。 有没有办法让它们都共享同一个 y 轴?
2)使用列堆叠方法,有没有什么办法可以将两个表合并为一个,这样我就可以在原始表中保存一个脚本,当我点击它时,它会自动生成聚集条形图? 我知道我可以保存生成堆叠表的脚本,但我仍然需要重新制作聚类条形图。
谢谢你!
回复:按变量排列的条形图谢谢! 这就是我想知道的。 不过这没什么大不了的,因为正如您所说,可以访问每个操作的脚本。
回复:按变量排列的条形图吉姆,
感谢您引导我完成您的代码 - 现在一切都清楚了。 快速提问 - 如果我想向新的堆叠表添加多个操作,我仍然需要在每个操作之前调用它,对吗? 比如说,如果我还想从堆叠表中绘制直方图,我会添加下面这行吗?
dtStack << Distribution( Continuous Distribution( Column( :Data ) ) );
回复:按变量排列的条形图需要明确的是,没有一种方法可以将您在 JMP 中的所有操作记录到一个脚本中。您可以在 Excel 中以这种方式记录宏,但不能在 JMP 中记录。
相反,您可以通过点击红色小三角并选择其中一个“保存脚本”选项来访问您在 JMP 中运行的每个平台的 JSL。
回复:按变量排列的条形图让我回顾一下我为制作我在本次讨论中提供给您的脚本所做的工作,以此来说明我创建脚本的方法。
- 您没有提供数据表,所以我不得不创建自己的示例数据表。
- 由于我想向您提供我的示例数据表的副本,因此我必须决定最好是保存并上传该表,还是只将其包含在脚本中。由于它的大小非常适中,我决定只放入脚本。
- 所以我打开了一个脚本窗口。
- 我手动输入
Names Default to Here(1);
这通常应该是每个脚本的第一条语句。它确保此脚本中的 JSL 变量将与此脚本隔离并且不会干扰其他脚本。
- 然后我转到我创建的数据表,单击表面板中的红色三角形并选择“复制表脚本”。这将生成当前存在的表的脚本放入粘贴缓冲区。
- 然后我回到脚本窗口并将其粘贴到第一行下方的脚本中
Names Default to Here(1);<BR />
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
我还在表定义前面添加了 dt =,这样就可以通过“dt”来引用这个数据表,而不是更正式地引用“数据表(“example”)”。
- 然后我开始玩,与数据表和图形生成器交互,弄清楚我必须做什么才能生成我想要的图形。这是一种迭代方法,需要多次数据表操作和图表生成器执行,直到我得到我想要的结果。
- 因此,一旦我对结果感到满意,我就会查看生成结果所需的内容。 这是堆叠数据的简单表操作,然后图形构建器在堆叠数据上运行。
- 首先,我需要获取脚本代码。此代码在堆叠数据表的表格面板中很容易获得。如果右键单击表格面板中“源”条目前面的绿色三角形,则可以选择“编辑”。这将显示可用于重新创建此数据表的 JSL。我选择了所有代码并复制到粘贴缓冲区中,就在脚本窗口中已经存在的 JSL 之后
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);请注意,我还添加了一个指向堆栈的指针“dtStack =”,并将对原始数据表的长引用替换为“”dt”的短引用;
- 接下来我转到 Graph Builder 输出并单击红色三角形并选择“Save Script==>To Clipboard”
- 然后我将剪贴板(粘贴缓冲区)粘贴到脚本中。
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);请注意,我在 Graph Builder 语句前面添加了“dtStack <<”。这是确保 Graph Builder 将在堆叠数据而非原始代码上运行的最佳方式。
所以这是用于创建组合脚本的过程。正如我相信您可以想象的那样,可以将许多不同的平台添加到这样的脚本中,它们可以使用原始数据表(“dt”)或堆叠数据表(“dtStack”)。您可能还需要添加其他数据表操作等。
关于批量复制您已保存到数据表的脚本,我不知道是否可以这样做,但是,我自己对此没有意见。大多数时候,我希望构建脚本,而不是自己进行数据分析。
回复:按变量排列的条形图是的,听起来我误解了你的意思。
你能在“表操作脚本和平台保存脚本”位?
我刚刚发现的一件事是我实际上可以复制数据表的整个脚本。 因此,仅此一项就足以满足我目前的需求。 我仍然需要首先将单个报告作为新脚本保存到数据表中,但现在我可以同时而不是单独复制所有报告。
回复:按变量排列的条形图JMP 方法是简单地从每个图形中获取脚本,连同数据操作并将它们放入一个脚本中。
这听起来有点像您在考虑将脚本保存到数据表中。那不是我的意思。我正在考虑将表操作脚本和平台保存脚本保存到新的脚本窗口。
回复:按变量排列的条形图我明白你在说什么,这正是我所做的 - 结合表格堆叠脚本和图形生成器脚本。
我只是问我需要做多个操作的情况(比如,在第二个表中生成多个图表)而不是两个 - 是否有办法在我执行时将所有这些操作“记录”到一个脚本中他们。 并不是说有必要,我只是想知道 JMP 中是否存在这样的功能。
回复:按变量排列的条形图答案是肯定的。
我发布的 JSL 主要是由 JMP 编写的。您运行的每个 Platform 以及您执行的每个 File==>Tables 操作都会显示 JSL,该 JSL 将重新生成以交互方式创建的数据表或显示。
当您通过堆叠创建新数据表时,新表的“源”条目包含将创建数据表的 JSL。
对于 Graph Builder Platform,如果您转到红色小三角并选择“保存脚本”,它将提供一个脚本来重新创建图形。
回复:按变量排列的条形图谢谢你!
我从未在 JMP 中编写过脚本,但我能够将原始表中的堆栈脚本和堆叠表中的图形生成器脚本合并为一个,只需稍加修改即可运行。 仍然需要生成一张新表,但至少我只保留一张表。
听起来我需要开始学习在 JMP 中编写脚本以使我的生活更轻松。
出于好奇,JMP 中是否有任何功能允许我将我在用户界面上的操作“记录”到脚本中?
回复:按变量排列的条形图我能够用一个简单的 Stack 和一个 Graph Builder 重现你的图表。

Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);