Script de varias columnas agrupadas en un gráfico de distribuciónEstoy tratando de crear una forma de trazar varias columnas de parámetros que se agrupan en una distribución (como se muestra en la figura). Mi problema es que el código necesita una fila separada de "Distribución continua" para cada columna de parámetro. Mis extracciones de datos tienen diferentes nombres de columna y número de columnas para trazar dependiendo de lo que esté haciendo. No puedo entender cómo tomar esa lista de nombres de columna y trazarla en un grupo como se muestra a continuación, en lugar de recorrer y crear gráficos individuales para cada parámetro.
Distribution(
Continuous Distribution( Column( :Parameter1 ) ),
Continuous Distribution( Column( :Parameter2 ) ),
Continuous Distribution( Column( :Parameter3 ) )
);

Re: Script de varias columnas agrupadas en un gráfico de distribuciónAsí es como manejaría el problema
names default to here(1);
dt=open("$SAMPLE_DATA/semiconductor capability.jmp");
colList = dt << get column names(continuous,string);
// For this illustration I want to use just the NPNn columns
for(i=nitems(colList), i>=1,i--,
If(substr(colList[i],1,3)!="NPN", remove from(colList,i,1))
);
// build the JSL string
theExpr =
"Dis = Distribution(
Continuous Distribution( Column( :" || colList[1] || " ),
Process Capability( Use Column Property Specs ) )";
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || "Continuous Distribution( Column( :" || colList[i] ||
" ), Process Capability( Use Column Property Specs ) )"
);
theExpr=theExpr||");";
// run the built JSL string
eval(parse(theexpr));
// Standardize the settings
disr = Dis << report;
disr[colList[1]]["Quantiles"]<<CLOSE all="" like="" this=""></CLOSE>Re: Script de varias columnas agrupadas en un gráfico de distribuciónAnotado, creo que mi suposición de que todo comienza con una aplicación me ha causado mucho dolor.
Una pregunta más, con suerte, si quiero establecer las propiedades de todo las distribuciones en un informe, como lo he hecho aquí con esta única variable, "T05066DD ET_DELTA Relación" ¿Hay un comando simple para hacerlo, o necesito crear un bucle for y ejecutar "sendtoreport" para cada variable en mi lista?
ET_DELTA_List = {};<BR />dist = dt << Distribution(Columns(evalList(ET_DELTA_List)));
dist << arrange in rows(5);
dist << Quantiles(0);
dist << Summary Statistics(0);
report(dist)[OutlineBox(2)] << Open all like this(1);
//show properties(dist)
dist << SendToReport(
Dispatch(
{"T05066DD ET_DELTA Ratio"},//this is one of many distributions. i would like to set the following properties to all the distributions in the report
"1",
ScaleBox,
{Min( -5 ), Max( 5 ), Inc( 5000 ), Minor Ticks( 1 ),
Add Ref Line( 2, "Solid", "Black", "", 1 ),
Add Ref Line( -2, "Solid", "Black", "", 1 )}
)
)</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-277293" slang="en-US" mode="NONE">Re: Script de varias columnas agrupadas en un gráfico de distribución</LINGO-SUB><LINGO-BODY id="lingo-body-277293" slang="en-US" mode="NONE"><P>Simplemente evitaría la sobrecarga de colocarlo en una aplicación.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-277279" slang="en-US" mode="NONE">Re: Script de varias columnas agrupadas en un gráfico de distribución</LINGO-SUB><LINGO-BODY id="lingo-body-277279" slang="en-US" mode="NONE"><P>Bueno, gracias.</P><P>¿Cuál sería tu estrategia para hacer esto? ¿Evitaría usar el generador de aplicaciones con allocate, etc., y simplemente usaría un script para posicionar todo?</P><P>gracias de nuevo</P><P>Wayne.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-277090" slang="en-US" mode="NONE">Re: Script de varias columnas agrupadas en un gráfico de distribución</LINGO-SUB><LINGO-BODY id="lingo-body-277090" slang="en-US" mode="NONE"><P>La respuesta corta es no.Como mínimo, debe crear una cadena de caracteres que incluya todo el código de la aplicación JMP.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-277077" slang="en-US" mode="NONE">Re: Script de varias columnas agrupadas en un gráfico de distribución</LINGO-SUB><LINGO-BODY id="lingo-body-277077" slang="en-US" mode="NONE"><P>Si quisiera poner eso en una aplicación, con un filtro de datos local, ¿podría poner la instrucción Allocate dentro de Eval(Parse)?</P><P>Entonces..</P><PRE><CODE class=" language-jsl">theExpr = "dis = Allocate(
Border1 = Border Box();
DataFilterContext1 = Data Filter Context Box();
List1 = H List Box();
DataFilter1 = Dt << Data Filter( Local );
Report1 = Platform(
Dt,
Distribution(
Continuous Distribution( column( column(Dt, colNames[1])))";
For( i = 2, i <= N Items( colNames ), i++,
theExpr = theExpr || ", Continuous Distribution( column( column(Dt, colNames[" || Char( i ) || "])))"
);
theExpr = theExpr || " )
);
)";
show(theexpr);
Eval( Parse( theExpr ) );
Re: Script de varias columnas agrupadas en un gráfico de distribuciónTodo lo que necesita hacer es modificar la lista de nombres de columna para cumplir con los requisitos.Hay muchas maneras de hacer esto, a continuación se muestra un ejemplo
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
// Get the all of the numeric, continuous column names
colNames = dt << get column names( string, continuous );
// Work backwards through the list of columns eliminating those that
// do not meet the pattern one is interested in
For( i = N Items( colNames ), i >= 1, i--,
If( left( colNames[i], 3 ) != "NPN" , colNames = remove( colNames, i, 1 ) );
);
// Build a character string that represents the commands that need to be run
theExpr = "dis = dt << Distribution(
Continuous Distribution( column( column(dt, colNames[1])))";
// Loop across the remaining columns in the colNames list and generate the continuous distribution
// commands
For( i = 2, i <= N Items( colNames ), i++,
theExpr = theExpr || ", Continuous Distribution( column( column(dt, colNames[" || Char( i ) || "])))"
);
// place the closing ")" to complete the command string
theExpr = theExpr || ");";
// Execute the code generated and placed into the character string variable
Eval( Parse( theExpr ) );
Re: Script de varias columnas agrupadas en un gráfico de distribución@txnelson He usado este script y funcionó. Lo que estoy tratando de hacer es automatizar mi informe, pero mi tabla de datos se compone de más de 300 columnas, la cantidad de columnas varía por semana. Tengo nombres de columnas que comienzan con ex. "Fallo1", "Fallo2",,, "Total1","Total2",,, "Rendimiento1", "Rendimiento2",,, "Pérdida1", "Pérdida2",,.¿Cómo filtrar para mostrar distribuciones continuas, por ejemplo, "Loss1", "Loss2", solo?
Re: Script de varias columnas agrupadas en un gráfico de distribución@RonSwanson ,
Jim @txnelson El script de le brinda mucho más control y una solución. Esto como una opción alternativa, ya que a menudo me han preguntado cómo escribir fácilmente un número desconocido de distribuciones.Este script también incluye comandos para "envolver" distribuciones y cómo enviar mensajes a todas las distribuciones enviando un mensaje al objeto (mensaje de análisis de capacidad) y enviando un mensaje al icono de revelación.
Names default to Here(1);
dt = Open("$Sample_Data/Semiconductor Capability.jmp");
cnames = dt << get column names("Continuous", "string");
//Here I will just use 10
cnames = cnames[1::10];
dist = dt << Distribution(Columns(evalList(cnames)));
//if you want to limit the number per row
dist << arrange in rows(3); //change 3 to 5 or whatever you want
dist << Capability Analysis(0); //turn off the distribution
report(dist)[OutlineBox(2)] << Open all like this(1); //reveal all distributions
report(dist)[OutlineBox(2)] << Close all like this(1); //do not reveal

Re: Script de varias columnas agrupadas en un gráfico de distribuciónexactamente lo que necesitaba... gracias tx!!Re: Script de varias columnas agrupadas en un gráfico de distribuciónAquí hay una forma de generar el código requerido para producir lo que desea
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
// Get the all of the numeric, continuous column names
colNames = dt << get column names( string, continuous );
// Build a character string that represents the commands that need to be run
theExpr = "dis = dt << Distribution(
Continuous Distribution( column( column(dt, colNames[1])))";
// Loop across the remaining columns in the colNames list and generate the continuous distribution
// commands
For( i = 2, i <= N Items( colNames ), i++,
theExpr = theExpr || ", Continuous Distribution( column( column(dt, colNames[" || Char( i ) || "])))"
);
// place the closing ")" to complete the command string
theExpr = theExpr || ");";
// Execute the code generated and placed into the character string variable
Eval( Parse( theExpr ) );