Linea di riferimento dall'asse al valore specificoSto cercando di creare uno script di un grafico che mostri il valore previsto sull'asse y da un valore specificato sull'asse x su una curva morbida. Sono riuscito a estrarre la formula di previsione e ottenere i valori rilevanti per definire le linee di riferimento. Tuttavia per comunicarlo in modo efficace vorrei che le linee di riferimento si fermassero alla curva e fosse preferibile che fossero tratteggiate. L'immagine sopra rappresenta il massimo che sono riuscito a ottenere con lo scripting jsl. Di seguito è dove vorrei finire.
Grazie!


Ri: Linea di riferimento dall'asse al valore specificoSembra davvero interessante ma probabilmente è anche un po' al di sopra del mio attuale livello di comprensione. Cercherò di seguire il tuo esempio a modo mio e spero di imparare parecchio nel processo!
Ri: Linea di riferimento dall'asse al valore specificoGrazie mille, era proprio quello che cercavo!
Ri: Linea di riferimento dall'asse al valore specificoIl codice seguente dovrebbe consentire di profilare dinamicamente qualsiasi colonna formula salvata che coinvolge un solo input. Nel caso di "Big Class" e di un modello quartico, fornisce:

È più o meno non testato.
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);
);
);Ri: Linea di riferimento dall'asse al valore specificoAggiunta a @MikeD_Anderson , il metodo che ho trovato più semplice per sviluppare il codice per aggiungere grafica a un grafico in una piattaforma, è fare clic con il pulsante destro del mouse sul grafico in questione e selezionare "Personalizzato".Ciò consente di modificare e aggiungere al grafico in tempo reale.Quindi faccio semplicemente clic su "+" e aggiungo un nuovo segmento

Utilizzando i modelli o gli esempi oppure utilizzando la "Categoria grafica" dell'editor di scripting

si può giocare con il display finché non si ottiene ciò che si desidera.

Puoi andare al triangolo rosso e salvare lo script

Che ti fornirà uno script di esempio che potrai quindi modificare per rendere lo script generico
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 )}
)
)
);
Ri: Linea di riferimento dall'asse al valore specificoInvece di utilizzare due linee di riferimento dagli assi, prova a disegnare un rettangolo nel riquadro del grafico utilizzando uno script grafico:
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