如何在變異性圖表中新增具有共享 y 軸的動態水平線,其中分組 x 軸具有不同 N 的重複值?大家好,
我想创建一个新线程来根据我之前的帖子进行区分: https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal -line-by-shared-y- axis-among /mp/622722 。同样的想法适用于我希望在变异性图表上有一条动态水平线的地方,但与之前使用关联数组的解决方案不同,因为每个x 有一个值,这种情况下每个x 分组可能有多个值,其中繪圖基於 N per x 不起作用,因為 N 是在條件之間分割的,並且必須這樣繪製。 This is where I am struggling to figure out how to do that and would appreciate someone with more graph scripting experience to aid if possible.例如,以下是帶有手繪線條的所需輸出,產生圖形的程式碼也如下。
在下面的範例中,豐田現在分為:保護,其中有 N=8 和 N=3,同樣福特的分組為 N=11 和 N=3,我想確保豐田組和福特組其中,有一條水平線,其值為Max(:Wt),如紅線和藍線所示,所有其他線都有一條同樣獨特的線,如紫色線所示。任何關於如何實現這一目標的想法都會很棒。在帖子的底部, @ErraticAttack給出的程式碼被發佈為一個很棒的分組和繪圖模板,但由於它是一個關聯數組,因此它會說豐田是N:8+3 = 11,同樣福特是11+ 3=14寬並繪製錯誤的範圍,因為它們現在被分開了。 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :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")),
);@ErraticAttack的程式碼可以幫助我解決之前的問題。
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 = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )謝謝,非常感謝任何幫助!
自動化和腳本編寫基礎資料分析與建模數據探索和視覺化大規模客製化視窗回覆:如何在變異性圖表中新增具有共享 y 軸的動態水平線,其中分組 x 軸具有不同 N 的重複值?謝謝吉姆!
回覆:如何在變異性圖表中新增具有共享 y 軸的動態水平線,其中分組 x 軸具有不同 N 的重複值?在第 37 行,您需要變更為
fb = Report(varchart)[i][FrameBox(1)];
到
fb = Report( varchart[i] )[FrameBox( 1 )];
回覆:如何在變異性圖表中新增具有共享 y 軸的動態水平線,其中分組 x 軸具有不同 N 的重複值?嗨@jthi ,
感謝您的解決方案,有一個非常優雅的答案。正如您所提到的,它僅適用於一個框架盒,我理想情況下希望它適用於變異性圖表生成的兩個框架盒。我已經調整了你的程式碼,但我一直堅持讓水平線同時顯示。如果您能看到錯誤並知道如何解決它,那就太棒了。謝謝!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);回覆:如何在變異性圖表中新增具有共享 y 軸的動態水平線,其中分組 x 軸具有不同 N 的重複值?一個相當簡單的選擇是為您的小組創建新專欄。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
請注意,此範例只有一個框架框,因為其他 D/P 已被刪除