gráficos interactivos¿Alguien tiene alguna idea sobre cómo crear informes interactivos?
En el informe, quiero incluir gráficos con varias líneas en cada gráfico. En el lado izquierdo de la ventana, me gustaría tener una lista de las líneas. Cuando hago clic en una línea de la lista, quiero que la línea seleccionada en el gráfico se destaque más, mientras que las líneas restantes se difuminan.
Exploración y visualización de datosRe: gráficos interactivosTener la leyenda en el lado izquierdo puede ser un poco complicado, pero si el lado derecho está bien, el generador de gráficos básico debería ser suficiente.

https://www.jmp.com/support/help/en/18.0/#page/jmp/graph-builder.shtml#
Re: gráficos interactivos¡Hola! He utilizado un bucle for para crear varios gráficos con el generador de gráficos. Ahora, me gustaría agrupar todos estos gráficos en una sola hoja y crear una interfaz interactiva para que los usuarios interactúen con todos los gráficos juntos. ¿Hay alguna manera de lograrlo? ¡Gracias!
Re: gráficos interactivosEs una buena idea usar solo el generador de gráficos básico, solo quiero ponerlos todos juntos uno debajo del otro después de crearlos todos.
Re: gráficos interactivosSe necesita un poco más de información. Por ejemplo, podría recopilarlos en un cuadro de lista V y luego mostrarlos en una ventana nueva.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
Si utiliza un bucle For, supongo que está creando secuencias de comandos. ¿Ha leído la Guía de creación de secuencias de comandos (por ejemplo, https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# )?
Re: gráficos interactivosMe gustaría combinar el método del cuadro de página de pestaña con el bucle for, pero no funciona.
Aquí está mi parte del guión:
Nueva ventana ("Mi panel de control",
Caja divisora H (
Tamaño(1000, 1000),
// Bucle para cada parámetro
Para (i = 1, i <= N elementos (numPar), i++,
// Cuadros de columnas para gráficos de todos los lotes, datos reales y diferencias
col1 = Col Cuadro(""),
col2 = Cuadro de columnas(""),
col3 = Cuadro de columnas(""),
// Cuadro de página de pestaña para cada parámetro
Cuadro de página de pestaña(
Título(numPar[i] || " vs. Punto de tiempo"),
// Crear gráfico de todos los lotes
gb = Constructor de gráficos(
Tamaño(500, 500),
Variables(X(:Punto de tiempo Meses), Y(:Resultado), Superposición(:Lote)),
Elementos(Puntos(X, Y))
),
// Filtro local: establece el lote solo en los lotes que están en ciclo con una referencia, no en todos los demás lotes
gb << Filtro de datos locales(
invisible,
Agregar filtro(columnas(:Componente, :Lote, :Tabla de origen),
Donde(:Componente == numPar[i]),
Donde (:Lote == {cyc, bat}),
Donde(:Tabla de origen == dt_name)
)
),
dt << Borrar Seleccionar(),
// Eliminar la visualización del filtro del gráfico
gb << Mostrar Panel de Control(0),
// Informe de cambio de trama
gbb = Informe(gb)[GraphBuilderBox(1)],
//Añadir regresión lineal
gbb << Agregar elemento(1, 1, {Tipo("Línea de ajuste"), X, Y, Confianza de ajuste(0), Ecuación(0)}),
// Establecer el eje Y
minval = min(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 0.95,
maxval = max(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05,
maxvalts = max(:Punto de tiempo Meses[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05,
gbb[AxisBox(1)] << mín(-0,1),
gbb[AxisBox(1)] << máx(valoresmáximos),
gbb[AxisBox(2)] << min(valor mínimo),
gbb[AxisBox(2)] << máx(valormáximo),
gbb[AxisBox(2)] << inc((valormáximo - valormínimo) / 10),
// Establecer la etiqueta del eje Y
unitList = Matriz asociativa(:Unidad de resultado[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) << Eliminar("") << Obtener claves,
Si (N elementos (listaUnidad) == 1,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i])
),
// Establecer el título del gráfico
gbb[Cuadro de edición de texto(1)] << Establecer texto(numPar[i] || " vs. Punto de tiempo"),
// Añadir
gbba = Informe(gb),
col1 << Anexar(gbba),
< )
)
),
< );
Re: gráficos interactivosNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);Re: gráficos interactivos¿Qué versión de JMP tienes? ¿Funciona en tu JMP? Porque no tengo el resultado esperado con el script anterior
Re: gráficos interactivosNo sé cuál es el resultado esperado y no tengo sus datos. El script usa Tab Box para recopilar resultados del bucle for

Re: gráficos interactivosTengo este resultado cuando ejecuto el script anterior. No es lo mismo que tú.
Re: gráficos interactivosParece que lo cambiaron en JMP18. En JMP17.2 esto parecía funcionar.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);Re: gráficos interactivosOtro problema que me gustaría abordar es que cuando tengo una gran cantidad de pestañas (por ejemplo, 20) con títulos extensos, los gráficos se vuelven desproporcionadamente grandes, lo que dificulta observarlos con claridad. Me gustaría cambiar el tamaño de los gráficos a una escala más pequeña, pero manteniendo los títulos y las pestañas grandes. ¿Es posible colocar el gráfico a la izquierda con un espacio vacío a la derecha?
Re: gráficos interactivosNo estoy seguro de lo que quieres decir con "gráfico a la izquierda con espacio vacío a la derecha". Crea el gráfico manualmente, cambia un poco su tamaño, copia el script y te dirá cómo puedes agregarle tamaño al gráfico. El cuadro de pestañas también tiene opciones de desbordamiento y otras que puedes encontrar en el índice de scripts.

Re: gráficos interactivosEstoy tratando de averiguar si hay alguna manera de colocar los gráficos como en esta captura de pantalla. Por ejemplo, primero el primer gráfico y luego los otros dos juntos.
Re: gráficos interactivosPuede combinar, por ejemplo, V List Box, H List Box, Tab Box y Tab Page Box de muchas formas diferentes para obtener el diseño que desea.
Puede encontrar mucha información en la Guía de scripts https://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtml
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);Re: gráficos interactivosLos nombres predeterminados están aquí (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb_collector = Tab Box( "Panel de control" );
Para (i = 1, i <= 20, i++,
// Cuadro de columna para el gráfico de todos los lotes
col1 = Col Box( "Todos los lotes" || Char( i ) );
// Crea el primer gráfico del generador de gráficos
es = Expr(
dt << Constructor de gráficos(
invisible,
Variables( X( :peso ), Y( :altura ), Superposición( :sexo ) ),
Elementos(Puntos(X, Y, Leyenda(9)), Línea de ajuste(X, Y, Leyenda(11)))
)
);
col1 << Anexar( gb );
// Cree un cuadro de columna para los dos gráficos del generador de gráficos
col2 = Col Box( "Datos reales " || Char( i ) );
// Crea y añade dos gráficos del generador de gráficos a col2
Para (j = 1, j <= 2, j++,
gbb = Expr(
dt << Constructor de gráficos(
invisible,
Variables( X( :peso ), Y( :altura ), Superposición( :sexo ) ),
Elementos(Puntos(X, Y, Leyenda(9)), Línea de ajuste(X, Y, Leyenda(11)))
)
);
col2 << Anexar( gbb );
);
// Crea una pestaña para col1 y col2 y añádela a gb_collector
pestaña = Pestaña Página Cuadro( " Algo Algo ",
V Cuadro de lista(
columna1,
H List Box( col2 ) // Colocar los dos gráficos uno al lado del otro
)
);
gb_collector << Anexar( pestaña );
// Establecer título para gb
es << título("dxfkgbdlk,xfhglihxfd" );
);
gb_collector << Acoplable( 1 );
gb_collector << Establecer desbordamiento habilitado (1);
nw = Nueva ventana( "Panel de control",
coleccionista de gb
);
Estoy intentando usar el ejemplo anterior en mi script, pero no obtengo ningún resultado. Este es mi script:
Tabla de datos actual(dt);
dt << Nueva columna("Meses del punto de tiempo", Fórmula(Round(:Días del punto de tiempo/30.438), 2));
gb_collector = Cuadro de pestaña();
Para (i = 1, i <= N elementos (numPar), i++,
// Cuadro de columna para el gráfico de todos los lotes
col1 = Col Caja( "" );
// Cuadro de columna para el gráfico de datos reales
col2 = Col Caja( "" );
// Cuadro de columna para el gráfico de diferencias
col3 = Col Caja( "" );
//tab = Cuadro de página de pestaña("",
gb = dt << Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables(X(:Punto de tiempo Meses), Y(:Resultado), Superposición(:Lote)),
Elementos(Puntos(X, Y))
);
// Filtro local: establece el lote solo en los lotes que están en ciclo con una referencia, no en todos los demás lotes
gb << Filtro de datos locales(
invisible,
Agregar filtro(columnas(:Componente, :Lote, :Tabla de origen),
Donde(:Componente == numPar[i]),
Donde (:Lote == {cyc, bat}),
Donde(:Tabla de origen == dt_name)
)
);
dt << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
es << Mostrar Panel de Control(0);
// Informe de cambio de trama
gbb = Informe(gb)[GraphBuilderBox(1)];
//Añadir regresión lineal
gbb << Agregar elemento(1, 1, {Tipo("Línea de ajuste"), X, Y, Confianza de ajuste(0), Ecuación(0)});
// Establecer el eje Y
minval = min(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 0.95;
maxval = max(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05;
maxvalts = max(:Punto de tiempo Meses[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05;
gbb[AxisBox(1)] << mín(-0.1);
gbb[AxisBox(1)] << máx.(valoresmáx.);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << máx(valormáximo);
gbb[AxisBox(2)] << inc((valormáximo - valormín) / 10);
// Establecer la etiqueta del eje Y
unitList = Matriz asociativa(:Unidad de resultado[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) << Eliminar("") << Obtener claves;
Si (N elementos (listaUnidad) == 1,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i])
);
// Establecer el título del gráfico
gbb[Cuadro de edición de texto(1)] << Establecer texto(numPar[i] || " vs. Punto de tiempo");
// Añadir
//gbba = Informe(gb),
col1 << Anexar(gb);
//filtrar << cerrar;
gb << cerrar ventana;
// Dentro del bucle a través de parámetros ahora también estamos recorriendo lotes
Para (k = 1, k <= N elementos (ciclo), k++,
comprobar = dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name);
if(N items(check) > 0, // Crea una verificación para ver si existe un parámetro para el lote actual
// Crear gráfico base
gb = Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables( X( : Punto de tiempo Meses ), Y( : Resultado ), Superposición( : Lote ) ),
Elementos(Puntos(X, Y), )
);
gb << Filtro de datos locales (invisible, Agregar filtro (columnas (:Componente, :Lote, :Tabla de origen), Donde (:Componente == numPar[i]), Donde (:Lote == {cyc[k], bat[k]}), Donde (:Tabla de origen == dt_name) ));
dt << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
gb << Mostrar Panel de Control( 0 );
// Informe de cambio de trama
gbb = Informe( gb )[GraphBuilderBox( 1 )];
//Añadir regresión lineal
gbb << Agregar elemento( 1, 1, {Tipo( "Línea de ajuste"), X, Y, Confianza de ajuste( 0 ), Ecuación( 0 )} );
// Establecer el eje Y
minval = min(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*0.95;
maxval = max(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name| :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*1.05;
maxvalts = max(:Punto de tiempo Meses[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name| :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*1.05;
gbb[AxisBox(1)] << mín(-0.1);
gbb[AxisBox(1)] << máx.(valoresmáx.);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << máx(valormáximo);
gbb[AxisBox(2)] << inc((valormáximo-valormín)/10);
// Establecer la etiqueta del eje Y
unitList = Matriz asociativa( :Unidad de resultado[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)] ) << Eliminar( "" ) << Obtener claves;
Si (N elementos (listaUnidad) == 1,
gbb[Cuadro de edición de texto( 4 )] << Establecer texto( numPar[i] || " [" || unitList[1] || "]" )
);
Si (N elementos (listaUnidad) != 1,
gbb[Cuadro de edición de texto( 4 )] << Establecer texto( numPar[i] )
);
// Establecer título del gráfico
gbb[Cuadro de edición de texto( 1 )] << Establecer texto( numPar[i] || " vs. Punto de tiempo ");
// Añadir
//gbba = Informe( gbb );
col2 << Anexar( gbb );
//filtrar << cerrar;
gb << cerrar ventana;
// Iniciar segunda trama
gb2 = Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables( X( Punto de tiempo Meses ), Y( : Diferencia ), Color( : Lote ) ),
Elementos(Puntos(X, Y))
);
gb2 << Filtro de datos locales (invisible, Agregar filtro (columnas (:Componente, :Lote, :Tabla de origen), Donde (:Componente == numPar[i]), Donde (:Lote == cyc[k]), Donde (:Tabla de origen == dt5_name)));
dt4 << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
gb2 << Mostrar Panel de Control( 0 );
// Informe de cambio de trama
gbb2 = Informe( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Agregar elemento( 1, 1, {Tipo( "Línea" ), X, Y} );
// Obtener el valor de HC
l_idx = dt4 << Obtener filas donde (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
si(Falta(ul),
si (min(:Diferencia[dt << obtener filas donde (:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)]) == 0,
valor mínimo = -5;
valormáximo = 5,
minval = min(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)])*0.95;
maxval = max(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)])*1.05;
),
minval = min(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << obtener filas donde(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //si no hay valor HC no crear línea límite
gbb2[AxisBox(2)] << Agregar línea de referencia (ul,"sólido", negro, char(redondo(ul,2)));
gbb2[AxisBox(2)] << Agregar línea de referencia (-ul,"sólido", negro, char(redondo(-ul,2)));
);
gbb2[AxisBox(2)] << Agregar línea de referencia (0,"Discontinua");
gbb2[AxisBox(2)] << min(valor mínimo);
gbb2[AxisBox(2)] << máx(valormáximo);
gbb2[AxisBox(2)] << inc((valormáximo-valormín)/10);
//Añadir
//gbba2 = Informe( gbb2 );
col3 << Anexar( gbba2 );
//filtrar << cerrar;
gb2 << cerrar ventana;
);
);
//);
pestaña = Cuadro de página de pestaña(numPar[i],
V Cuadro de lista(
col1
H List Box( col2, col3 ) // Colocar los dos gráficos uno al lado del otro
)
);
pestaña << Título(numPar[i]);
//gb << título(Char(1));
gb_collector << Anexar(pestaña);
);
gb_collector << Acoplable( 1 );
gb_collector << Establecer desbordamiento habilitado (1);
nw = Nueva ventana("Mi panel de control",
coleccionista de gb
);
¿Podrías ayudarme a saber cómo hacerlo?
Re: gráficos interactivosDebes dar un paso atrás y explicar lo que quieres: en el mejor de los casos, proporciona datos de ejemplo o utiliza uno de los conjuntos de datos de muestra de JMP para explicar lo que deseas tener en el ejemplo más pequeño posible.
Re: gráficos interactivosNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.Re: gráficos interactivosTabla de datos actual(dt);
dt << Nueva columna("Meses del punto de tiempo", Fórmula(Round(:Días del punto de tiempo/30.438), 2));
gb_collector = Cuadro de pestaña();
Para (i = 1, i <= N elementos (numPar), i++,
// Cuadro de columna para el gráfico de todos los lotes
col1 = Col Caja( "" );
// Cuadro de columna para el gráfico de datos reales
col2 = Col Caja( "" );
// Cuadro de columna para el gráfico de diferencias
col3 = Col Caja( "" );
//tab = Cuadro de página de pestaña("",
gb = dt << Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables(X(:Punto de tiempo Meses), Y(:Resultado), Superposición(:Lote)),
Elementos(Puntos(X, Y))
);
// Filtro local: establece el lote solo en los lotes que están en ciclo con una referencia, no en todos los demás lotes
gb << Filtro de datos locales(
invisible,
Agregar filtro(columnas(:Componente, :Lote, :Tabla de origen),
Donde(:Componente == numPar[i]),
Donde (:Lote == {cyc, bat}),
Donde(:Tabla de origen == dt_name)
)
);
dt << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
es << Mostrar Panel de Control(0);
// Informe de cambio de trama
gbb = Informe(gb)[GraphBuilderBox(1)];
//Añadir regresión lineal
gbb << Agregar elemento(1, 1, {Tipo("Línea de ajuste"), X, Y, Confianza de ajuste(0), Ecuación(0)});
// Establecer el eje Y
minval = min(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 0.95;
maxval = max(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05;
maxvalts = max(:Punto de tiempo Meses[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) * 1.05;
gbb[AxisBox(1)] << mín(-0.1);
gbb[AxisBox(1)] << máx.(valoresmáx.);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << máx(valormáximo);
gbb[AxisBox(2)] << inc((valormáximo - valormín) / 10);
// Establecer la etiqueta del eje Y
unitList = Matriz asociativa(:Unidad de resultado[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc & :Tabla de origen == dt_name | :Lote == bat & :Componente == numPar[i] & :Tabla de origen == dt_name)]) << Eliminar("") << Obtener claves;
Si (N elementos (listaUnidad) == 1,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Cuadro de edición de texto(4)] << Establecer texto(numPar[i])
);
// Establecer el título del gráfico
gbb[Cuadro de edición de texto(1)] << Establecer texto(numPar[i] || " vs. Punto de tiempo");
// Añadir
//gbba = Informe(gb),
col1 << Anexar(gb);
//filtrar << cerrar;
gb << cerrar ventana;
// Dentro del bucle a través de parámetros ahora también estamos recorriendo lotes
Para (k = 1, k <= N elementos (ciclo), k++,
comprobar = dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name);
if(N items(check) > 0, // Crea una verificación para ver si existe un parámetro para el lote actual
// Crear gráfico base
gb = Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables( X( : Punto de tiempo Meses ), Y( : Resultado ), Superposición( : Lote ) ),
Elementos(Puntos(X, Y), )
);
gb << Filtro de datos locales (invisible, Agregar filtro (columnas (:Componente, :Lote, :Tabla de origen), Donde (:Componente == numPar[i]), Donde (:Lote == {cyc[k], bat[k]}), Donde (:Tabla de origen == dt_name) ));
dt << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
gb << Mostrar Panel de Control( 0 );
// Informe de cambio de trama
gbb = Informe( gb )[GraphBuilderBox( 1 )];
//Añadir regresión lineal
gbb << Agregar elemento( 1, 1, {Tipo( "Línea de ajuste"), X, Y, Confianza de ajuste( 0 ), Ecuación( 0 )} );
// Establecer el eje Y
minval = min(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*0.95;
maxval = max(:Result[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name| :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*1.05;
maxvalts = max(:Punto de tiempo Meses[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name| :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)])*1.05;
gbb[AxisBox(1)] << mín(-0.1);
gbb[AxisBox(1)] << máx.(valoresmáx.);
gbb[AxisBox(2)] << min(minval);
gbb[AxisBox(2)] << máx(valormáximo);
gbb[AxisBox(2)] << inc((valormáximo-valormín)/10);
// Establecer la etiqueta del eje Y
unitList = Matriz asociativa( :Unidad de resultado[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt_name | :Lote == bat[k] & :Componente == numPar[i] & :Tabla de origen == dt_name)] ) << Eliminar( "" ) << Obtener claves;
Si (N elementos (listaUnidad) == 1,
gbb[Cuadro de edición de texto( 4 )] << Establecer texto( numPar[i] || " [" || unitList[1] || "]" )
);
Si (N elementos (listaUnidad) != 1,
gbb[Cuadro de edición de texto( 4 )] << Establecer texto( numPar[i] )
);
// Establecer título del gráfico
gbb[Cuadro de edición de texto( 1 )] << Establecer texto( numPar[i] || " vs. Punto de tiempo ");
// Añadir
//gbba = Informe( gbb );
col2 << Anexar( gbb );
//filtrar << cerrar;
gb << cerrar ventana;
// Iniciar segunda trama
gb2 = Constructor de gráficos(
//invisible,
Tamaño (700, 400),
Variables( X( Punto de tiempo Meses ), Y( : Diferencia ), Color( : Lote ) ),
Elementos(Puntos(X, Y))
);
gb2 << Filtro de datos locales (invisible, Agregar filtro (columnas (:Componente, :Lote, :Tabla de origen), Donde (:Componente == numPar[i]), Donde (:Lote == cyc[k]), Donde (:Tabla de origen == dt5_name)));
dt4 << Borrar Seleccionar();
// Eliminar la visualización del filtro del gráfico
gb2 << Mostrar Panel de Control( 0 );
// Informe de cambio de trama
gbb2 = Informe( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Agregar elemento( 1, 1, {Tipo( "Línea" ), X, Y} );
// Obtener el valor de HC
l_idx = dt4 << Obtener filas donde (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
si(Falta(ul),
si (min(:Diferencia[dt << obtener filas donde (:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)]) == 0,
valor mínimo = -5;
valormáximo = 5,
minval = min(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)])*0.95;
maxval = max(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)])*1.05;
),
minval = min(:Diferencia[dt << obtener filas donde(:Componente == numPar[i] & :Lote == cyc[k] & :Tabla de origen == dt5_name)],-ul)*1.05;
maxval = max(:Difference[dt << obtener filas donde(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //si no hay valor HC no crear línea límite
gbb2[AxisBox(2)] << Agregar línea de referencia (ul,"sólido", negro, char(redondo(ul,2)));
gbb2[AxisBox(2)] << Agregar línea de referencia (-ul,"sólido", negro, char(redondo(-ul,2)));
);
gbb2[AxisBox(2)] << Agregar línea de referencia (0,"Discontinua");
gbb2[AxisBox(2)] << min(valor mínimo);
gbb2[AxisBox(2)] << máx(valormáximo);
gbb2[AxisBox(2)] << inc((valormáximo-valormín)/10);
//Añadir
//gbba2 = Informe( gbb2 );
col3 << Anexar( gbba2 );
//filtrar << cerrar;
gb2 << cerrar ventana;
);
);
//);
pestaña = Cuadro de página de pestaña(numPar[i],
V Cuadro de lista(
col1
H List Box( col2, col3 ) // Colocar los dos gráficos uno al lado del otro
)
);
pestaña << Título(numPar[i]);
//gb << título(Char(1));
gb_collector << Anexar(pestaña);
);
gb_collector << Acoplable( 1 );
gb_collector << Establecer desbordamiento habilitado (1);
nw = Nueva ventana("Mi panel de control",
coleccionista de gb
);
Aquí está mi guión.
Adjunto una captura de pantalla de mi panel actual, que contiene 8 gráficos. Estos son mis requisitos específicos para organizar estos gráficos:
- Mantener el primer gráfico : Me gustaría conservar el primer gráfico tal como está.
- Eliminar el segundo gráfico : el segundo gráfico debe eliminarse del tablero.
- Emparejar los últimos seis gráficos : los últimos seis gráficos deben emparejarse de manera que cada par se muestre uno al lado del otro. En concreto, los gráficos deben organizarse de la siguiente manera:
- El tercer y cuarto gráfico deben mostrarse uno al lado del otro.
- Los gráficos quinto y sexto deben mostrarse uno al lado del otro.
- Los gráficos séptimo y octavo deben mostrarse uno al lado del otro.
En resumen, el diseño final debe tener el primer gráfico seguido de tres pares de gráficos, y cada par debe mostrarse uno al lado del otro.
Re: gráficos interactivosEsos dos scripts son totalmente diferentes (además, utilice el formato JSL para el código JSL, ya que es mucho más fácil de leer). ¿Para qué está utilizando Col Box? ¿Sobre qué está haciendo un bucle (i y j)? ¿Qué determina qué información contiene cada uno de los gráficos? ¿Deberían ser interactivos entre sí?