Fortschrittsanzeige des JMP-Skripts<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Mit etwas Recherche in diesem Forum und dem Stöbern im JMP-Skriptbuch habe ich es größtenteils geschafft, mein Fortschrittsskript zum Laufen zu bringen.Das Einzige, was mir nicht gefällt, ist, dass auf der vertikalen Achse (y) Zahlen stehen. Kann ich diese ausschalten? Ich konnte keinen Weg finden, dies zu tun.Ich bin mir nicht sicher, ob ich etwas anderes als eine Diagrammbox () verwenden sollte, aber mein Wissen darüber ist ziemlich begrenzt.
dlgStatus = neues Fenster("Konvertierungsfortschritt",
dlg_gb = Diagrammbox(
Titel („Konvertierungsfortschritt“),
Rahmengröße (200, 30),
xscale(0,100),
yscale(0, 1), // <---- wie schalte ich es aus, damit ich die Y-Achsenwerte nicht sehe?
Y-Achse (große Teilstriche anzeigen (0), kleine Teilstriche anzeigen (0)),
xname("% abgeschlossen"),
yname("")
)
);
dlgStatus[FrameBox(1)] << Add Graphics Script({Fill Color("blue"),Rect(0,1,50,0,1)}); // 50 % auf einer Skala bis 100 %, wie in der xscale oben gezeigt. wird nicht auf die Pixelanzahl in der Bildgröße skaliert()
dlgStatus[FrameBox(1)] << Add Graphics Script({Fill Color("blue"),Rect(0,1,75,0,1)}); // 75 % auf einer Skala bis 100 %, wie in der xscale oben gezeigt.
// oben ist nur ein Test.Die 50 und 75 wären in meinem echten Skript eine Schleifenindexvariable dividiert durch die Schleifenanzahl. Es würde einmal in jeder Schleifeniteration ausgeführt werden.
dlgStatus << closewindow();
Danke.
Betreff: JMP-Skript-FortschrittsanzeigeWenn Ihr Skript eine einzelne Schleife ausführt, können Sie das Beispiel von SDF1 verwenden und einfach die Variable prog durchgehend aktualisieren. Um Zeit zu sparen und nicht jede Iteration zu aktualisieren, aktualisiere ich alle 10 oder 50 (ich erinnere mich nicht mehr genau) mithilfe einer mod()-Funktion der iterierenden Variablen. JMP hat dies in den letzten 11 Jahren, seit ich den Code erstellt habe, möglicherweise verbessert, aber anfangs verlangsamte es das Skript, um die Leiste bei jeder Iteration zu aktualisieren, während es über einige Hundert bis einige Tausend Spalten iterierte.
Wenn Ihr Skript keine Schleife durchläuft, sondern mehrere Vorgänge durchläuft, müssen Sie möglicherweise nur den Fortschrittsbalken im gesamten Skript aktualisieren. Wenn Sie beispielsweise 10 Vorgänge haben, die jeweils 30 Sekunden dauern, erhöhen Sie den Fortschritt bei jedem Schritt um 10 %. Dies wäre ein manueller Prozess Ihrerseits, um zu bestimmen, wie viel Zeit die einzelnen Codeabschnitte für die Ausführung benötigten.
Wenn es eine Kombination der oben genannten Punkte gibt, können Sie Ihrer Kreativität freien Lauf lassen, aber in jedem Fall liegt es an Ihnen, herauszufinden, wie die Ausführungszeit in Ihrem Skript verteilt ist, und dann den Fortschritt entsprechend darzustellen. JMP führt dies nicht automatisch aus. Sie müssen den Code skripten, um die Leiste basierend auf dem Fortschritt zu aktualisieren.
Dies alles setzt voraus, dass die Ausführung jedes Codeblocks vergleichsweise proportional zur Gesamtausführungszeit dauert, obwohl es schnellere und langsamere Computer gibt, was ziemlich vernünftig ist.
Betreff: JMP-Skript-FortschrittsanzeigeBitte stellen Sie eine Frage: Wenn mein Programm längere Zeit läuft, etwa 5 Minuten, und die Zeit auf verschiedenen Computern unterschiedlich läuft, wie kann ich dann einen entsprechenden Fortschrittsbalken basierend auf der tatsächlichen Laufzeit erstellen?
Betreff: JMP-Skript-Fortschrittsanzeigeich denke, dass @pmroz bietet in diesem Fall eine einfache direkte Lösung, die sicher ist. Beachten Sie jedoch, dass die Verwendung der Nachricht << Löschen zum Entfernen eines Anzeigefeldobjekts aus der Anzeigestruktur in anderen Fällen gefährlich sein kann. Aus diesem Grund gibt es mindestens zwei weitere Ansätze. Im Allgemeinen können Sie die Sichtbarkeit eines Anzeigefelds mit der Meldung << Visibility() ändern. Verwenden Sie in diesem Fall das Collapse-Argument. Das andere ist ein einzigartiges Protokoll für das Axis Box-Objekt. Beispiele finden Sie hier:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
axis box = Report( biv )[AxisBox( 1 )];
axis box << Remove Axis Label( "weight" );
axis box << Show Major Labels( 0 );
axis box << Show Major Ticks( 0 );
Betreff: JMP-Skript-FortschrittsanzeigeHallo @mikedriscoll Und @pmroz ,
Ich bin kürzlich auf diesen Beitrag gestoßen, weil ich ein ähnliches Fortschrittsfenster generieren wollte, das in einem langen Modellierungslauf tatsächlich die Iterationszahl X aus Y ergibt. Wie auch immer, ich habe Ihre Lösung genommen, sie modifiziert und zu einer hinzugefügt, an der ich gearbeitet habe Hier ., also habe ich jetzt sowohl den Fortschrittsbalken als auch die tatsächlichen Zahlen. Ich mag das. Ich muss es wahrscheinlich an die Vorlieben meiner Benutzer anpassen, aber es ist ein guter Anfang. Vielen Dank, dass Sie diese Diskussion begonnen haben!
Names Default To Here( 1 );
i = 1;
imax = 100;
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
dlg_gb = Graph Box(
Title( "Overall Modeling Progress" ),
FrameSize( 150, 15 ),
X Scale( 0, 100 ),
Y Scale( 0, 1 ),
yaxis( show major ticks( 0 ), show minor ticks( 0 ) ),
xname( "% complete" ),
yname( "" )
),
tb = Text Box(
" Current step " || Char( i ) || " of " || Char( imax ),
<<SET font="" size=""></SET>
DS
Betreff: JMP-Skript-FortschrittsanzeigeDanke, das hat perfekt funktioniert.
Die (1) hat meine y-Achse entfernt. Ich habe (2) an Ort und Stelle gelassen, um % anzuzeigen.
Ich habe auch festgestellt, dass ich etwas warten musste (mehr als eine Wartezeit (0);), um die Grafik zu aktualisieren ... hier ist das Ende meiner Schleife, in der ich das Diagrammfeld aktualisiere:
| | progress = floor((paramNum / numParams)*100); |
| | dlgStatus[FrameBox(1)] << Add Graphics Script({Fill Color("blue"),Rect(0,1,progress,0,1)}); //Aktualisierungsfortschritt |
| | warte (0,001); |
);
Ich bin mir nicht sicher, ob ich die „Boden“-Funktion brauche, aber in meinem Fall schadet es nicht.
Betreff: JMP-Skript-FortschrittsanzeigeMit diesen Befehlen können Sie die Achsen entfernen:
dlg_gb[AxisBox( 2 )] << Delete;
dlg_gb[AxisBox( 1 )] << Delete;
Fügen Sie diese beiden Zeilen direkt vor die erste ein dlgStatus[FrameBox(1)]... Befehl.