Scriptage de l'axe Y à l'échelle logarithmiqueBonjour,
J'ai un script pour créer plusieurs histogrammes en utilisant des données empilées. L'axe des y utilisé dans l'histogramme est la colonne de données empilées : Données, l'axe des x utilisé dans l'histogramme est les étiquettes de la colonne de données empilées : Composé chimique. Ensuite, j'utilise Page (:Sample ID) pour séparer mes graphiques en un graphique par échantillon. En fonction de l'ensemble de données pour lequel j'utilise le script, je peux avoir 2 échantillons ou 100 échantillons. Mes graphiques fonctionnent bien, cependant, j'aimerais que l'axe des y soit à l'échelle logarithmique. J'ai essayé plusieurs façons d'insérer du code pour ce faire, cependant, le maximum que j'ai pu travailler est 1 graphique en échelle logarithmique, tandis que les autres sont tous linéaires. J'ai joint le code. La partie qui fonctionne en quelque sorte est la « ScaleBox (2) ».Il modifie le premier graphique en journal, cependant, il laisse les échelles restantes linéaires. Si je change le (2) en (3) après 'ScaleBox', le deuxième graphique du groupe se transforme en journal tandis que les autres restent linéaires. Si je supprime complètement le (#) après « ScaleBox », aucun ne sera consigné. J'ai également essayé d'insérer « Left Y Log Scale (1) » dans la zone Variables, mais rien.
J'ai joint un ensemble de données à exécuter avec le script. Toute aide à ce sujet serait appréciée !
Merci,
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 : Scriptage de l'axe Y à l'échelle logarithmiqueBonjour!
J'utilise cette solution pour mes besoins graphiques à l'échelle logarithmique. Cela fonctionne très bien. Cependant, si je veux représenter graphiquement un grand nombre d'échantillons (disons > 50), cela donne une erreur (voir ci-dessous). Quelqu'un a-t-il déjà rencontré cela ? J'ai essayé d'ajouter 'wait();' avant et après et dans différents domaines, pensant que mon code avait juste besoin de plus de temps. Cela fonctionne bien pour <50 échantillons, tout ce qui précède donne l'erreur.
Profondeur excessive dans le document : 256 utilisez l'option XML_PARSE_HUGE
en accès ou évaluation de 'Xpath' , Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/
Voici mon code.
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 ) );Merci!
Lacé
Re : Scriptage de l'axe Y à l'échelle logarithmiqueMerci pour cette solution ! Je vais vérifier cela un peu plus.
Re : Scriptage de l'axe Y à l'échelle logarithmiqueJe ne savais pas que XPath pouvait être utilisé pour ça.Belle solution propre !
Re : Scriptage de l'axe Y à l'échelle logarithmiqueJ'aime utiliser XPath(). Un seul message s'applique à tous les objets trouvés. Voir les 2 dernières lignes du script ci-dessous.Il existe une section et des exemples de scripts pour Xpath() et Find() dans le chapitre 6 de la 2e édition de JSL Companion. Vous pouvez trouver un exemple simple dans l'index des scripts > Zone d'affichage > recherchez XPath.Pour en savoir plus sur la syntaxe et les fonctions XPath, cliquez sur ici
< 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 : Scriptage de l'axe Y à l'échelle logarithmiqueMalheureusement, vous devez envoyer le message du journal de l'axe Y à chaque page graphique.Ce code fonctionne mais affiche des erreurs dans le journal.J'espère que quelqu'un aura une solution plus propre pour vous.
EDIT 4-9-2018 Je parcourais id_list et non unique_values.Le code fixe est ci-dessous.
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 )}
)
);
);