Skripting für die Y-Achse als logarithmische SkalaHallo,
Ich habe ein Skript zum Erstellen mehrerer Histogramme mithilfe gestapelter Daten. Die im Histogramm verwendete Y-Achse ist die gestapelte Datenspalte :Data, die im Histogramm verwendete X-Achse sind die gestapelten Datenspaltenbezeichnungen :Chemical Compound. Dann verwende ich Page (:Sample ID), um meine Diagramme in ein Diagramm pro Probe aufzuteilen. Abhängig von meinem Datensatz, für den ich das Skript verwende, kann es sein, dass ich über 2 oder 100 Proben verfüge. Meine Grafiken funktionieren einwandfrei, ich möchte jedoch, dass die Y-Achse im logarithmischen Maßstab vorliegt. Ich habe mehrere Möglichkeiten zum Einfügen von Code ausprobiert, um dies zu erreichen. Das Beste, was mir gelungen ist, ist ein Diagramm im logarithmischen Maßstab, während die anderen alle linear sind. Ich habe den Code angehängt. Der Teil, der irgendwie funktioniert, ist die „ScaleBox (2)“.Das erste Diagramm wird in „Logarithm“ geändert, die restlichen Skalen bleiben jedoch linear. Wenn ich nach „ScaleBox“ (2) in (3) ändere, ändert sich der zweite Graph in der Gruppe in „Log“, während die anderen linear bleiben. Wenn ich das (#) nach „ScaleBox“ ganz entferne, wird nichts im Protokoll angezeigt. Ich habe auch versucht, „Left Y Log Scale (1)“ in den Variablenbereich einzufügen, aber nichts.
Ich habe einen Datensatz zur Ausführung mit dem Skript angehängt. Jede Hilfe dabei wäre dankbar!
Danke schön,
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( "" )} ),
)
);Betreff: Y-Achse als Log-Skalierung skriptenHallo!
Ich habe diese Lösung für meine grafischen Anforderungen im Logarithmus-Maßstab verwendet. Es funktioniert großartig. Wenn ich jedoch eine große Anzahl von Stichproben (z. B. > 50) grafisch darstellen möchte, wird ein Fehler angezeigt (siehe unten). Ist das schon mal jemandem passiert? Ich habe versucht, „wait();“ hinzuzufügen. Vorher und nachher und in verschiedenen Bereichen dachte ich, mein Code brauche einfach mehr Zeit. Es funktioniert gut für < 50 Proben, alles darüber gibt den Fehler aus.
Übermäßige Tiefe im Dokument: 256 Verwenden Sie die Option XML_PARSE_HUGE
beim Zugriff oder bei der Auswertung von 'Xpath' , Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/
Hier ist mein 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 ) );Danke!
Lacey
Betreff: Y-Achse als Log-Skalierung skriptenVielen Dank für diese Lösung! Ich werde das noch einmal überprüfen.
Betreff: Y-Achse als Log-Skalierung skriptenIch wusste nicht, dass XPath dafür verwendet werden kann.Schöne saubere Lösung!
Betreff: Y-Achse als Log-Skalierung skriptenIch verwende gerne XPath(). Für alle gefundenen Objekte gilt eine einzige Meldung. Sehen Sie sich die letzten beiden Zeilen des Skripts unten an.Es gibt einen Abschnitt und Beispielskripte für Xpath() und Find() in Kapitel 6 der 2. Ausgabe von JSL Companion. Ein einfaches Beispiel finden Sie im Skriptindex > Anzeigefeld > Suche nach xpath.Um mehr über XPath-Syntax und -Funktionen zu erfahren, klicken Sie auf Hier
< 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) };
Betreff: Y-Achse als Log-Skalierung skriptenLeider müssen Sie die Protokoll-Y-Achsen-Nachricht an jede Diagrammseite senden.Dieser Code funktioniert, zeigt aber Fehler im Protokoll an.Ich hoffe, jemand hat eine sauberere Lösung für Sie.
BEARBEITEN 09.04.2018 Ich habe id_list und nicht unique_values durchlaufen.Der feste Code ist unten.
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 )}
)
);
);