Hallo allerseits,
Ich schreibe in Application Builder Skripte. In einem meiner Module habe ich eine Graph Box, mit der Absicht, sie so einzustellen, dass sie eine vorgefertigte Grafik 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, die Diagrammbox als Platzhalter zu verwenden, und so etwas versucht:
graphBox << Visibility("Collapse");
panelBox << Append( /*graph*/ ) );...aber das hat nicht funktioniert. Möglicherweise ist es am einfachsten, die verschiedenen Diagrammelemente einzeln in die Diagrammbox zu schreiben? Ich bin ziemlich neu in JSL, daher weiß ich, dass mein Ansatz / meine Syntax in irgendeiner Weise falsch sein muss, aber ich bin mir nicht sicher, was der beste / einfachste Weg wäre, dies zu tun!
Der Code zum Erstellen des gewünschten Diagramms (Dank an hilfreiche Benutzer auf eine andere 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 das resultierende Diagramm eigentlich bevorzuge, wenn das Bedienfeld einfach unterdrückt ist ("Show Control Panel(0)"), im Gegensatz zu "<< Get Picture", weil dies den Graph Builder verbirgt Funktionalitäten für den Benutzer, ermöglicht aber dennoch einen dynamischen Graphen (greifbare und verschiebbare Achsen usw.). Wenn es möglich ist, den Graphen auf diese Weise einzubetten, dann ist das mein idealer Weg.
Ich freue mich über jede Hilfe.
Danke,
Estelle
Hallo Estelle - Ich gebe eine Lösung, die für das Skripting 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.Dies 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, und die Ergebnisse weisen unterschiedliche Interaktivitätsstufen 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 Kopieren durchgeführt.
- Im zweiten Fenster wird eine Kopie des Berichts hinzugefügt, die weniger interaktiv ist.Dies ist eine Kopie des Berichts ohne Plattformobjekt.Es hat keine Verbindung zur Datentabelle.
- Im dritten Fenster füge ich ein Bild des Graph Builder an, der die geringste Interaktivität hat.
// 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 jeden dieser Ansätze verwenden können.Beim ersten Ansatz können Sie an jedes Feld anhängen, das Sie in der App erstellt haben. Stellen Sie einfach sicher, dass Sie das Graph Builder-Skript innerhalb der <