Línea de referencia desde el eje hasta el valor específicoEstoy intentando crear un gráfico que muestre el valor previsto en el eje y a partir de algún valor específico en el eje x en una curva suave. He logrado sacar la fórmula de predicción y obtener los valores relevantes para definir líneas de referencia. Sin embargo, para comunicar esto de manera efectiva, me gustaría que las líneas de referencia se detuvieran en la curva y, preferiblemente, fueran discontinuas. La imagen de arriba es lo más lejos que he podido llegar con las secuencias de comandos jsl. A continuación es donde me gustaría terminar.
¡Gracias!


Re: Línea de referencia del eje al valor específicoEsto se ve realmente genial, pero probablemente también esté un poco por encima de mi nivel actual de comprensión. ¡Intentaré seguir tu ejemplo y espero aprender bastante en el proceso!
Re: Línea de referencia del eje al valor específico¡Muchas gracias, esto era justo lo que estaba buscando!
Re: Línea de referencia del eje al valor específicoEl siguiente código debería permitirle perfilar dinámicamente cualquier columna de fórmula guardada que involucre solo una entrada. En el caso de 'Big Class' y un modelo cuártico, se obtiene:

Está más o menos probado.
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: Línea de referencia del eje al valor específicoAñadiendo a @MikeD_Anderson , el método que me ha parecido más fácil para desarrollar el código para agregar gráficos a un gráfico en una plataforma, es hacer clic derecho en el gráfico en cuestión y seleccionar "Personalizado".Esto permite modificar y agregar al gráfico en tiempo real.Luego simplemente hago clic en el "+" y agrego un nuevo segmento.

Usar las plantillas o muestras, o usar la "Categoría de gráficos" del Editor de secuencias de comandos

uno puede jugar con la pantalla hasta que tenga lo que quiere.

Puedes ir al triángulo rojo y guardar el script.

Lo que le dará un script de muestra que luego podrá modificar para que el script sea genérico.
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: Línea de referencia del eje al valor específicoEn lugar de utilizar dos líneas de referencia de los ejes, intente dibujar un rectángulo en el cuadro del gráfico utilizando un script de gráficos:
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 );
)
);
METRO