Hallo. Ich würde gerne wissen, ob es eine gute Möglichkeit gibt, die Anzahl der Frame-Boxen in einem Graphbuilder-Plot zu ermitteln. Ich habe einen GB-Plot, der 104 FB (8 X-Gruppen, 13 Y-Gruppen) enthält. Ich habe ein Skript geschrieben, um die Markierungsgröße für jeden FB zu ändern.
Summarize(dtstack, frame_lis = By(:Freq, :Image, :Region));
For(i=1, i<=NItems(frame_lis[1]), i++,
Try(
Report(gb) << Dispatch({}, "Graph Builder", FrameBox(i),
{Marker Size(1)}
)
)
);(Gutschrift an @MS In https://community.jmp.com/t5/Discussions/Can-t-change-all-marker-size-in-Graph-Builder-by-script/mp/3928 ). Aber in meinem Fall überschätzt die Summarize-Anweisung die Anzahl der FB, da ich mehrere Zeilen in meiner Tabelle ausgeschlossen habe, die bestimmte Werte von Region, Image oder Freq enthalten. Dieses Skript funktioniert, aber sobald der Zähler i die tatsächliche Anzahl von FB im GB-Plot überschreitet, erhalte ich Fehlermeldungen im Protokoll („FrameBox[ „Graph Builder“ ] kann bei {} nicht gefunden werden“). Die „Try“-Anweisung war ein Versuch, die Fehlermeldungen zu verhindern, hat aber nicht funktioniert. Auf jeden Fall würde ich dies lieber vermeiden, indem ich zunächst einfach die richtige Anzahl an Frame-Boxen berechne. Hat jemand irgendwelche Ideen?
Um Ihre Frage direkt zu beantworten, können Sie die mit einer XPath-Abfrage zurückgegebenen Elemente zählen.Eine bessere Lösung besteht jedoch darin, die Markierungsgrößennachricht einfach an alle mit XPath zurückgegebenen Ergebnisse zu senden, anstatt Dispatch zu verwenden.
Names Default To Here( 1 );
dt = Open( "$sample_data\Big Class.jmp" );
gb = Graph Builder(
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ), Group Y( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ) ),
);
//Count Frame boxes here
N Items( (gb << XPath( "//FrameBox" )) );
//Or just update them all
(gb << XPath( "//FrameBox" )) << Marker Size( 8 );