Scripting Y Axis para ser escala logarítmicaHola,
Tengo un script para hacer múltiples histogramas usando datos apilados. El eje y utilizado en el histograma es la columna de datos apilados: Datos, el eje x utilizado en el histograma son las etiquetas de la columna de datos apilados: Compuesto químico. Luego uso Page (:Sample ID) para separar mis gráficos en un gráfico por muestra. Dependiendo de mi conjunto de datos para el que estoy usando el script, puedo tener 2 muestras o 100 muestras. Mis gráficos funcionan bien, sin embargo, me gustaría que el eje y esté en escala logarítmica. He intentado varias formas de insertar código para hacer esto, sin embargo, lo máximo que he trabajado es 1 gráfico en escala logarítmica, mientras que los demás son todos lineales. He adjuntado el código. La parte que funciona es el 'ScaleBox (2)'.Cambia el primer gráfico a registro, sin embargo, deja las escalas restantes como lineales. Si cambio el (2) a un (3) después de 'ScaleBox', entonces el segundo gráfico en el grupo cambia a registro mientras que los demás permanecen lineales. Si elimino el (#) después de 'ScaleBox' por completo, entonces ninguno irá al registro. También intenté insertar 'Left Y Log Scale (1)' en el área de Variables, pero nada.
He adjuntado un conjunto de datos para ejecutar con el script. ¡Cualquier ayuda con esto sería apreciada!
Gracias,
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
Dispatch(
{},
"Data",
ScaleBox (2),
{Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
Minor Ticks( 1 )}
),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);Re: Scripting Y Axis to be Log scale¡Hola!
He estado usando esta solución para mis necesidades de gráficos de escala logarítmica. Funciona muy bien. Sin embargo, si quiero graficar una gran cantidad de muestras (digamos> 50), da un error (ver más abajo). ¿Alguien se ha encontrado con esto antes? Intenté agregar 'esperar();' antes y después y en diferentes áreas pensando que mi código solo necesitaba más tiempo. Funciona bien para <50 muestras, todo lo anterior da el error.
Profundidad excesiva en el documento: 256 use la opción XML_PARSE_HUGE
en acceso o evaluación de 'Xpath', Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/
Aquí está mi código.
dtstacked3:Parameter3 << set property( "Row Order Levels", 1 );
dtstacked3:Sample ID << set property ("Row Order Levels",1);
gb3 = dtstacked3 << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Parameter3 ), Y( :Rel TEQ ), Page( :Sample ID ), Color( :Rel TEQ 2 ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 6, Properties( 0, {gradient(
{Color Theme(
{"Paired Copy 2 2502", 8193, {{254, 207, 132}, {254, 207,
132}, {254, 207, 132}, {254, 207, 132}, {254, 207, 132},
{254, 207, 132}, {114, 171, 187}, {114, 171, 187}, {114,
171, 187}, {114, 171, 187}, {114, 171, 187}}}
), Scale Values( [0 1] ), Width( 12 ), Discrete Colors( 1 )}
)}) )} ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} )
)
);
xx3 = gb3 << Xpath("//ScaleBox[@charID='Rel TEQ']");
xx3 << {Scale("Log"), Format("Best", 10), Min(0.1), Max(80), Inc(1), Minor Ticks(1)};
gb3 << on close( Close( dtstacked3, nosave ) );¡Gracias!
encaje
Re: Scripting Y Axis to be Log scale¡Gracias por esta solución! Comprobaré esto un poco más.
Re: Scripting Y Axis to be Log scaleNo me di cuenta de que xpath podría usarse para esto.Buena solución limpia!
Re: Scripting Y Axis to be Log scaleMe gusta usar XPath(). Un solo mensaje se aplica a todos los objetos encontrados. Vea las últimas 2 líneas del script a continuación.Hay una sección y scripts de muestra para Xpath() y Find() en el Capítulo 6 de la 2.ª edición de JSL Companion. Puede encontrar un ejemplo simple en el Índice de secuencias de comandos > Cuadro de visualización > buscar xpath.Para obtener más información sobre la sintaxis y las funciones de XPath, haga clic en aquí
< https://www.tutorialspoint.com/xpath/xpath_quick_guide.htm >
gb = Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
// Dispatch(
// {},
// "Data",
// ScaleBox (2),
// {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
// Minor Ticks( 1 )}
// ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);
xx =gb << Xpath( "//ScaleBox[@charID='Data']");
xx << {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ), Minor Ticks(1) };
Re: Scripting Y Axis to be Log scaleDesafortunadamente, debe enviar el mensaje del eje logarítmico Y a cada página del gráfico.Este código funciona pero muestra errores en el registro.Espero que alguien tenga una solución más limpia para ti.
EDIT 4-9-2018 Estaba recorriendo id_list y no unique_values.El código fijo está debajo.
Get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
dt = data table("Test Data");
id_list = column(dt, "Sample ID") << get values;
unique_values = get_unique_values(id_list);
gb = dt << Graph Builder(
Size( 530, 1460 ),
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :Sample ID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
);
for (i = 1, i <= nitems(unique_values), i++,
gb << SendToReport(
Dispatch( {}, "Data", ScaleBox( i + 1 ),
{Scale( "Log" ), Format( "Best", 10 )}
)
);
);