Ich versuche, Schieberegler zu verwenden, um eine Tabelle zu aktualisieren, dann werden die Modelle in den Modellspalten aktualisiert, um neue Werte (auf einer Waferkarte) vorherzusagen, die dann das Konturdiagramm neu zeichnen. Das Problem ist, dass, wenn Sie die automatische Neuberechnung einschalten und die Schieberegler an das Konturdiagramm anhängen, die Schieberegler bei der Neuberechnung verworfen werden.
Ich kann die Schieberegler und das Konturdiagramm in separaten Fenstern halten, aber dann habe ich ein Problem, wenn ich in einem JMP-Projekt arbeite und ich in das Layout des Registerkartenberichts einsteigen muss.
Ich muss nicht in einem Tabellenformat bleiben - Diagramm mit Schiebereglern, wir könnten das alles auch im Speicher machen, aber ich denke nicht, dass das Wiederherstellen des Konturdiagramms im Code Spaß macht. Graph Builder ist auch in Ordnung, solange ich Punktkarten zeichnen kann.
Die aktuelle Lösung in diesem neuen Fenster () funktioniert, aber wenn ich die Schieberegler bewege, lösche ich das aktualisierte Konturdiagramm und füge es wieder hinzu, was ein bisschen wie ein Hack-Job und langsam ist. Also suche ich nach einer besseren Lösung!

Beispieltabelle anbei.
Beispielskript anbei und hier:
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());
CP = 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)^));
testlist[2] << Delete Box();
wait(0.1);
testlist << append(report(CP));
);"
);
);
),
eval(
parse(
eval insert(
"NEB^char(i)^ = Number Edit Box( Var^char(i)^,
<<SETFUNCTION></SETFUNCTION>
FYI
Wenn Sie die Konstruktion eval(parse(evalinsert( ... ))) verwenden, brauchen Sie die Variablen nicht zu "char".Du kannst also schreiben
SB^i^ = Slider Box( . . . )
Der Inhalt ist bereits eine Zeichenfolge, daher ist das Zeichen überflüssig.
Ich habe das Konturdiagramm in einen Anzeigeboxbehälter gelegt und es scheint in Ordnung zu funktionieren.
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>
Vielleicht möchten Sie sich ein trivialeres Beispiel ausdenken, das auf einer Standarddatentabelle basiert, auf die wir alle Zugriff haben, dann haben wir Code, den wir ausführen und kommentieren können.