Potresti voler creare un esempio più banale basato su una tabella di dati standard a cui tutti abbiamo accesso, quindi possiamo avere del codice che possiamo eseguire e commentare.
Ho messo il contourplot in un contenitore di display box e sembra funzionare bene.
Names default to here(1);
RangeMin = Associative array(["C flow" => 180,
"D flow" => 165,
"Time" => 33,
"Pressure" => 200,
"Temp" => 610,
"A flow" => 180,
"B flow" => 165]);
RangeMax = Associative Array(["C flow" => 355,
"D flow" => 325,
"Time" => 44,
"Pressure" => 350,
"Temp" => 630,
"A flow" => 355,
"B flow" => 450]);
SliderVars = {620.869565217391, 40.5217391304348, 268.478260869565, 263.260869565217,
288.913043478261, 271.086956521739, 247.608695652174, 263.43, 40.5217391304348,
268.478260869565, 263.260869565217, 288.913043478261, 271.086956521739,
247.608695652174, 620.869565217391, 40.5217391304348, 268.478260869565,
263.260869565217, 288.913043478261, 271.086956521739, 247.608695652174};
XColumns = {"Temp", "Time", "Pressure", "A flow", "B flow",
"C flow", "D flow"};
GraphingTable = Current Data Table();
sjaakie = New window("test", testlist = h list box());
CPcontent = VListBox(
GraphingTable << Contour Plot(
X( :X, :Y ),
Y( :Models ),
Show Data Points( 1 ),
Fill Areas( 1 ),
Label Contours( 0 ),
Color Theme( "Spectral" ),
Automatic Recalc( 1 )
)
);
ValuesOutlineBox = Outline Box("Values", SliderList = v list box());
For(i=1, i<= n items(XColumns),i++,
SliderList << append(
h list box(
Text box(XColumns[i]),
eval(
parse(
eval insert(
"Var^char(i)^ = ^SliderVars[i]^;
SB^char(i)^ = Slider Box(
^RangeMin << get value(XColumns[i])^,
^RangeMax << get value(XColumns[i])^,
Var^char(i)^,
NEB^char(i)^ << set( Var^char(i)^ );
^Column(GraphingTable, XColumns[i])^ << set values(J(n rows(),1,Var^char(i)^));
);"
);
);
),
eval(
parse(
eval insert(
"NEB^char(i)^ = Number Edit Box( Var^char(i)^,
<<SETFUNCTION></SETFUNCTION>
FYI
quando usi l'eval (parsing (evalinsert (... ))) costruzione non è necessario "char" le variabili. Quindi puoi scrivere
SB^i^ = Slider Box( . . . )
il contenuto è già una stringa, quindi il char è ridondante.
Sto cercando di utilizzare i cursori per aggiornare una tabella, quindi i modelli nelle colonne del modello si aggiornano per prevedere nuovi valori (su una mappa di wafer) che quindi ridisegna il diagramma di contorno. Il problema è che quando si attiva il ricalcolo automatico e si aggiungono i cursori al contorno, i cursori vengono eliminati al momento del ricalcolo.
Posso mantenere i cursori e il diagramma di contorno in finestre separate, ma poi ho un problema se lavoro in un progetto JMP e devo occuparmi dello scripting del layout del report delle schede.
Non ho bisogno di rimanere all'interno di una tabella - grafico con formato di cursori, potremmo anche fare tutto in memoria ma non penso che ricostruire il diagramma di contorno nel codice sia divertente. Il generatore di grafici va bene anche se riesco a disegnare mappe di punti.
La soluzione attuale in questa nuova finestra () funziona ma quando muovo i cursori sto eliminando e ricollegando il diagramma di contorno aggiornato che è un po 'un lavoro di hacking e lento. Quindi sto cercando una soluzione migliore!
Tabella di esempio allegata.
Script di esempio allegato e qui:
Nomi predefiniti qui (1); RangeMin = array associativo (["C flow" => 180, "D flow" => 165, "Time" => 33, "Pressure" => 200, "Temp" => 610, "A flow" => 180 , "B flow" => 165]); RangeMax = Array associativo (["C flow" => 355, "D flow" => 325, "Time" => 44, "Pressure" => 350, "Temp" => 630, "A flow" => 355 , "B flow" => 450]); SliderVars = {620,869565217391, 40,5217391304348, 268,478260869565, 263,260869565217, 288,913043478261, 271,086956521739, 247,608695652174, 263,43, 40,5217391304348, 268,478260869565, 263,260869565217, 288,913043478261, 271,086956521739, 247,608695652174, 620,869565217391, 40,5217391304348, 268,478260869565, 263,260869565217, 288,913043478261, 271,086956521739, 247,608695652174}; XColumns = {"Temp", "Time", "Pressure", "A flow", "B flow", "C flow", "D flow"}; GraphingTable = Current Data Table (); sjaakie = Nuova finestra ("test", testlist = h list box ()); CP = GraphingTable << Grafico dei contorni (X (: X,: Y), Y (: Modelli), Mostra punti dati (1), Aree di riempimento (1), Contorni etichetta (0), Tema colore ("Spettrale"), Ricalcolo automatico (1)); ValuesOutlineBox = Outline Box ("Values", SliderList = v list box ()); Per (i = 1, i <= n elementi (XColumns), i ++, SliderList << append (casella di riepilogo h (casella di testo (XColumns [i]), eval (parse (eval insert ("Var ^ char (i) ^ = ^ SliderVars [i] ^; SB ^ char (i) ^ = Slider Box (^ RangeMin << ottieni valore (XColumns [i]) ^, ^ RangeMax << ottieni valore (XColumns [i]) ^, Var ^ char (i) ^, NEB ^ char (i) ^ << set (Var ^ char (i) ^); ^ Column (GraphingTable, XColumns [i]) ^ << imposta valori (J (n righe (), 1, Var ^ char (i) ^)); testlist [2] << Delete Box (); wait (0.1); testlist << append (report (CP));); "););), eval (parse ( eval insert ("NEB ^ char (i) ^ = Casella di modifica del numero (Var ^ char (i) ^, << setfunction (Funzione ({this}, Var ^ char (i) ^ = this << get; SB ^ char (i) ^ << inval; ^ Column (GraphingTable, XColumns [i]) ^ << imposta valori (J (n righe (), 1, Var ^ char (i) ^)); testlist [2] << Elimina Box (); wait (0.1); testlist << append (report (CP));))); "););),))); testlist << append (ValuesOutlineBox); testlist << append (report (CP)); sjaakie << Porta la finestra in primo piano ();