Referenzlinie von der Achse zu einem bestimmten WertIch versuche, ein Diagramm zu erstellen, das den vorhergesagten Wert auf der Y-Achse anhand eines bestimmten Werts auf der X-Achse auf einer weichen Kurve anzeigt. Es ist mir gelungen, die Vorhersageformel herauszuziehen und die relevanten Werte zu erhalten, um Referenzlinien zu definieren. Um dies jedoch effektiv zu kommunizieren, möchte ich, dass die Referenzlinien an der Kurve enden und vorzugsweise gestrichelt sind. Das obige Bild ist so weit, wie ich es mit JSL-Scripting geschafft habe. Unten möchte ich landen.
Danke!


Betreff: Referenzlinie von der Achse zu einem bestimmten WertDas sieht wirklich cool aus, liegt aber wahrscheinlich auch etwas über meinem derzeitigen Verständnisniveau. Ich werde versuchen, mich anhand Ihres Beispiels durchzuarbeiten und dabei hoffentlich einiges zu lernen!
Betreff: Referenzlinie von der Achse zu einem bestimmten WertVielen Dank, das war genau das, was ich gesucht habe!
Betreff: Referenzlinie von der Achse zu einem bestimmten WertMit dem folgenden Code sollten Sie ein dynamisches Profil für jede gespeicherte Formelspalte erstellen können, die nur eine Eingabe umfasst. Im Fall der „Big Class“ und eines Quartic-Modells ergibt sich:

Es ist mehr oder weniger ungetestet.
NamesDefaultToHere(1);
// Function to find leaves in formula that are columns in the table
// See: https://community.jmp.com/blogs/Uncharted/2015/04/03/head-arg-recurse-formula"
// Thanks to Craige Hales
findColumns =
Function( {frm, cols},
{h = Head( frm ), n = N Arg( frm ), i, result = {}}, // local variables
If( n == 0, // head node has no children, it is a leaf
If( Contains( cols, Name Expr( h ) ), // is the leaf in the list of columns?
Insert Into( result, Name Expr( h ) ); // yes -> add to result
)
,
For( i = 1, i <= n, i++, // not a leaf, get children's results
Insert Into( result, Recurse( Arg( frm, i ), cols ) )
)
);
result; // return the result
);
// Open a table to play with, and add a formula column to it
dt = Open("$SAMPLE_DATA/Big Class.jmp");
fCol = dt << New Column( "Predicted weight",
Formula(-127 + 4 * :height),
Set Property("Predicting", {:weight, Creator( "Bivariate" ), Model Name( "Polynomial Fit Degree=3" )})
);
// Recover the required information
f = fCol << getFormula;
xColList = findColumns(NameExpr(f), dt << getColumnNames);
yCol = fCol << getProperty("Predicting");
yCol = yCol[1];
// Subsequent code will only work with one x Column
xCol = Expr(xColList[1]);
for(c=1, c<=NItems(xColList), c++, Print(c); if(xColList[c] != xCol, Print("Only one x Column allowed."); Beep(); Throw()));
// Reparameterise the formula for later use in the 'GraphBox()'
SubstituteInto(f, xCol, Expr(x));
// Set the initial 'VLine()' value to the mean of the x values
xVals = xCol << getValues;
x = Mean(xVals);
// Get 'reasonable' ranges for the axes
xMin = Min(xVals);
xMax = Max(xVals);
yMin = Min(yCol << getValues);
yMax = Max(yCol << getValues);
// Get the names of the columns involved
xColName = xCol << getName;
yColName = yCol << getName;
// Plot the graph
NewWindow("Function Profile",
gb = GraphBox("Simple Profiler", XScale(xMin, xMax), YScale(yMin, yMax), XName(xColName), yName(yColName),
// Plot the function
PenColor("Red"); YFunction(f, x);
// Handle to drag the 'VLine()' and update display
Handle(x, yMin + (yMax-yMin)/10, gb << reShow, Empty());
// Get the function value for the current x value
yy = Eval(Substitute(NameExpr(f), Expr(x), x));
// Plot the lines at the new places
PenColor("Blue"); LineStyle("Dotted");
VLine(x, yMin, yy);
HLine(xMin, x, yy);
);
);Betreff: Referenzlinie von der Achse zu einem bestimmten WertHinzufügen zu @MikeD_Anderson Die meiner Meinung nach einfachste Methode zum Entwickeln des Codes zum Hinzufügen von Grafiken zu einem Diagramm auf einer Plattform besteht darin, mit der rechten Maustaste auf das betreffende Diagramm zu klicken und „Benutzerdefiniert“ auszuwählen.Dies ermöglicht es, das Diagramm in Echtzeit zu ändern und zu ergänzen.Ich klicke dann einfach auf das „+“ und füge ein neues Segment hinzu

Verwenden der Vorlagen oder Beispiele oder Verwenden der „Grafikkategorie“ des Skripteditors

Man kann mit dem Display spielen, bis man hat, was man will.

Sie können zum roten Dreieck gehen und das Skript speichern

Dadurch erhalten Sie ein Beispielskript, das Sie dann ändern können, um das Skript generisch zu machen
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
Bivariate(
Y( :height ),
X( :age ),
Fit Polynomial( 2, {Line Color( {213, 72, 87} )} ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "Script" ),
Line Style( dashed );
Line( [0, 13.35, 13.35], [62, 62, 50] );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);
Betreff: Referenzlinie von der Achse zu einem bestimmten WertAnstatt zwei Referenzlinien von den Achsen zu verwenden, zeichnen Sie mithilfe eines Grafikskripts ein Rechteck im Diagrammfeld:
Names Default To Here( 1 );
New Window( "Example",
Graph Box(
// line color
Pen Color( "Green" );
// line width
Pen Size( 2 );
// line style (dashed)
Line Style (2);
Fill Color( "Red" );
// filled rectangle
Rect( 15, 75, 65, 55, 1 );
// unfilled rectangle (reference lines)
Rect( -1, 80, 70, -1 );
)
);
M