Scripting dell'asse Y come scala logaritmicaCiao,
Ho uno script per creare più istogrammi utilizzando dati in pila. L'asse y utilizzato nell'istogramma è la colonna di dati in pila: Dati, l'asse x utilizzato nell'istogramma è la colonna di dati in pila etichette: Composto chimico. Quindi utilizzo Page (:Sample ID) per separare i miei grafici in un grafico per campione. A seconda del set di dati per cui sto utilizzando lo script, potrei avere 2 campioni o 100 campioni. I miei grafici funzionano bene, tuttavia, vorrei che l'asse y fosse in scala logaritmica. Ho provato diversi modi per inserire il codice per farlo, tuttavia, il massimo che ho avuto modo di lavorare è 1 grafico in scala logaritmica, mentre gli altri sono tutti lineari. Ho allegato il codice. La parte che in qualche modo funziona è "ScaleBox (2)".Modifica il primo grafico in logaritmico, tuttavia lascia le scale rimanenti come lineari. Se cambio il (2) in un (3) dopo 'ScaleBox', il secondo grafico nel gruppo cambia in log mentre gli altri rimangono lineari. Se rimuovo del tutto il (#) dopo 'ScaleBox', allora nessuno va al log. Ho anche provato a inserire "Left Y Log Scale (1)" nell'area Variabili ma niente.
Ho allegato un set di dati da eseguire con lo script. Qualsiasi aiuto con questo sarebbe apprezzato!
Grazie,
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( "" )} ),
)
);Ri: Scripting dell'asse Y come scala logaritmicaCiao!
Ho utilizzato questa soluzione per le mie esigenze di grafica su scala logaritmica. Funziona benissimo. Tuttavia, se voglio rappresentare graficamente un gran numero di campioni (diciamo> 50) dà un errore (vedi sotto). È già successo a qualcuno? Ho provato ad aggiungere 'wait();' prima e dopo e in diverse aree pensando che il mio codice avesse solo bisogno di più tempo. Funziona bene per <50 campioni, qualsiasi cosa sopra dà l'errore.
Eccessiva profondità nel documento: 256 usa l'opzione XML_PARSE_HUGE
in accesso o valutazione di 'Xpath' , Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*####*/
Ecco il mio codice.
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 ) );Grazie!
Lacey
Ri: Scripting dell'asse Y come scala logaritmicaGrazie per questa soluzione! Verificherò ancora un po 'questo.
Ri: Scripting dell'asse Y come scala logaritmicaNon mi ero reso conto che xpath potesse essere usato per questo.Bella soluzione pulita!
Ri: Scripting dell'asse Y come scala logaritmicaMi piace usare XPath(). Un unico messaggio si applica a tutti gli oggetti trovati. Vedi le ultime 2 righe dello script qui sotto.C'è una sezione e script di esempio per Xpath() e Find() nel capitolo 6 della seconda edizione di JSL Companion. È possibile trovare un semplice esempio in Scripting Index > Display Box > search for xpath.Per ulteriori informazioni sulla sintassi e le funzioni di XPath, fare clic su Qui
< 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) };
Ri: Scripting dell'asse Y come scala logaritmicaSfortunatamente devi inviare il messaggio dell'asse Y del log a ciascuna pagina del grafico.Questo codice funziona ma mostra errori nel registro.Spero che qualcuno abbia una soluzione più pulita per te.
EDIT 4-9-2018 Stavo eseguendo il looping su id_list e non su unique_values.Il codice fisso è sotto.
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 )}
)
);
);