Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLHallo zusammen,
Ich möchte über JSL einige Metadaten „Kleingedrucktes“ zu meinem Plot hinzufügen, nachdem ich den Plot im Graph Builder erstellt habe.
Unten sind zwei Beispiele dafür, was ich mit JSL erreichen möchte: Das Textfeld „Metadaten 1“ befindet sich im Plotbereich, das Textfeld „Metadaten 2“ befindet sich außerhalb davon am unteren Rand des Diagramms. Im Beispielplot habe ich gerade die Textfelder mit dem Anmerkungstool in der GUI hinzugefügt. Es fällt mir jedoch schwer herauszufinden, wie ich dies in JSL erreichen kann.
Dies ist mein erster Beitrag hier – vielen Dank im Voraus für jede Hilfe!

WindowsBetreff: Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLHier ist ein fest verdrahteter Code, der das tut, was Sie angegeben haben

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// To add text within the graph one way is to use "Add Graphics Script"
// to the graph
Report( gb )[Outline Box( 1 ), framebox( 1 )] <<
add graphics script(
xMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
Text Color( "red" );
Text(
Right Justified,
{xMin + 46, yMin + 1},
"Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName"
);
Text( Right Justified, {xMin + 32, yMin + .1}, "path c:tmp/graph-01.jrp" );
);
// Add Outside of the graph
Report( gb )[Outline Box( 1 )] << Append(
V List Box(
Text Box( "Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName" ),
Text Box( "path c:tmp/graph-01.jrp" )
)
);
Betreff: Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLDanke, Jim, das ging schnell!
Damit bin ich fast am Ziel. Ich kann jetzt die Texte so erstellen, wie ich sie haben möchte.
Wenn ich jedoch ein auf diese Weise erstelltes Diagramm als Skript speichere, erhalte ich etwa Folgendes:
Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
5,
Description( "" ),
xMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
Text Color( "red" );
Text(
Right Justified,
{xMin + 46, yMin + 1},
"Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName"
);
Text(
Right Justified,
{xMin + 32, yMin + 0.1},
"path c:tmp/graph-01.jrp"
);
)}
)
)
)
und wenn ich versuche, das Skript auszuführen, erhalte ich eine Fehlermeldung
>Objekt nicht indiziert beim Zugriff oder bei der Auswertung von 'Report(gb)[ /*###*/axisbox(1)]' , Report( gb )[/*###*/axisbox( 1 )]
was meiner Meinung nach Sinn macht, da das "gb" im Skript nicht definiert ist. Gibt es eine Möglichkeit, dieses Problem zu umgehen?
Betreff: Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLIhnen fehlt die Variable „gb“, die auf die Graph Builder-Instanz verweist
gb = Graph Builder(
Betreff: Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLDas stimmt zwar, aber so wird das Skript von JMP gespeichert, wenn ich beispielsweise „Skript speichern … in Datentabelle“ verwende.
Ich habe jedoch hier eine Lösung mit Eval und EvalExpr gefunden:
https://community.jmp.com/t5/Discussions/GraphBuilder-gt-FrameBox-lt-lt-Add-Graphics-Script-V-Line-x-y1/td-p/366991
So habe ich es zum Laufen gebracht:
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
yMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
//I need the values "hard-coded"" in the new graphics script to be added => hence i
//need to use the Eval(EvalExpr( .. )) trick from
//https://community.jmp.com/t5/Discussions/GraphBuilder-gt-FrameBox-lt-lt-Add-Graphics-Script-V-Line-x-y1/td-p/366991
Eval(EvalExpr(
Report( gb )[Outline Box( 1 ), framebox( 1 )] <<
add graphics script(
Text Color( "red" );
Text( {expr(xMin),expr(yMin)}, "path c:tmp/graph-01.jrp" );
)
));
Betreff: Programmgesteuertes Hinzufügen von Anmerkungen zu einem vorhandenen Plot mit JSLSie können auch leichte Änderungen an Jims Skript vornehmen und X Origin und Y Origin verwenden, um den Standort festzulegen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3)), Smoother(X, Y, Legend(4)))
);
Report(gb)[FrameBox(1)] << Add Graphics Script(
Text Color("Red");
Text({X Origin(), Y Origin()},
"Metadata1 " || Format(Today(), "yyyymmdd") || "/OwnerName\!Npath c:tmp/graph-01.jrp"
);
);