Aggiunta di annotazioni a livello di codice a una trama esistente con JSLCiao a tutti,
Sto cercando di aggiungere alcuni metadati "in caratteri piccoli" tramite JSL al mio grafico dopo averlo creato nel Costruttore di grafici.
Di seguito sono riportati due esempi di ciò che mi piacerebbe ottenere con JSL: il campo di testo Metadati 1 si trova nell'area del tracciato, il campo di testo Metadati 2 è all'esterno nella parte inferiore del grafico. Nella trama di esempio ho appena aggiunto i campi di testo tramite lo strumento di annotazione nella GUI. Tuttavia, ho difficoltà a capire come ottenere questo risultato in JSL.
Questo è il mio primo post qui: grazie in anticipo per qualsiasi aiuto!

finestreRi: Aggiunta di annotazioni a livello di codice a una trama esistente con JSLEcco del codice cablato che fa ciò che hai specificato

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" )
)
);
Re: Aggiunta di annotazioni a livello di programmazione a un grafico esistente con JSLGrazie Jim, è stato veloce!
Questo mi porta quasi al traguardo. Ora sono in grado di generare i testi come voglio.
Tuttavia, se salvo un grafico creato in questo modo come script, ottengo qualcosa del genere:
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"
);
)}
)
)
)
e se provo a eseguire lo script ottengo un errore
>oggetto non sottoscrivibile nell'accesso o nella valutazione di 'Report(gb)[ /*###*/axisbox(1)]' , Report( gb )[/*###*/axisbox( 1 )]
Il che, secondo me, ha senso, visto che "gb" non è definito nello script. C'è un modo per aggirare questo problema?
Re: Aggiunta di annotazioni a livello di programmazione a un grafico esistente con JSLManca la variabile "gb" che punta all'istanza di Graph Builder
gb = Graph Builder(
Re: Aggiunta di annotazioni a livello di programmazione a un grafico esistente con JSLBene, questo è vero, ma è così che lo script viene salvato da JMP quando, ad esempio, utilizzo "salva script ... nella tabella dati".
Tuttavia ho trovato una soluzione utilizzando Eval ed EvalExpr da qui:
https://community.jmp.com/t5/Discussions/GraphBuilder-gt-FrameBox-lt-lt-Add-Graphics-Script-V-Line-x-y1/td-p/366991
in questo modo ho fatto funzionare tutto:
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" );
)
));
Re: Aggiunta di annotazioni a livello di programmazione a un grafico esistente con JSLPuoi anche apportare una piccola modifica allo script di Jim e usare X Origin e Y Origin per impostare la posizione
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"
);
);