Ligne de référence de l'axe à une valeur spécifiqueJ'essaie de créer un script qui montre la valeur prédite sur l'axe des y à partir d'une valeur spécifiée sur l'axe des x sur une courbe douce. J'ai réussi à extraire la formule de prédiction et à obtenir les valeurs pertinentes pour définir les lignes de référence. Cependant, pour communiquer cela efficacement, j'aimerais que les lignes de référence s'arrêtent à la courbe et soient de préférence en pointillés. L'image ci-dessus est aussi loin que j'ai pu aller avec les scripts jsl. Ci-dessous, c'est là que j'aimerais en arriver.
Merci!


Re : Ligne de référence de l'axe à une valeur spécifiqueCela a l'air vraiment cool mais est probablement aussi un peu au-dessus de mon niveau de compréhension actuel. Je vais essayer de m'inspirer de votre exemple et j'espère que j'apprendrai pas mal de choses au cours du processus !
Re : Ligne de référence de l'axe à une valeur spécifiqueMerci beaucoup, c'était exactement ce que je cherchais !
Re : Ligne de référence de l'axe à une valeur spécifiqueLe code ci-dessous devrait vous permettre de profiler dynamiquement toute colonne de formule enregistrée qui implique une seule entrée. Dans le cas de 'Big Class' et d'un modèle quartique, cela donne :

C'est plus ou moins non testé.
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);
);
);Re : Ligne de référence de l'axe à une valeur spécifiqueAjout à @MikeD_Anderson , la méthode que j'ai trouvée la plus simple pour développer le code permettant d'ajouter des graphiques à un graphique dans une plateforme, consiste à faire un clic droit sur le graphique en question et à sélectionner "Personnalisé".Cela permet de modifier et d'ajouter au graphique en temps réel.Je clique ensuite simplement sur le "+" et j'ajoute un nouveau segment

Utilisation des modèles ou des exemples, ou de la « catégorie Graphiques » de l'éditeur de script

on peut jouer avec l'affichage jusqu'à ce que l'on ait ce qu'on veut.

Vous pouvez aller dans le triangle rouge et enregistrer le script

Ce qui vous donnera un exemple de script que vous pourrez ensuite modifier pour rendre le script générique
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 )}
)
)
);
Re : Ligne de référence de l'axe à une valeur spécifiqueAu lieu d'utiliser deux lignes de référence à partir des axes, essayez de dessiner un rectangle dans la zone graphique à l'aide d'un script graphique :
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