Hallo allerseits,
Ich erstelle Skripte im Application Builder. In einem meiner Module habe ich ein Diagrammfeld mit der Absicht, es so einzustellen, dass es ein vorgefertigtes Diagramm anzeigt, aber ich habe nicht viel Glück. Ich dachte ursprünglich, dass es am einfachsten wäre, mein vorgefertigtes Diagramm irgendwie in das Modulfenster einzubetten, also habe ich versucht, das Diagrammfeld als Platzhalter zu verwenden, und zwar so etwas wie:
graphBox << Visibility("Collapse");
panelBox << Append( /*graph*/ ) );...aber das hat nicht funktioniert. Möglicherweise ist es am einfachsten, die verschiedenen Diagrammelemente einzeln in das Diagrammfeld zu schreiben? Ich bin ziemlich neu bei JSL und weiß daher, dass mein Ansatz/Syntax irgendwie falsch sein muss, aber ich bin mir nicht sicher, wie ich das am besten/einfachsten machen könnte!
Der Code zum Erstellen des Diagramms, das ich möchte (danke an hilfreiche Benutzer auf noch eine Frage, die ich gepostet habe ) Ist:
Names Default To Here(1);
datafile = Open( "Data.xlsx" );
x_col = Column(datafile, 1);
y_cols = (datafile << Get Column Names())[2::N Cols(datafile)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
var_line = Expr(Line(X));
For Each({col, idx}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
yline_expr = Parse("Y("||char(idx)||")");
Insert Into(var_line, Name Expr(yline_expr));
);
graphbuild = Eval(Substitute(
Expr(
graphbuild = datafile << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
Elements(yyy)
)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(var_line)
));
/*gb_image = graphbuild << get picture;
graphbuild << Close Window;
New window("time-series plot",
gb_image
);*/Ich habe den letzten Teil dieses Codes auskommentiert, weil ich eigentlich das resultierende Diagramm mit einfach unterdrücktem Bedienfeld („Show Control Panel(0)“) bevorzuge, im Gegensatz zu „<< Get Picture“, weil dadurch der Graph Builder ausgeblendet wird Funktionalitäten für den Benutzer, ermöglicht aber dennoch eine dynamische Grafik (greifbare und bewegliche Achsen usw.). Wenn es möglich ist, das Diagramm auf diese Weise einzubetten, dann ist das mein idealer Weg.
Ich bin für jede Hilfe dankbar.
Danke schön,
Estelle
Hallo Estelle, ich gebe eine Lösung, die für die Skripterstellung von Berichten hilfreich sein kann, unabhängig davon, ob Sie sich im Application Builder befinden oder direkt in JSL schreiben.Wenn Sie Plattformen ohne ein enthaltendes Fenster starten, wird das Fenster für Sie erstellt.Eine „Live“-Plattform kann nur einen Bericht haben. Wenn Sie also versuchen, einen Bericht an ein vorhandenes Fenster anzuhängen, wird eine Kopie des Berichts erstellt.Das ist etwas interaktiver als das Erstellen eines Bildes, aber es ist auch nicht das, wonach Sie suchen.
Im folgenden Beispielskript zeige ich drei Möglichkeiten, Inhalte an ein vorhandenes Fenster anzuhängen. Die Ergebnisse weisen unterschiedliche Ebenen der Interaktivität auf:
- Im ersten Fall wird eine Live-Graph Builder-Plattform direkt in ein vorhandenes Fenster eingebettet.Die Plattform erstellt kein weiteres Fenster und es wird kein Kopiervorgang durchgeführt.
- Im zweiten Fenster wird eine Kopie des Berichts hinzugefügt, die weniger interaktiv ist.Dies ist eine Kopie des Berichts selbst, ohne Plattformobjekt.Es besteht keine Verbindung zur Datentabelle.
- Im dritten Fenster füge ich ein Bild des Graph Builders hinzu, der die geringste Interaktivität aufweist.
// Create an empty window first
New Window("Interactive Report",
panel = Panel Box("Interactive Report")
);
Wait(2);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Append a Graph Builder to the existing window
// This report will be entirely interactive
// Axes can be changed, and points can be selected
panel << Append(gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
// We could try to create windows from existing platforms
// This will lose some interactivity
// Axes can change, but the selection is fixed
New Window("Report Copy",
panel2 = Panel Box("Report Copy",
)
);
Wait(2);
panel2 << Append(Report(gb)); // creates a copy of the report
// Or we could take a picture of the report
// This is the least interactive result - nothing can change
New Window("Report Picture",
panel3 = Panel Box("Report Picture",
)
);
Wait(2);
panel3 << Append(gb << Get Picture);<BR />
Innerhalb einer JMP-Anwendung sollten Sie in der Lage sein, jeden dieser Ansätze zu verwenden.Mit dem ersten Ansatz können Sie an jedes Feld anhängen, das Sie in der App erstellt haben. Stellen Sie jedoch sicher, dass Sie das Graph Builder-Skript innerhalb der <