Comment mettre à jour un script de table de variabilité pour tracer des lignes de référence faisant référence aux paramètres de filtre de données ?Bonjour,
Je travaille sur un graphique de variabilité où j'ai des données continues que je trace par sous-groupe.J'ai 3 bandes de température de données "1C à 13C", "16C à 28C" et "30C à 45C".Je souhaite que des lignes de référence soient dessinées pour chaque catégorie de filtre que je sélectionne dans les données, il existe 3 groupes de lignes de référence différents.
Voir le fichier joint et le script de variabilité.
Je suis relativement nouveau dans les scripts.J'ai vu comment la commande de script JMP vous permet d'écrire la commande pour chaque ligne de référence.Je veux rendre la commande dynamique en fonction de ce qui est sélectionné par le filtre de données. (section soulignée en gras du script.
S'il vous plaît donnez votre avis,
Merci
Mat
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 ) ) )
)
)
)
GraphiqueScriptRe : Comment mettre à jour un script de table de variabilité pour dessiner des lignes de référence faisant référence aux paramètres de filtre de données ?salut @mcastner , je dirais que vous avez choisi une tâche assez compliquée pour commencer à écrire des scripts !Vous trouverez ci-dessous un moyen de faire ce que vous avez demandé (si je vous ai bien interprété), mais je me demande si vous pourriez faciliter cela en utilisant le générateur de graphiques pour tracer une boîte à moustaches et une ligne en même temps.Comment obtenez-vous des valeurs pour les lignes de référence ?Une chance qui est un résumé des données disponibles (médiane, quantile, etc.), ou pourriez-vous le faire dans une colonne de formules ?
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();
