¿Pueden los gráficos JMP tener este efecto?Este es el efecto HTML.
¿Puede el grafito JMP lograr este efecto?
¡Gracias!

Automatización y scriptingVentanasRe: ¿Pueden los gráficos JMP tener este efecto?
@hogi wrote:
¿Cómo accedo a este espacio de nombres?
Ambos:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
producir un nuevo espacio de nombres.
...Pregunté al soporte de JMP: TS- 00173810
desafortunadamente:
Túno puedo acceso el gráficos guion espacio de nombres externamente.
Re: ¿Pueden los gráficos JMP tener este efecto?Ay, claro... ¿Cómo se dibuja un círculo?
Re: ¿Pueden los gráficos JMP tener este efecto?El mango sí lo es, pero el círculo no. Creo que el radio del círculo perfectamente redondo en la cuadrícula no cuadrada está definido en las coordenadas del eje Y.
Re: ¿Pueden los gráficos JMP tener este efecto?Interesante. ¿Por qué el mango no está vinculado al sistema de coordenadas x/y?
Todavía funciona después de cambiar el tamaño del gráfico, pero hay un desplazamiento significativo:
Re: ¿Pueden los gráficos JMP tener este efecto?-
Re: ¿Pueden los gráficos JMP tener este efecto?Puedes usar argumentos de función en lugar de x,y
Names Default To Here( 1 );
New Window( "Example",
trapx = 20;
trapy = 50;
handx = 70;
handy = 80;
trapcolor="blue";
handcolor="blue";
Graph Box(
Frame Size( 200, 200 ),
handle( handx, handy, // any handle(s) must come before Mousetrap
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand drag ^a^ ^b^" ) );
handcolor="magenta"; )
, // the mouse-up handler
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand release ^a^ ^b^" ) );
handcolor="cyan"; )
);
Mousetrap( // should not be more than one Mousetrap, the first one captures all clicks
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap drag ^a^ ^b^" ) );
trapcolor="red"; )
, // the mouse-up handler
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap release ^a^ ^b^" ) );
trapcolor="green"; )
);
// the drawing occurs outside of the mousetrap or handle
pencolor(trapcolor);
pensize(3);
Circle( {0, 0}, Sqrt( trapx * trapx + trapy * trapy ) );
pencolor(handcolor);
pensize(3);
Circle( {0, 0}, Sqrt( handx * handx + handy * handy ) );
)
);
Si necesita uno o más controladores, deben aparecer antes de la trampa para ratones porque un clic será consumido por la trampa para ratones si ningún controlador anterior lo tomó.
Re: ¿Pueden los gráficos JMP tener este efecto?
Ok, UN espacio de nombres compartido por Framebox , separado del espacio de nombres global
- y separado del espacio de nombres de los otros FrameBoxes.
editar: vaya, interpretación bastante errónea del hallazgo.
::x= 5;
(Report( gb )<< xpath("//FrameBox")) << add graphics script(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Caption("global x is "|| Char(::X));
V Line(x+3);
)
//
);
Otro hallazgo, al final del vídeo:
Al cambiar la escala de la ventana se activa un restablecimiento del gráfico con los valores originales del espacio de nombres Aquí .
¿Cómo accedo a este espacio de nombres?
Ambos:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
producir un nuevo espacio de nombres.
Re: ¿Pueden los gráficos JMP tener este efecto?Acabo de encontrar esta información en el índice de secuencias de comandos:

Las coordenadas x e y se almacenan como variables globales para la ejecución del script.
Y cualquier variable global preexistente x & y se restaura después de ejecutar el script.
Aquí es donde la historia podría terminar.
Descomentando el
// x=y=60;
permite que el gráfico comience con una línea en x = 60. -> el script usa la variable local del espacio de nombres Here .
Lo que me sorprendió:
Cuando intento arrastrar la línea a otra ubicación, ¡funciona!
¿Por qué es esto sorprendente?
x dentro del espacio de nombres Here permanece en 60. Y el script preferirá las variables del espacio de nombres Here sobre las variables del espacio de nombres global. [Editar: para las variables globales, los valores originales deben "restaurarse" en este momento: después de ejecutar MouseTrap]. Entonces, ¿por qué funciona el script?
Parece que dentro del script hay variables locales x e y que se usan preferentemente, en lugar de las variables del espacio de nombres Here . ¿Es correcta esta interpretación?
Luego, debajo de la línea, es muy amable que JMP haga un esfuerzo adicional con las variables globales. De esta manera, incluso las funciones que se encuentran fuera del contexto del script gráfico (myfunctions:xy ) pueden acceder a las variables. 
Quizás sea interesante comprobarlo:
Scripts gráficos de un FrameBox: ¿comparten un espacio de nombres común o cada script gráfico usa el suyo propio?
Re: ¿Pueden los gráficos JMP tener este efecto?VEO
Gracias Craig!
Re: ¿Pueden los gráficos JMP tener este efecto?@hogi MouseTrap es una función extraña en JSL. Es una función que no hace nada cuando se ejecuta y no importa si se ejecuta o no o (principalmente) dónde se posiciona en el script. Cuando se produce un movimiento del mouse en el gráfico, las coordenadas se envían al script en x,y, que deben copiarse en variables globales como se muestra.
Handle y las distintas variantes de Drag tienen una posición asociada y solo se activarán si están lo suficientemente cerca. El orden sí importa un poco, porque el primero que se encuentre en el script y que esté lo suficientemente cerca (unos pocos píxeles) recibirá la actualización.
No puedo explicar completamente por qué funciona con tu cambio. X realmente no debería existir... ¡parece que se escapa de la trampa para ratones!
Reparé el script en mi primera publicación.
Re: ¿Pueden los gráficos JMP tener este efecto?Parece que se está agregando un script de ejercicio al pasar el mouse.
For(iFrame=1,iFrame<=N Items(framelist),iFrame+=1,frame=framelist[iFrame]; Eval(Eval Expr(frame<<ADDGRAPHICSSCRIPT></ADDGRAPHICSSCRIPT>
Thanks Experts!
Re: ¿Pueden los gráficos JMP tener este efecto?@Craige_Hales , ¡bien, muy suave! 
Casi demasiado suave: espero que este ejemplo no impida que los desarrolladores implementen un enfoque que no sea JSL.
Algunos argumentos a favor de un soporte nativo a través de Graph Builder:
- Hacer que el generador de gráficos nativo sea más potente
- también hacer felices a los usuarios que no utilizan JSL
- Muestra las anotaciones automáticas elegantes incluso sin clics del mouse
-> permitir a los usuarios utilizar el ratón como de costumbre para seleccionar puntos de datos
(con el enfoque "JSL" actual, se podrían agregar algunos botones de alternancia para elegir el modo correcto, como está implementado para el diagrama de Venn )
¡Me llevó un tiempo entender el mensaje de error!
Names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
// x=y=60;
fb = Report( gb )[FrameBox( 1 )];
fb << addgraphicsscript(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Mousetrap("nothing to do");
V Line(x);
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - x ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( x < xmidpoint,
Text( {x + xwidth / 100, y}, "height " || Char( Round( x ) ) || "\!nmore" )//
,
Text(
right justified,
{x - xwidth / 100, y},
"height " || Char( Round( x ) ) || "\!nmore"
)
);
)
//
);
Re: ¿Pueden los gráficos JMP tener este efecto?
Re: ¿Pueden los gráficos JMP tener este efecto?
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )//
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )
);
//
);
Editar: La línea 18 ahora dice xx en lugar de x. Debe haber quedado algo en mi espacio de nombres. Gracias @lala @hogi
Re: ¿Pueden los gráficos JMP tener este efecto?a través de Graph Builder ( sin JSL
todavía no. ¿Quizás en una versión futura?
Cada vez más programas de la competencia proporcionan este tipo de anotaciones, por lo que supongo que también se implementará en JMP.
Puedes ir a Nuevo tipo de cruz para gráficos de líneas y tipos más suaves y apoyar el deseo de @shampton82 .
Re: ¿Pueden los gráficos JMP tener este efecto?vía JSL, sí.
Re: ¿Pueden los gráficos JMP tener este efecto?Se modificó ligeramente el script para mostrar valores de peso en lugar de más:
names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
valuesMatrix = :height << Get Values; //***new*** Get column values for height
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
valuesRows = char(:weight[loc(valuesMatrix,round(xx))]); //***new*** write to char weight values for all rows of height at position round(xx)
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )////***new*** exchanged "more" with weigth and list of weight values for that location of height
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )
);
//
);
Incluso podrías agregar la clasificación de los valores en forma ascendente/descendente.
Re: ¿Pueden los gráficos JMP tener este efecto?Hmm, creo que muchas de mis conclusiones estaban equivocadas.
Otro intento:

- Tal vez el
no significa "después de ejecutar el script [arrastrar]" sino "con el mouseUp".
- Y muy importante: si no es necesario actualizar un Caja de marco , no se actualiza.
Entonces,
- Cuando se mueve el mouse, las nuevas coordenadas se guardan en x e y
(
¿No, en el espacio de nombres Aquí porque usamos Nombres predeterminados AQUÍ (1) )
- ... y los valores se pueden usar dentro del espacio de nombres Here, incluso fuera de Ratonera() . Esto desconcertó a @Craige_Hales , y caí de nuevo en esta trampa: Creando un script de arrastrar y soltar.
- Después de la actualización de las variables, JMP obtiene un disparador para volver a dibujar LA Caja de marco con el script de gráficos y los valores x e y actuales .
- Otros Frameboxes no se actualizan:
Si movemos el ratón en el cuadro del lado izquierdo, el del centro no se actualiza (y viceversa).
Esto crea la ilusión de dos espacios de nombres separados. Por lo tanto, no es de extrañar que los usuarios no puedan acceder al espacio de nombres de un framebox, ya que no existe. Solo existe el espacio de nombres compartido " Aquí" en combinación con las actualizaciones locales del framebox.
- Después de soltar el botón del ratón, x e y
.
Sin embargo, no se activa ninguna actualización de los cuadros de marco. Por lo tanto, el usuario no detecta este restablecimiento de las variables en el espacio de nombres " Aquí ".
- Justo cuando el gráfico se actualiza la próxima vez (por ejemplo, se redimensiona o se seleccionan algunos puntos de datos), el script de gráficos se ejecuta nuevamente y revela que los valores se restablecieron (hace algún tiempo).
Re: ¿Pueden los gráficos de JMP tener este efecto?gpt-5.6-luna.
recuérdame esta publicación

¡nada mal!
Re: ¿Pueden los gráficos de JMP tener este efecto?Esto es realmente genial, @Craige_Hales , @martindemel y @hogi .
Es una función muy útil, y apoyo totalmente que se incluya de forma nativa en el creador de gráficos. Me gusta cómo resalta los puntos de datos cercanos al lugar donde se hizo clic en el gráfico.
¿Existe alguna forma de desactivarlo? Una vez que se hace clic en el gráfico, la línea vertical permanece visible. Sería útil poder reiniciar el gráfico al finalizar. Esta funcionalidad podría implementarse más fácilmente de forma nativa en la plataforma que mediante JSL.
¡Gracias!,
DS
Re: ¿Pueden los gráficos de JMP tener este efecto?@SDF1 ¡Gracias! Puedes usar un segundo argumento de script para mousetrap para detectar la liberación del botón y eliminar el script gráfico. El primer script se ejecuta al presionar el botón del ratón y con cada movimiento posterior. Si se proporciona el segundo script, se ejecuta con los mismos parámetros para indicar que se suelta el botón.
Re: ¿Pueden los gráficos de JMP tener este efecto?Nunca esperé que Gemini 3.1 Pro pudiera completar esta obra maestra. 
Re: ¿Pueden los gráficos de JMP tener este efecto?Claude Fábula 5 