Ciao programmatori JSL,
Sto lavorando a uno script in cui aggiungo una mia "legendatura" a un grafico. Vedi lo screenshot qui sotto.

Ho aggiunto le linee e il testo facendo clic con il pulsante destro del mouse sul grafico, selezionando Personalizza... e quindi aggiungendo uno script al grafico. Il seguente codice JSL genera la "legend" come mostrato sopra.
Pen Color( "Red" );
Pen Size( 2 );
Line Style( "Solid" );
Line( [20, 100], [65, 65] );
Text( {120, 64}, "Weight" );
Pen Color( "Blue" );
Pen Size( 2 );
Line( [20, 100], [60, 60] );
Text( {120, 59}, "Height" );
Ma quello che mi interessa davvero è come rendere le posizioni delle linee della legenda e del testo relative, ad esempio, al 90% del valore massimo nella colonna "Differenza di peso [g]". La tabella dati è allegata insieme allo script (lo script non funzionante è commentato). Pensavo di poterlo fare con qualcosa del tipo Eval(Substitute(Expr(...), Expr(__pos__), pos) di JSL, ma continuo a ricevere l'errore "Invalid Matrix Token". Con qualcosa del genere:
Names Default To Here( 1 );
pos = Col Max( :"Weight diff[g]"n );
Eval(
Substitute(
Expr(
Graph Builder(
Size( 510, 510 ),
Show Legend( 0 ),
Graph Spacing( 4 ),
Variables(
X( :"MeasTime [s]"n ),
Y( :"Weight diff [g]"n ),
Y( :"Height diff [mm]"n, Position( 1 ), Side( "Right" ) )
),
Elements( Line( X, Y( 1 ), Legend( 5 ) ), Line( X, Y( 2 ), Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "MeasTime [s]", ScaleBox, {Inc( 100 )} ),
Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script(
5,
Description( "" ),
Pen Color( "Red" );
Pen Size( 2 );
Line Style( "Solid" );
Line( [20, 100], [__pos__, __pos__] );
Text( {120, 64}, "Weight" );
Pen Color( "Blue" );
Pen Size( 2 );
Line( [20, 100], [60, 60] );
Text( {120, 59}, "Height" );
)}
)
)
)
),
Expr( __pos__ ), Eval( Round( 0.9 * pos, 0 ) )
)
);
Ho persino provato a racchiudere le coordinate y della funzione Line() tra "{ }", in questo modo: Line( [20, 100],[{_pos__,__pos__}]), ma continuo a ricevere lo stesso errore. Preferirei usare una variabile come "pos", che ottengo da una colonna, piuttosto che un valore assoluto, perché i valori della colonna possono cambiare e ho bisogno che gli oggetti del grafico, come la linea e il testo, possano muoversi rispetto a ciò che viene rappresentato nel grafico.
Avete qualche suggerimento su come aggirare questo errore e/o cosa mi sfugge? Questo approccio dovrebbe funzionare, ma non riesco proprio a capire il perché.
Grazie!,
DS
Ciao @jthi ,
Grazie per il suggerimento! Con una piccola modifica, mi è stato di grande aiuto e ho ottenuto esattamente ciò di cui avevo bisogno, grazie!
Grazie anche per la rapida risposta!
DS
Nel caso in cui altri lettori fossero interessati, ho modificato il codice JSL (vedi sotto) come segue:
Names Default To Here( 1 );
x1=300;
y2=36.7;
Graph Builder(
Size( 510, 510 ),
Show Legend( 0 ),
Graph Spacing( 4 ),
Variables( X( :"MeasTime [s]"n ), Y( :"Weight diff [g]"n ), Y( :"Height diff [mm]"n, Position( 1 ), Side( "Right" ) ) ),
Elements( Line( X, Y( 1 ), Legend( 5 ) ), Line( X, Y( 2 ), Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "MeasTime [s]", ScaleBox, {Inc( 100 )} ),
Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script(
5,
Description( "" ),
Pen Color( "Black" );
Line Style( "Dashed" );
Line( {x1,YOrigin()}, {x1,y2}, {XOrigin(),y2}, {x1,y2} );
Pen Color( "Red" );
Pen Size( 2 );
Line Style( "Solid" );
Line( {XOrigin()+30, 0.9*YRange()}, {XOrigin()+130, 0.9*YRange()} );
Text( {XOrigin()+150, 0.9*YRange()-1}, "Weight" );
Pen Color( "Blue" );
Pen Size( 2 );
Line( {XOrigin()+30, 0.85*YRange()}, {XOrigin()+130, 0.85*YRange()} );
Text( {XOrigin()+150, 0.85*YRange()-1}, "Height" );
)}
)
)
);
Il risultato è il seguente:

Queste sono dimostrazioni di ciò che volevo fare esattamente: creare delle "legendature" relative e delle linee di riferimento specifiche che non attraversino l'intera lunghezza/altezza del grafico.
Spero che questo possa essere d'aiuto ad altri che intendono fare qualcosa di simile.
Spero che questo sia d'aiuto ad altri!
DS
Potresti voler valutare x1 e y2 nello script grafico per evitare ogni sorta di problemi potenzialmente fastidiosi.
Scopri di più...
Names Default To Here(1);
x1 = 300;
y2 = 36.7;
dt = Current Data Table();
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(510, 510),
Show Legend(0),
Graph Spacing(4),
Variables(X(:"MeasTime [s]"n), Y(:"Weight diff [g]"n), Y(:"Height diff [mm]"n, Position(1), Side("Right"))),
Elements(Line(X, Y(1), Legend(5)), Line(X, Y(2), Legend(6))),
SendToReport(
Dispatch({}, "MeasTime [s]", ScaleBox, {Inc(100)}),
Dispatch({}, "Graph Builder", FrameBox,
{Add Graphics Script(
5,
Description(""),
Pen Color("Black");
Line Style("Dashed");
Line({_x1_, Y Origin()}, {_x1_, _y2_}, {X Origin(), _y2_}, {_x1_, _y2_});
Pen Color("Red");
Pen Size(2);
Line Style("Solid");
Line({X Origin() + 30, 0.9 * Y Range()}, {X Origin() + 130, 0.9 * Y Range()});
Text({X Origin() + 150, 0.9 * Y Range() - 1}, "Weight");
Pen Color("Blue");
Pen Size(2);
Line({X Origin() + 30, 0.85 * Y Range()}, {X Origin() + 130, 0.85 * Y Range()});
Text({X Origin() + 150, 0.85 * Y Range() - 1}, "Height");
)}
)
)
)),
Expr(_x1_), x1,
Expr(_y2_), y2
)
);