Grafikskript zum Erkennen des DiagrammtitelsIch möchte ein benutzerdefiniertes Grafikskript einrichten, damit jedes Diagramm eine eindeutige Linie basierend auf den in einem assoziativen Array enthaltenen Informationen erhält. Im folgenden Beispiel möchte ich für jede Kategorie ein anderes Diagramm auf der Linie haben. Für meine tatsächliche Verwendung benötige ich, dass das Diagramm die Überschrift „erkennt“, unter der es steht, damit ich die richtigen Werte für die Linienerstellung verwenden kann .
Für das Beispielbild unten habe ich das Grafikskript „F“ manuell auf „F“ aktualisiert. Also suche ich nach einer Syntax zum „Sammeln der Diagramminformationen“ ... Wenn ich in meinem Kopf den Titel des Gliederungsfelds ergreife, kann ich ihn manipulieren, um das zu bekommen, was ich brauche ... aber ich bin mir nicht sicher, ob das so ist die einzige/beste Option.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = "M";// need to extract so it's "F" for female graph
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);

MassenanpassungBetreff: Grafikskript zur Erkennung des Grafiktitels@Mark_Bailey Danke für diese Idee! Es ist gut zu wissen, dass die Zusammenfassung mit der Reihenfolge übereinstimmt, in der die Diagramme im Bericht erstellt werden. Das ist etwas, wofür ich in mehreren meiner Skripte Verwendungsmöglichkeiten sehe 
@Craige_Hales Das ist eine echt coole Idee mit der Funktion, damit muss ich auch noch experimentieren!
Betreff: Grafikskript zur Erkennung des GrafiktitelsWenn Sie das gesamte Grafikskript in eine Funktion umwandeln, erhält es eine Das Parameter, der das Rahmenfeld darstellt. Sie können zur Gliederung hinaufklettern, um den Titel zu erhalten. Der Vorteil besteht darin, dass Sie wissen, dass Sie die Gliederung erhalten haben, die Folgendes enthält Das Graph.
Outline title copied into graph by graphic scriptOutline title copied into graph by graphic scriptGliederungstitel per Grafikskript in das Diagramm kopiert
dt = Open( "$sample_data/big class.jmp", invisible );
bv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
(bv << report)[framebox( 1 )] << addgraphicsscript(
// if a function is used, it must be the only statement in the graphic script
Function( {this},{titlebox=this},
// the function can use this to find the frame box, climb to an Outline title...
While( (titlebox << classname) != "OutlineBox", titlebox = titlebox << parent );
// then other graphics commands
Text( center justified, {60, 120}, (titlebox << gettitle) );
Circle( {60, 120}, 30 );
this<<BACKGROUNDCOLOR></BACKGROUNDCOLOR>Betreff: Grafikskript zur Erkennung des GrafiktitelsEin anderer Ansatz könnte darin bestehen, die Werte zu ermitteln, bevor Sie Bivariate starten. Zur Bestimmung der Ebenen kann die Funktion Summarize() verwendet werden in der gleichen Reihenfolge und sie erscheinen, wenn eine By-Variable oder eine Where()-Klausel verwendet wird.
Summarize( level = By( :Group ) );
Die Variablenebene speichert eine Liste von Zeichenfolgen aller eindeutigen Ebenen in der Datenspalte :Group in der richtigen Reihenfolge. Ihr Grafikskript muss also nicht das Umrissanzeigefeld abfragen, um herauszufinden, wo es sich befindet.
Betreff: Grafikskript zur Erkennung des GrafiktitelsDas könnte auch funktionieren, @jthi ... wie geschrieben, wäre es nicht so dynamisch, wie ich es auf lange Sicht bräuchte, aber ich könnte damit eine benutzerdefinierte Iteratorvariable einbauen, sodass jedes Diagramm dieselbe Variable hat, aber auf eine andere Zahl gesetzt ist, entsprechend seiner Position im Bericht.
Nochmals vielen Dank an alle für ihre Gedanken!
Betreff: Grafikskript zur Erkennung des GrafiktitelsErweitern eines der Codes von @txnelson :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order(1 ), Reference Line Order( 3)}
)
)
);
rep = biv << Get As Report;
For( i = 1, i <= N Items(rep), i++,
keyForAa = Substr(Report(rep [i])[Outline Box( 1 )] << get title,
Contains(Report(rep [i])[Outline Box( 1 )] << get title, "=" ) + 1);
//see Add Graphics Script example from Scripting Index
framebox = Report(rep [i])[frame box(1)];
Eval(EvalExpr(framebox << Add Graphics Script(
2,
Description( "" ),
Y Function(Expr(test[keyForAa][1]) * x + Expr(test[keyForAa][2]), x );
)));
);Betreff: Grafikskript zur Erkennung des GrafiktitelsDas ist faszinierend, dass man i bei 0 beginnen kann und es einfach „magisch“ so iteriert ... Ich habe die unten eingefügten Fehler erhalten, aber es scheint, dass zumindest einige davon funktioniert haben. Ich habe kurz vor dem Erstellen der graphInfo-Variablen einen Befehl show(i) erstellt.
Es scheint für die beiden Diagramme großartig funktioniert zu haben, aber aus irgendeinem Grund wurde es auch noch zwei weitere Male iteriert, was dazu führte, dass biv[i] nicht gefunden werden konnte ... also habe ich diesen Teil in ein Try() eingepackt und es schien so zu funktionieren notwendig!
1) Ich bin mir nicht sicher, warum „i“ so iteriert oder wann ich das möglicherweise für andere Funktionen in JSL verwenden könnte
2) Ich bin mir nicht sicher, warum es scheinbar noch zweimal iteriert ... eines pro Diagramm, eines pro Grafikskript??
3) Vielen Dank für die Hilfe hier... Ich verstehe vielleicht noch nicht, wie/warum es funktioniert, aber wenn ich es dauerhaft zum Laufen bringe, ist das der Gewinn!

Names default to here(1);
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
i=0;
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
i++;
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
show(i);
Try(
graphInfo = word(2,report(biv[i])[OutlineBox(1)] << get title,"=");
show(graphinfo);
);
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);Betreff: Grafikskript zur Erkennung des GrafiktitelsVersuche dies
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
i=0;
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
i++;
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = word(2,report(biv[i])[OutlineBox(1)] << get title,"=");
show(graphinfo);
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )
}
)
)
);Betreff: Grafikskript zur Erkennung des GrafiktitelsDas ist es... Kann ich diese Informationen aus dem Grafikskript selbst herauslesen?
Den Titel zu bekommen ist von außen einfach.
Ich möchte in der Lage sein, genau das gleiche Grafikskript in jedes Diagramm eines Berichts einzufügen und dieses Skript in der Lage zu sein, herauszufinden, wo es sich befindet.
Betreff: Grafikskript zur Erkennung des GrafiktitelsSie müssen wissen, aus welcher Outline-Box Sie den Titel beziehen müssen, aber danach müssen Sie nur noch den Titel abrufen
graph title = report( biv[1] )[OutlineBox(1)] << get title;
Betreff: Grafikskript zur Erkennung des GrafiktitelsIch wollte den Titel nicht aktualisieren, sondern die Titelinformationen abrufen ... aus dem Grafikskript heraus. Sobald ich die Titelinformationen habe, kann ich die gesamte String-Manipulation durchführen.
Idealerweise brauche ich etwas, das ich in das Grafikskript einfügen kann, etwa „graphTitle = graph << get title;“ und gehen Sie von dort aus, aber ich bin nicht sicher, ob das möglich ist, es sei denn, das Objekt „weiß“, in welchem Teil des Baums es enthalten ist ...
Betreff: Grafikskript zur Erkennung des GrafiktitelsHier sind die Änderungen an Ihrem Skript, die die Titel aktualisieren

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
By( :sex ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 30 ), Max( 180 ), Inc( 20 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
test = Associative Array( {{"F", {0.1, 50}}, {"M", {.8, 0}}} );
///gather graph info to get "F" or "M" from output
graphInfo = "M";// need to extract so it's "F" for female graph
Y Function( test[graphInfo][1] * x + test[graphInfo][2], x );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);
For( i = 1, i <= N Items( biv ), i++,
Report( biv[i] )[Outline Box( 1 )] << set title(
Substr(
Report( biv[i] )[Outline Box( 1 )] << get title,
Contains( Report( biv[i] )[Outline Box( 1 )] << get title, "=" ) + 1
)
)
);