Cómo establecer niveles globalmente en un gráfico<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo algunos scripts que uso y que fueron creados a partir de gráficos. A menudo, estos gráficos tienen datos que JMP separa en niveles, aunque para mis propósitos son efectivamente los mismos. Por ejemplo, el siguiente código es para un gráfico de tasas de exclusión medias entre sitios.
Cuadro (
X ( : Código IDENTIFICACIÓN ) ,
Y ( Significar ( : Tasa de exclusión )) ,
Agregar barras de error a la media ( Nombre ( "Intervalo de confianza (agrupado)" )( 0,95 )) ,
Eje superpuesto << {{ Formato ( "Dic fijo" , 12 , 3 ) , mín. ( 0.935 ) , máx. ( 0.9975 ) ,
Cª ( 0.005 ) , Garrapatas menores ( 1 )}} ,
Eje de pila superpuesto << {{ Formato ( "Dic fijo" , 12 , 0 ) , mín. ( - 1.5 ) , máx. ( 8.5 ) , Cª ( 1 ) ,
Garrapatas menores ( 1 )}} ,
Nivel [ 1 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 2 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 3 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 4 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 5 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 6 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Nivel [ 7 ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
Y [ 1 ] << Gráfico de puntos ( 1 ) ,
Enviar a informe (
Despacho ({} , "102" , Caja de escala , { Formato ( "Por ciento" , 6 , 0 ) , Mostrar cuadrícula principal ( 1 )}) ,
Despacho ({} , "" , Caja de ejes ( 2 ) , { Agregar etiqueta de eje ( "Media (tasa de exclusión)" )}) ,
Despacho ({} , "Media (tasa de exclusión)" , Cuadro de edición de texto , { Establecer tamaño de fuente ( 20 )}) ,
Despacho (
{} ,
"Gráfico gráfico" ,
Cuadro de marco ,
{ Tamaño del marco ( 704 , 536 ) , Tamaño del marcador ( 6 )}
)
)
)
Cuando se creó el script para el informe anterior, había siete sitios, pero ahora hay diez, por lo que los últimos tres gráficos utilizan la configuración predeterminada. ¿Hay alguna manera de establecer estos niveles globalmente en lugar de individualmente para momentos como este cuando la cantidad de niveles ha cambiado?
Re: Cómo establecer niveles globalmente en un gráficoAhora estoy en otro ciclo de informes y encontré este hilo del año pasado. Lo intenté pmroz La sugerencia de ayer y funcionó muy bien hasta que dejó de hacerlo. La primera vez que utilicé la técnica presentada por pmroz funcionó perfectamente. Para cada nivel del conjunto de datos, se aplicó el color y el tipo de marcador correctos a cada punto del gráfico. Cuando intenté utilizar la técnica en otro script de tabla de datos, no funcionó; el script se ejecutó sin que se generara ningún error, pero se usaron los colores y marcadores predeterminados para JMP en lugar de lo que definí en el script. Curiosamente, ahora el primer script que modifiqué también usa los valores predeterminados de JMP en lugar de lo que definí en el script.
Aquí está el código:
Names Default To Here(1);
Delete Symbols();
dt = Current Data Table();
UniqueValueList = Function({inList},
{Default Local},
tmp = [=> 0];
Insert Into(tmp, inList);
tmp << Get Keys;
);
identCodes = :IDENT Code << Get Values;
uniqueCodes = UniqueValueList(identCodes);
nCrossings = NItems(uniqueCodes);
dt << Chart(
X(:IDENT Code),
Y(Mean(:Read Rate)),
Add Error Bars to Mean(Name("Confidence Interval (pooled)")(0.95)),
Overlay Axis << {{Format("Fixed Dec", 12, 2), Min(0.77), Max(1.05), Inc(0.02),
Minor Ticks(1)}},
Overlay Stack Axis << {{Min(-10)}},
For(i = 1, i <= nCrossings, i++,
Level[i] << {Colors(-4221340), Markers(29)}
),
Y[1] << Point Chart(1),
SendToReport(
Dispatch(
{},
"102",
ScaleBox,
{Format("Percent", 6, 0), Minor Ticks(1), Show Major Grid(1),
Show Minor Grid(0)}
),
Dispatch({}, "", AxisBox(2), {Add Axis Label("Mean(Read Rate)")}),
Dispatch({}, "Mean(Read Rate)", TextEditBox, {Set Font Size(20)}),
Dispatch(
{},
"Chart Graph",
FrameBox,
{Frame Size(1056, 464), Marker Size(6)}
)
)
)Según lo que pude ver en el depurador JSL, nCruces se está configurando correctamente, pero parece que se ignora el bucle For en la declaración del gráfico. Desafortunadamente, recorrer el código no ayuda, ya que Chart es una declaración única, por lo que el depurador no recorre su código.
¿Qué estoy haciendo mal?
Re: Cómo establecer niveles globalmente en un gráficoEsto parece que puede ser lo que estoy buscando. Me preguntaba si podía poner un bucle For dentro del código del gráfico, pero no sabía que podía crear funciones definidas por el usuario en JSL o que lo habría necesitado en este caso. Probaré tu solución.
Re: Cómo establecer niveles globalmente en un gráficoPuede poner un bucle directamente en el código del gráfico.
dt = Nueva mesa ( "Ejemplo" , Agregar filas ( 8 ) ,
Nueva columna ( "Código IDENTIFICACIÓN" , Personaje , "Nominal" ,
Establecer valores ( { "AUTOMÓVIL CLUB BRITÁNICO" , "AUTOMÓVIL CLUB BRITÁNICO" , "AUTOMÓVIL CLUB BRITÁNICO" , "CAMA Y DESAYUNO" , "CAMA Y DESAYUNO" , "CC" , "CC" , "CC" } ) ) ,
Nueva columna ( "Tasa de exclusión" , Numérico , "Continuo" , Formato ( "Mejor" , 12 ) ,
Establecer valores ( [ 0,05 , 0,07 , 0,08 , 0,5 , 0,6 , 0,4 , 0.3 , 0,2 ] ) )
) ;
códigos_identificación = dt : Código IDENTIFICACIÓN << obtener valores ;
códigos_únicos = get_unique_values ( códigos_identificación ) ;
ncódigos = nitems ( códigos_únicos ) ;
dt << Cuadro (
X ( : Código IDENTIFICACIÓN ) ,
Y ( Significar ( : Tasa de exclusión )) ,
Agregar barras de error a la media ( Nombre ( "Intervalo de confianza (agrupado)" )( 0,95 )) ,
Eje superpuesto << {{ Formato ( "Dic fijo" , 12 , 3 ) , mín. ( 0.935 ) , máx. ( 0.9975 ) ,
Cª ( 0.005 ) , Garrapatas menores ( 1 )}} ,
Eje de pila superpuesto << {{ Formato ( "Dic fijo" , 12 , 0 ) , mín. ( - 1.5 ) , máx. ( 8.5 ) , Cª ( 1 ) ,
Garrapatas menores ( 1 )}} ,
// Asigna a cada nivel el mismo color y marcador
para ( i = 1 , i <= ncódigos , i ++,
nivel [ i ] << { Colores ( - 4221340 ) , Marcadores ( 29 )} ,
) ,
Y [ 1 ] << Gráfico de puntos ( 1 ) ,
Enviar a informe (
Despacho ({} , "102" , Caja de escala , { Formato ( "Por ciento" , 6 , 0 ) , Mostrar cuadrícula principal ( 1 )}) ,
Despacho ({} , "" , Caja de ejes ( 2 ) , { Agregar etiqueta de eje ( "Media (tasa de exclusión)" )}) ,
Despacho ({} , "Media (tasa de exclusión)" , Cuadro de edición de texto , { Establecer tamaño de fuente ( 20 )}) ,
Despacho (
{} ,
"Gráfico gráfico" ,
Cuadro de marco ,
{ Tamaño del marco ( 704 , 536 ) , Tamaño del marcador ( 6 )}
)
)
)
Aquí está el código para la función get_unique_values:
Obtener_valores_unique = Función ( { en lista } ,
{ Local predeterminado } ,
tmp = [ => 0 ] ;
Insertar en ( tmp , en lista ) ;
tmp << obtener llaves ;
) ;
Re: Cómo establecer niveles globalmente en un gráficoGracias, pero eso no es lo que quiero decir con globalmente. No estoy interesado en bloquear a JMP para que cree todos los gráficos de la misma manera. Tengo secuencias de comandos para conjuntos de datos específicos en un proyecto en curso donde la cantidad de niveles puede cambiar de un período de informe a otro. La forma en que JMP genera el script, las configuraciones para los niveles son explícitas, por lo que quiero saber si hay una manera de establecer niveles globalmente. dentro de un gráfico . Tengo un script similar para un conjunto de datos con 46 niveles y el script generó 46 líneas de parámetros de nivel a pesar de que cada nivel tiene exactamente la misma configuración.
Parece que JMP supone que los niveles siempre son explícitos y que el usuario siempre quiere que se representen de forma diferente en el gráfico. Hay casos en los que eso es cierto, pero lo que se consideran niveles en este gráfico son las categorías en el eje x.
Re: Cómo establecer niveles globalmente en un gráficoPuede configurar los valores predeterminados en las Preferencias:
Archivo==>Preferencias==>Gráficos
El marcador predeterminado y el conjunto de colores se pueden especificar allí

Si Esto no hace lo que desea, entonces su secuencia de comandos podría modificarse fácilmente para probar la cantidad de niveles encontrados y generar el código según sea necesario.