关于 VariabilityPlot,需要牢记的一点是每个最低显着组在隐藏的 x 轴上的宽度恰好为 1,从零开始。这使得添加相关行变得非常简单。
唯一有点复杂的是计算出每个较大的组包含多少个子组,但数据表的摘要功能可以帮助解决这个问题。
这是一个示例脚本,可以执行您的要求:

names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = categories << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += categories[items[i]], values[items[i]]} ) );
0
)
)
)
) )你好,
首先,非常感谢您提供的信息和代码,我试图逐行了解您是如何编写脚本的。 当我运行脚本时,控制台日志中似乎出现了“cagegories << Get Keys”行的错误。 你知道如何解决这个问题或者它是否应该是另一个变量?


谢谢,感谢您的帮助!
抱歉——我只是部分更改了变量名。名字类别本来应该数字.我已经通过上面的回复进行了编辑。
大家好,
我制作了一个按两个条件分割的变异性图表,通过这样做, jmp 创建了一个具有共享 y 轴的图表。 我对这个共享 y 轴的问题是,当我添加一条水平线时,它会在每个 x 分割上添加它,而不是能够按组拥有不同的水平线。 我想知道这是否可以通过每个循环的可能值来实现,因为我希望水平线是原始数据表中的值。
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P"), :Protection )
);
理想情况下,这就是我希望它基于表中的值的样子。
我目前的尝试是:
for each( {bygroup, i}, value,
report(dt[i])[AxisBox(1)] << add ref line(value[i], "Dotted","Black", Char(value[i]))为了能够使用这个数据集,如果您能够使用“:Wt”列来显示这一点,我将非常感激。 谢谢你!