Comment mettre à jour les limites des axes via Global BoxBonjour,
Je souhaite contrôler les limites de l'axe Y d'un graphique via des boîtes globales (pour permettre à l'utilisateur de modifier rapidement les limites sans double-cliquer sur les propriétés de l'axe...).
Dans le script ci-joint, je crée une fenêtre et un graphique. Ensuite j'ajoute 2 Global Boxes (Lim1 et Lim2) que j'initialise.
Une fois le graphique généré, je modifie les valeurs de Lim1 et Lim2 mais l'axe du graphique n'est pas mis à jour en conséquence...Je ne vois pas ce que je fais de mal.
Quelqu'un peut-il aider?
Merci.
Re : Comment mettre à jour les limites d'axe via Global BoxJe suis tombé sur votre question en essayant de faire quelque chose de très similaire (définir des limites d'axe par des données sur de nombreux graphiques afin que les valeurs aberrantes ne soient pas manquées). Je l'ai résolu en définissant les limites de l'axe sur une expression à évaluer (c'est-à-dire égale à la valeur minimale - soit le LSL, soit le point de données le plus bas, opposé pour max). Voir ci-dessous:
// Get min/max for Graph 1
dt = Current Data Table();
G1 = dt << Get Rows Where (:Column 1 == "Group1");
G1_Min = Eval( Min((LSL[1]*0.95), Min(:Column 2[G1])));
G1_Max = Eval( Max((USL[1]*1.05), Max(:Column 2[G1])));
dt << clear select;
// Get min/max for Graph 2 etc. repeat for each graph
dt = Current Data Table();
G2 = dt << Get Rows Where (:Column 1 == "Group2");
G2_Min = Eval( Min((LSL[2]*0.95), Min(:Column 2[G2])));
G2_Max = Eval( Max((USL[2]*1.05), Max(:Column 2[G2])));
dt << clear select;
// Assign axis limits and specification lines within the graph parameters (for Graph 1 - repeat for each)
Dispatch ({Min(G1_Min), Max(G1_Max), Inc( Eval((G1_Max - G1_Min) / 7))),
Add Ref Line( LSL[1], "Solid", "Medium Dark Blue", "LSL", 1 ),
Add Ref Line( USL[1], "Solid", "Medium Dark Blue", "USL", 1 )}* Remarque : Je sais que votre problème est résolu depuis 4 ans, mais cela peut aider d'autres personnes ayant des problèmes similaires.
Re : Comment mettre à jour les limites d'axe via Global BoxNelson, Jeff,
Je comprends votre raisonnement : utiliser la plate-forme interactive (glisser, déplacer,...) des axes est en effet très utile... Cependant, pour plusieurs raisons, cela ne m'est pas utile :
- La plupart des graphiques que je vais générer contiendront des valeurs aberrantes qui auront une valeur beaucoup plus élevée que le reste de la population. Dans ce cas, la solution interactive est très chronophage et pénible...
- J'ai l'intention de générer environ 30 graphiques dans une seule fenêtre : vous pouvez imaginer que changer interactivement les 30 graphiques n'est pas une option. avoir une boîte ou deux boîtes pour définir toutes les valeurs est plus rapide.
Quoi qu'il en soit, je vois que la solution de Nelson fonctionne bien. Ça a l'air d'un gros complexe : il faut que je regarde dans les détails ce qui est fait.
merci beaucoup.
Re : Comment mettre à jour les limites d'axe via Global BoxJ'ai un peu changé le format, juste parce que je n'étais pas sûr de ce que tout faisait. Cependant, vous trouverez ci-dessous un exemple de la façon dont je gère généralement l'élément que vous interrogez. Ma plus grande question, n'est-il pas plus simple de simplement faire glisser et déplacer le paramètre d'axe plus simple pour vos utilisateurs, que de taper les valeurs min et max ?
Names Default To Here( 1 );
//DataPath = "C:\Program Files (x86)\SAS\JMP\11\Samples\Data\Variability Data\Wafer.jmp";
myTable = Open( "$SAMPLE_DATA\Variability Data\Wafer.jmp" );
Param = "Y";
Lim1 = 40;
Lim2 = 160;
FrameSize_X = 775;
FrameSize_Y = 200;
MyWindow = New Window( "Window Controls",
gr = MyTable << Variability Chart(
Y( :Name( "Y" ) ),
X( :Operator, :Wafer ),
Max Iter( 100 ),
Std Dev Chart( 1 ),
Show Range Bars( 0 ),
Show Grand Median( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
Automatic Recalc( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Y"},
"2",
ScaleBox,
{Min( Lim1 ), Max( Lim2 ), Inc( Abs( Lim2 - Lim1 ) / 10 ), Minor Ticks( 0 ),
Show Major Grid( 1 ), Show Minor Grid( 1 ), Inside Ticks( 1 )}
),
Dispatch( {"Variability Chart for Y"}, "Y", TextEditBox, {Set Text( Param )} ),
Dispatch(
{"Variability Chart for Y"},
"Variability Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y ), ,
Row Legend(
Name( "Operator" ),
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
),
Dispatch(
{"Variability Chart for Y"},
"Varability Std Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y )}
)
)
),
Panel Box( "1/ Start...",
g3 = V List Box(
H List Box(
Text Box( "Lim 1" ),
n1 = Number Edit Box(
Lim1,
5,
<<SETFUNCTION></SETFUNCTION>Re : Comment mettre à jour les limites d'axe via Global BoxLe problème est que la variable globale est utilisée pour définir les axes lorsque le graphique est créé, mais le graphique n'a plus aucune relation avec la variable globale après cela.
Il existe des moyens de créer l'interactivité que vous recherchez (et je suis sûr que quelqu'un ici peut vous fournir un prototype), mais ne négligez pas l'interactivité intégrée de l'axe de chaque graphique dans JMP. Tout ce que vous avez à faire est de survoler l'axe et le curseur se transformera en main et vous pourrez cliquer et faire glisser pour changer l'axe.

Vous rendriez un grand service à vos utilisateurs en leur apprenant cela.De cette façon, ils auront le contrôle sur tous les graphiques qu'ils voient dans JMP, pas seulement ceux que vous créez pour eux et leur donneront des commandes de zone de texte pratiques.