Salve a tutti,
Sto scrivendo in Application Builder. In uno dei miei moduli ho un Graph Box, con l'intenzione di impostarlo per visualizzare un grafico predefinito, ma non sto avendo molta fortuna. Inizialmente stavo pensando che la cosa più semplice da fare sarebbe stata semplicemente incorporare in qualche modo il mio grafico predefinito nella finestra del modulo, quindi ho cercato di utilizzare Graph Box come segnaposto, provando qualcosa come:
graphBox << Visibility("Collapse");
panelBox << Append( /*graph*/ ) );...ma non ha funzionato. Potenzialmente il modo più semplice è effettivamente scrivere i diversi elementi del grafico nella casella del grafico individualmente? Sono abbastanza nuovo in JSL, quindi so che il mio approccio/sintassi deve essere sbagliato in qualche modo, ma non sono sicuro di quale sarebbe il modo migliore/più semplice per farlo!
Il codice per creare il grafico che voglio (grazie agli utili utenti su un'altra domanda che ho postato ) è:
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
);*/Ho commentato l'ultima parte di questo codice, perché in realtà preferisco il grafico risultante con il pannello di controllo semplicemente soppresso ("Mostra pannello di controllo (0)"), al contrario di "<< Ottieni immagine", perché questo nasconde il Generatore di grafici funzionalità per l'utente, ma consente comunque un grafico dinamico (assi afferrabili e mobili, ecc.). Se è possibile incorporare il grafico in questo modo, allora questo è il mio percorso ideale.
Apprezzo qualsiasi aiuto.
Grazie,
Estelle
Ciao Estelle, fornirò una soluzione che potrebbe essere utile per lo scripting di report sia che tu sia all'interno di Application Builder o che scriva direttamente in JSL.Quando avvii piattaforme senza una finestra contenitore, la finestra viene creata per te.Una piattaforma "live" può avere un solo report, quindi se si tenta di aggiungere un report a una finestra esistente, viene creata una copia del report.Questo è leggermente più interattivo rispetto alla creazione di un'immagine, ma non è nemmeno quello che stai cercando.
Nello script di esempio seguente, mostro tre modi per aggiungere contenuto a una finestra esistente e i risultati hanno diversi livelli di interattività:
- Nel primo caso, una piattaforma Live Graph Builder è incorporata direttamente in una finestra esistente.La piattaforma non crea un'altra finestra e non viene eseguita alcuna copia.
- Nella seconda finestra viene aggiunta una copia del report, che ha una minore interattività.Questa è una copia del rapporto stesso, senza un oggetto piattaforma.Non ha alcuna connessione con la tabella dati.
- Nella terza finestra aggiungo un'immagine del Graph Builder, che ha la minor interattività.
// 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 />
All'interno di un'applicazione JMP, dovresti essere in grado di utilizzare uno qualsiasi di questi approcci.Il primo approccio ti consente di aggiungere qualsiasi casella che hai creato nell'app, assicurati solo di eseguire lo script Graph Builder all'interno del messaggio <