Ich habe eine Frage zum Hinzufügen von Referenzlinien zu mehreren Y in der Streudiagrammmatrix.
Es gelingt mir, Referenzzeilenwerte zu erhalten.
aber ich weiß nicht, wie ich hinzufügen soll.
Ich möchte wissen, ob zu jedem „Y“ eine ScaleBox hinzugefügt wird.
Beispielsweise,
//sel_colnames = {"SPK_VOS_TrimCode_Dec", "SPK_RCV_VOS_TrimCode_Dec", "SPK_RCV_VOS_Post_0p5W"};
Obergrenze = {10, 1, 15, 0,75};
untere_grenze = {-10, 0,5, -15, -0,75};
Ich möchte der folgenden Tabelle eine Obergrenze und eine Untergrenze hinzufügen.
Außerdem möchte ich die Skalen der Y-Achse für jedes „Y“ anpassen.

//JSL für mehrere „Y“s – bitte geben Sie mir einen Rat dazu.
Names Default To Here(1);
dt adress = pick file({"All Files|*"});
dt = Open(
dt adress,
columns(
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 1 ) ),
Strip Quotes( 0 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 47 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
//Delete unnecessary columns
dt=Current Data Table ();
dt << Delete Columns( :"Column 2"n, :"Column 3"n, :"Column 4"n, :"Column 5"n);
dt << delete row( 6 );
// Split dt -> dt(value of test item) & dt_item(upper&lower limit of test item)
dt << select rows({1,2,3,4,5}) ;
dt_item = subset( dt );
dt << delete rows( {2,3,4,5} );
// Replace column names with Test Name (*dt)
For( c = 1, c < N Col( dt ), c ++,
Column( dt, c ) << Set Name( Column( dt, c )[1] );
);
// Replace column names with Test Name (*dt_item)
For( c = 1, c < N Col( dt_item ), c ++,
Column( dt_item, c ) << Set Name( Column( dt_item, c )[1] );
);
dt << delete rows( {1} );
dt_item << delete rows( {1} );
//Change Data Type to Numeric&Continuous (*dt)
colList = dt << get column names(charater);
For(i=1,i<=n items(colList), i++,
column(dt, colList[i]) << Data Type( Numeric ) << Set Modeling Type( Continuous );
);
//Change Data Type to Numeric&Continuous (*dt_item)
colList = dt_item << get column names(charater);
For(i=1,i<=n items(colList), i++,
column(dt_item, colList[i]) << Data Type( Numeric ) << Set Modeling Type( Continuous );
);
///Data processing done.
//Select Test Item for Scatterplot Matrix
colDlg = Column Dialog(
Title( "Test Item Selct" ),
ycol = Col List( "Test Item", Min Col( 1 ), Max Col(15) ), //
);
//Read Test Item's Test Number, Upper & Lower Limit
n = N Items( colDlg["ycol"] );
dt_item << Select Columns( colDlg["ycol"]);
sel_colnames = dt_item << Get Selected Columns(string);
show(sel_colnames);
//Read Test Item's Test Number, Upper & Lower Limit
rowNum = 1;
col = Column( dt_item(), colDlg["ycol"]);
test_no = col[ rowNum ];
//Read UL
rowNum = 3;
upper_limit = col[ rowNum ];
//Read LL
rowNum = 2;
lower_limit = col[ rowNum ];
//Read Test Item's Test Number, Upper & Lower Limit
test_no = {};
upper_limit = {};
lower_limit = {};
for(cnt=1, cnt <= n, cnt++,
col = Column( dt_item(), sel_colnames[cnt]);
show (col);
rowNum = 1;
test_no[cnt] = col[ rowNum ];
//Read UL
rowNum = 3;
upper_limit[cnt] = col[ rowNum ];
//Read LL
rowNum = 2;
lower_limit[cnt] = col[ rowNum ];
);
show(test_no); show(upper_limit); show(lower_limit);
//Scatterplot Matrix
stm = dt << Scatterplot Matrix(Y(colDlg["ycol"]), X( :Test Name),
Fit Line( 0 ),
SendToReport(
Dispatch(
{},
"1100",
),
Dispatch( {}, "Test Name", TextEditBox, {Set Text( "Site #" )}),
Dispatch( {}, "Scatterplot Matrix Plot", FrameBox, {Frame Size( 500, 200 )} ),
)
);
//Close Data Tables without the report.
stm << Journal;
close(dt,"nosave");
close(dt_item,"nosave");
Zumindest müssen Sie abs auf abs[x] setzen, da Sie derzeit alle Grenzen für alle Achsenboxen festlegen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
lsls = {55, 80};
usls = {70, 160};
spm = dt << Scatterplot Matrix(
Y(Eval(cols)),
X(:age),
Fit Line(0)
);
abs = Report(spm) << XPath("//AxisBox");
Remove From(abs, N Items(abs)); // Drop x-axis
For (x=1, x <= N Items(abs), x++,
Eval(EvalExpr(
abs[x] << Add Ref Line(Expr(lsls[x]), "Dashed", blue, Expr(Char(lsls[x])), 1);
abs[x] << Add Ref Line(Expr(usls[x]), "Dashed", blue, Expr(Char(usls[x])), 1);
))
);
Danke für Ihre Antwort.
Das Beispiel funktioniert nicht in meiner JMP-Version 15.
Wie kann ich die „For Each“-Syntax ersetzen?
Tut mir leid. Ich weiß nicht, wie „For Each“ funktioniert.
-------------------------
Ich habe einfach die For Each-Syntax durch die For-Syntax ersetzt.
Funktioniert fast, aber jedes „Y“ hat die gleiche Referenzzeile. (*limit[1]-Wert..)
Wie kann ich es reparieren?
Für jeden -> Für
abs = Report(stm) << XPath("//AxisBox"); //Display Option.
Remove From(abs, N Items(abs)); // Drop x-axis
//Show (N Items(abs));
For (x=1, x <= N Items(abs), x++ ,
Eval(EvalExpr(
abs << Add Ref Line(Expr(lower_limit[x]), "Dashed", blue, "LSL", 1);
abs << Add Ref Line(Expr(upper_limit[x]), "Dashed", blue, "USL", 1);
))
);*Ergebnis

Danke
Hier ist ein vereinfachtes Beispiel
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cols = {"height", "weight"};
lsls = {55, 80};
usls = {70, 160};
spm = dt << Scatterplot Matrix(
Y(Eval(cols)),
X(:age),
Fit Line(0)
);
abs = Report(spm) << XPath("//AxisBox");
Remove From(abs, N Items(abs)); // Drop x-axis
For Each({ab, idx}, abs,
Eval(EvalExpr(
ab << Add Ref Line(Expr(lsls[idx]), "Dashed", blue, "LSL", 1);
ab << Add Ref Line(Expr(usls[idx]), "Dashed", blue, "USL", 1);
))
);
Die Verwendung von Associative Arrays zum Speichern von Grenzwerten könnte den Code etwas übersichtlicher machen