Hallo,
Ich arbeite an einem Variabilitätsdiagramm, in dem ich kontinuierliche Daten habe, die ich nach Untergruppen zeichne.Ich habe 3 Temperaturbänder mit Daten "1 ° C bis 13 ° C", "16 ° C bis 28 ° C" und "30 ° C bis 45 ° C".Ich möchte, dass für jede Filterkategorie, die ich in den Daten auswähle, Referenzlinien gezeichnet werden. Es gibt 3 verschiedene Referenzliniengruppen.
Siehe die angehängte Datei und das Variability-Skript.
Ich bin relativ neu im Scripting.Ich habe gesehen, wie Sie mit dem JMP-Skriptbefehl den Befehl für jede Referenzzeile schreiben können.Ich möchte den Befehl basierend auf der Auswahl des Datenfilters dynamisch machen. (fett unterstrichener Abschnitt des Skripts.
Bitte beraten,
Vielen Dank
Matt
New Window( "Sample set 1 - Variability Chart by Lot",
V List Box(
Variability Chart(
Y( :Test 1 ),
X( :Lot ),
Std Dev Chart( 0 ),
Local Data Filter( Add Filter( columns( :Temp Band 2 ) ) ),
SendToReport(
Dispatch(
{"Variability Chart for Test 1"},
"2",
ScaleBox,
{Min( 0.814090277777778 ), Max( 1.13166666666667 ), Inc( 0.05 ),
Minor Ticks( 1 ), Add Ref Line(
0, "Dotted", "Medium Light Gray", "", 1
), Add Ref Line( <U><STRONG>1.1</STRONG></U>, "Solid", "Black", "", 1 ),
Add Ref Line(<U> <STRONG>0.9</STRONG></U>, "Solid", "Black", "", 1 )}
)
)
),
Variability Chart(
Y( :Test 2 ),
X( :Lot ),
Std Dev Chart( 0 ),
Local Data Filter( Add Filter( columns( :Temp Band 2 ) ) )
),
Variability Chart(
Y( :Test3 ),
X( :Lot ),
Std Dev Chart( 0 ),
Local Data Filter( Add Filter( columns( :Temp Band 2 ) ) )
)
)
)
Hi @mcastner , ich würde sagen, Sie haben sich eine ziemlich komplizierte Aufgabe ausgesucht, um mit dem Skripting zu beginnen!Unten ist eine Möglichkeit, das zu tun, was Sie gefragt haben (wenn ich Sie richtig interpretiert habe), aber ich frage mich, ob Sie dies einfacher machen könnten, indem Sie den Graph Builder verwenden, um gleichzeitig einen Boxplot und eine Linie zu zeichnen.Wie kommen Sie auf Werte für die Referenzlinien?Gibt es eine Möglichkeit, die eine Zusammenfassung der verfügbaren Daten (Median, Quantil usw.) ist, oder könnten Sie dies in einer Formelspalte tun?
Names default to here(1);
dt = Open( "$Sample_data/big class.jmp" );
//Valeus for ref lines - hopefully populated by your script
reflines = Associative Array({
{"height",
Associative Array({
{ 12, 62 },
{ 13, 63 },
{ 14, 64 },
{ 15, 65 },
{ 16, 66 },
{ 17, 67 }
})
},
{"weight",
Associative Array({
{ 12, 112 },
{ 13, 113 },
{ 14, 114 },
{ 15, 115 },
{ 16, 116 },
{ 17, 117 }
})
}
});
//A window with a single data filter that will be applied to all graphs inside it
New Window("charts",
Data Filter Context Box(
H List Box(
ldf = dt << Data Filter( Local,
Add Filter(
columns( :age ),
Where( :age == 13 ),
Display( :age, N Items( 6 ) )
),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) )
),
vc1 = Variability Chart(
Y( :height ),
X( :sex )
);
vc2 = Variability Chart(
Y( :weight ),
X( :sex )
);
)
)
);
//Function that is called when data filter changes and when the window is first opened, this will redraw lines on charts
UpdateRefLines = function({},
//find out what ages were selected, there is probably a better way to do this too
filteredagelast = filteredage;
filteredage = median(dt:age[ldf << get filtered rows()]);
//detect if there was a change in the age (prevents flickering of the screen)
if(is missing(filteredagelast) | (filteredagelast != filteredage),
//remove any existing ref lines
(vc1 << XPath("//AxisBox[@charID=2]"))[1] << Revert Axis;
(vc2 << XPath("//AxisBox[@charID=2]"))[1] << Revert Axis;
//draw new lines
(vc1 << XPath("//ScaleBox[@ID=2]")) << Add Ref Line( reflines["height"][FilteredAge], "Solid", "Black", "", 1 );
(vc2 << XPath("//ScaleBox[@ID=2]")) << Add Ref Line( reflines["weight"][FilteredAge], "Solid", "Black", "", 1 );
)
);
//function called when data filter changes, here it only redraws reference lines
UpdatesOnRowStateChanges = function({x}, if(is matrix(x), UpdateRefLines ) );
//variable used to keep track of the last filter applied
filteredage = .;
//Assign function to data filter
rsh = vc1 << Make Row State Handler( dt, UpdatesOnRowStateChanges );
//draw initial reference lines
UpdateRefLines();
