關於 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”列來顯示這一點,我將非常感激。 謝謝你!