Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Hola a todos,
He alcanzado las limitaciones de mis (bastante limitadas) habilidades de secuencias de comandos y estoy buscando ayuda.
Lo que estoy tratando de hacer actualmente es crear una leyenda basada en "Color por columna" o leyenda de fila, que no se adjunta a un gráfico determinado pero que podría colocarse en un Cuadro de esquema separado o similar.
La razón por la que estoy tratando de hacer esto es que estoy trabajando en un script JSL que al final recuperará una gran cantidad de datos de una base de datos y brindará una multitud de visualizaciones para diferentes pasos del proceso con leyendas en su mayoría diferentes. Además, quiero distribuirlo como un archivo html interactivo. Como habrá muchos gráficos y, por lo tanto, mucho desplazamiento, me encantaría generar una alineación de cuadro de contorno/cuadro de desplazamiento, donde la leyenda y tal vez alguna información escrita deberían permanecer visibles (en una parte separada de la ventana) al desplazarse. a través de los gráficos.
Lo que logré hacer hasta ahora es copiar el Cuadro de borde de una leyenda generada en el portapapeles a través de (Uno se refiere a un gráfico unidireccional genérico con una "leyenda de fila" instalada)
rOne = One << report;
Link = rone[Owner Box(1)] << parent;
show (Link);
Link << copy picture
que copia la leyenda Cuadro de borde en el portapapeles. Puedo pegarlo en Word, por ejemplo, y obtener exactamente lo que estaba buscando. Desafortunadamente, no puedo encontrar un comando JSL para pegar gráficos del portapapeles en una visualización. Lo probé a través de "Obtener portapapeles" en un entorno de cuadro de imagen, pero parece que este comando solo funciona para Texto.
¿Alguien sabe si es posible pegar gráficos desde el portapapeles?
Alternativamente, ¿alguien tiene un fragmento de código que permita crear una leyenda independiente (traté de convertirla de los estados de fila pero no llegué muy lejos con eso)?
Cualquier ayuda es muy apreciada.
Saludos
Malta
GráficosRe: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Hola, Juan,
Lo haré, pero solo después de intentar asegurarme de que realmente hay un tema sobre el cuadro de desplazamiento dentro del entorno html interactivo y no dentro de mi código (este fue mi primer intento de usar cuadros de desplazamiento, podría haber algo de espacio para mejora
)
Saludos
MaltaRe: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Malta,
Envíe más detalles sobre los problemas de HTML interactivo.
Si no se siente cómodo compartiendo con la comunidad, envíeme un mensaje privado o informe los problemas al soporte técnico.
Gracias,
~Juan
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Gracias por tu contribución @EM .
Me gusta mucho la idea de crear la leyenda directamente desde la tabla de datos. Eso podría ser muy útil, aunque al final del guión, habrá un montón de ventanas de leyenda flotando...Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Muchas gracias por esa rápida y fácil solución. @Melanie_J_Drake , aunque me decidí por la solución más ambiciosa de danschikore
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Muchas gracias, @danschikore . Tu solución es genial. Tuve que torcer un poco tu código para que encajara en mi esquema de visualización, pero funciona muy bien.
Todavía tengo algunos problemas con las pantallas del cuadro de desplazamiento, pero parecen ser algunos errores dentro de la visualización html interactiva (datos que desaparecen, por ejemplo; en un caso particular interesante, los gráficos no aparecieron en el entorno JMP, pero sí aparecen (aunque algo distorsionados) cuando se guardan como un html interactivo).
Su trabajo es muy apreciado
Saludos
Malta
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?¡Todas estas respuestas son geniales!
Solo quería agregar a la sugerencia de gzmorgan0 sobre muchos archivos HTML interactivos. Una forma de crear una interfaz de usuario HTML para hacer referencia a varios archivos HTML interactivos es usar Archivo > Publicar en el menú principal de JMP. Creará una interfaz de usuario HTML con miniaturas para sus informes HTML interactivos. Se puede automatizar en JSL usando New Web Report. Aquí hay un extracto del índice de secuencias de comandos:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp", Invisible );
webreport =
New Web Report(
Add Report(
Distribution(
Continuous Distribution(
Column( :weight )
),
Nominal Distribution( Column( :age ) )
),
Title( "Distribution Web Report" ),
Description(
"This report was created with the sample found in the Scripting Index"
)
)
);
file = webreport << Save( "$TEMP" );
If( !Is Empty( file ),
Web( file )
);
El ejemplo agrega solo un informe, pero puede agregar tantos como desee. También se guarda en una ubicación temporal, pero puede establecer esto en una unidad de red compartida y luego enviar la ubicación a sus colegas.
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?@danschikore , eso fue realmente genial.
Esta es otra opción, para usar un cuadro de contexto de filtro de datos. Creo que es un poco más fácil de escribir y permite múltiples filtros para el HTML interactivo. No tiene la leyenda JMP, pero el filtro de datos es poderoso.A continuación se proporciona un ejemplo.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
nw = New Window( "Shared Local Filter",
Data Filter Context Box(
H List Box(
Current Data Table() << Data Filter( Local, Add Filter( columns( :sex ) ) ),
ScrollBox(
Platform(
Current Data Table(),
biv = Bivariate(
X( :height ),
Y( :weight ),
By( :age ),
)
)
)
)
)
);
_xxx = biv<< Xpath("//FrameBox");
_xxx << {MarkerSize(6)};
_xxx << RowLegend("sex", color(1), Marker(1)); //this will just be a reminder
nw << Save Interactive HTML("C:/temp/SharedLocalFilter.html");
@MJE si realmente tiene una gran cantidad de informes, en lugar de un desplazamiento, es posible que desee considerar la posibilidad de crear su propia interfaz HTML para páginas/archivos HTML interactivos creados por JMP.Hay muchos ejemplos de IU de búsqueda html en Internet.
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Hay algunos lugares donde JMP usa contenido del portapapeles, generalmente junto con una forma de copiar al portapapeles como axis< y axis< .
Para su caso de uso, recomendaría copiar o mover los cuadros en lugar de crear una imagen.Para copiar desde una Leyenda de fila, puede hacer algo como esto:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "age", color( 1 ), Marker( 1 ) );
subset = dt<<GET rows="" where=""> 58 & :weight < 95);
w = New Window("Custom Report",
H List Box(
Graph Box(FrameSize(300,300),MarkerSeg(:weight[subset], :height[subset],Row States(dt, subset))),
(biv<<REPORT></REPORT></GET>
La leyenda aún se convertirá en una imagen cuando se exporte a HTML, pero esto mantiene todo como cuadros de visualización JMP dentro de JMP.Sin embargo, notará que no se puede hacer clic en la leyenda clonada como en la leyenda original.Usando Eliminar de() y Insertar en() , puede reorganizar las cajas sin tener que clonarlas.Esto crea un informe desplazable similar al que sugieres:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ), by( :age ) );
rbiv = biv[1] << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "sex", color( 1 ), Marker( 1 ) );<BR />
// extract legend and report
legend = rbiv[OwnerBox(1)];
legendparent = legend<<PARENT></PARENT>// rearrange into a scrolled layout
toprpt << Append(hlist = HListBox(scrollbox=VScrollBox(800)));
InsertInto(scrollbox, fullrpt, 1);
InsertInto(hlist, legendbox, 2);
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Es posible pegar desde el portapapeles usando el menú principal ("Pegar") pero no es muy útil (difícil de controlar el tiempo y el objetivo con jsl).
No estoy seguro de lo que quieres, pero estoy seguro de que hay mejores alternativas que usar el portapapeles aquí.
Aquí hay un ejemplo que puede ser útil:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/big class.jmp");
ow = Report(dt << Oneway(Y(:Height), X(:Age)));
rl = dt << Color By Column(:Age, Make Window With Legend);
nw = New Window("row legend",
H List Box(Scroll Box(Size(400, 600), V List Box(ow, ow, ow, ow)), rl)
);
// nw << Save Interactive HTML("path/example.html");
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?No estoy seguro de lo que está tratando de hacer exactamente, pero Obtener imagen podría ser lo que necesita. Le da un objeto de imagen que luego puede colocar en un árbol de visualización JMP. Aquí hay un ejemplo del índice de secuencias de comandos:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
New Window( "Example", rbiv << Get Picture );
¿Es eso lo que estás buscando? Esta será solo una imagen estática, no interactiva.
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Quiero agregar un segundo modo al complementohttps://marketplace.jmp.com/appdetails/Image+to+Tablepor@Jed_Campbell .
El complemento carga la imagen desde el disco duro. En algunos casos, puede ser útil pegar la imagen desde el portapapeles.
¿Existe un comando JSL para pegar gráficos desde el portapapeles?
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?
¿Existe un comando JSL para pegar gráficos desde el portapapeles?
No creo que exista actualmente una forma de hacer esto con JSL. ¿Quizás sea una buena opción para la lista de deseos de JMP ?
Re: Cómo pegar gráficos desde el portapapeles a través de JSL; alternativamente: ¿cómo crear una leyenda independiente?Vale, aquí está: pegar gráficos desde el portapapeles