Le graphique à axes Y multiples
Il s'agit d'un graphique spécialisé qui met à l'échelle toutes les variables de l'axe y et les superpose, puis fournit l'échelle de l'axe y dans les unités et la plage de la variable. Ceci est utile lorsque vous souhaitez superposer 3 ou 4 variables qui sont toutes dans des plages différentes. Dans la figure ci-dessus, les débits sont compris entre 0 et 40 tandis que la puissance est comprise entre 200 et 1000 et 100 et 500. Ce type de graphique est souvent utilisé dans les applications scientifiques et d'ingénierie où plusieurs capteurs enregistrent des données en même temps, mais la portée de chaque capteur est assez différente. Par exemple, dans un exemple de fermentation, le glucose est de 1 à 5 g / dl, le pH est de 6,8 à 7,8, l'acide lactique est de 10 à 50 mmol et le nombre de cellules ou la tourbidité est d'un ordre de grandeur supérieur. Un moyen simple de représenter graphiquement la relation entre toutes les variables dans le temps est très utile pour comprendre la cinétique (ou détecter des modèles inhabituels) du processus.
Noms par défaut à ici (1); dt = table de données actuelle (); // Cela pourrait aussi être une boîte de dialogue, mais il est configuré pour créer un complément de cette façon. //////////////////////////////////////////////////// //////////// Expressions - Je les ai toutes déplacées ici plutôt que de les avoir dispersées dans le script obj = Expr (// l'intrigue du générateur de graphes qui est gb gb = dt2 << Graph Builder (Size (640, 230), Afficher le titre (0), //// opt Afficher le panneau de configuration (0), Position de la légende ("à l'intérieur de la gauche"), Variables (X (Colonne (dt2, 1)), Y (: Données) , Overlay (: Noms des colonnes)), //: La ligne doit être dynamique en fonction de x ou pas de x dans la boîte de dialogue. Elements (Line (X, Y, Legend (7))), SendToReport (Dispatch ({}, "400", LegendBox, {Set Title ("")})), SendToReport (Dispatch ({}, "Graph Builder" , OutlineBox, {Set Title ("Scaled Response Graph")})), SendToReport (Dispatch ({}, "Data", ScaleBox, {Label Row (Show Major Labels (0))})), SendToReport (Dispatch ({ }, "Y title", TextEditBox, {Set Text ("")}))))); objwin = Expr (// fenêtre où tout se termine dans une nouvelle fenêtre ("Graphique de réponse mis à l'échelle avec plusieurs Y")); objout = Expr (// contour box Outline Box ("Labels d'axe Y")); objhlb1 = Expr (zone de liste H ("1")); // celui-ci a les axes tracés objhlb2 = Expr (H List Box ("1")); // celui-ci a le graphe obj objvlb = Expr (V List Box ("1")); // celui-ci est sorti et dt2stackcols = Expr (colonnes ()); // noms de colonnes à empiler dt2stack = Expr (// l'expression de pile avec des arguments. Remarque: l'argument de colonne DOIT être le premier. stack (colonne d'étiquette source ("noms de colonne"), colonne de données empilées ("données"))); //////////////////////////////////////////////////// //////////////////// Dialogue pour obtenir les noms des colonnes cd = Column Dialog (ylist = ColList ("Y", Min Col (2), Max Col (8), Data Type ("Numeric"), Type de modélisation ({"Continuous"})), xlist = ColList ("X", Max Col (1), Type de modélisation ({"Continuous", "Multiple Response"})))); Eval (Eval Expr (cd [1])); // eval expr, retourne ce qui est dans cd [1], et l'eval lui fait exécuter Eval (Eval Expr (cd [2])); // lancez séparément cd [1], puis exécutez evalexpr) cd [1], voici comment j'obtiens les variables ylist et xlist ///////////////////// //////////////////////////////////////////////// Tableau de données normalisé, et "Axis Boxes" "dt1 = New Table (" multiple y-axis table "); // il s'agit du tableau où les valeurs normalisées vont If (N Items (xlist) == 1, // notez que s'il existe un colonne sélectionnée pour xlist, puis elle n'est pas mise à l'échelle Insérer dans (ylist, xlist, 1), // appelez-moi fou, mais la première valeur dans ylist est le "X", s'il existe dt1 << New Column (" Row ", formule (Row ()))); For (If (N Items (xlist) == 1, // yep, c'est un argument" if "dans une boucle" for "i = 2; // if an" x "est spécifié, puis commencez par la deuxième chose dans la liste ycol = As Column (dt, ylist [1]) << get values; dt1 << New Column (Munger (ylist [1], 1,": ", ""), définissez les valeurs (ycol)); // c'est tellement moche, i = 1), i <= N Items (ylist), i ++, // fin de la configuration de la boucle For ycol = As Column (dt, ylist [i]) << obtenir des valeurs; yycol = ((yco l - Min (ycol)) / (Max (ycol) - Min (ycol))); dt1 << Nouvelle colonne (Munger (ylist [i], 1, ":", ""), set values (yycol)); // c'est vraiment moche, désolé amin = Min (ycol); // cette deuxième partie de ce script obtient des valeurs pour rendre les cases de l'axe y amax = Max (ycol); // J'ai besoin des valeurs min et max de chacune des colonnes non mises à l'échelle, ainsi que de leurs noms ymin = amin - ((amax - amin) * .1); // La plage d'axe de boîte d'axe Y est 10% supérieure et inférieure aux valeurs min et max. ymax = amax + ((amax - amin) * .1); // Il a une meilleure apparence et est plus étroitement aligné avec les données mises à l'échelle dans gb obj1 = Graph Box (Framesize (0, 230), yName (Char (ylist [i])), Y Scale (ymin, ymax)); // ce n'est pas une vraie boîte d'axe, juste une boîte de graphique écrasée. la boîte d'axe était libre Insérer dans (objhlb1, Name Expr (obj1)); // il y a beaucoup d'insertion de nom expr () ici. sa part de la construction des expressions de l'intérieur. ); //////////////////////////////////////////////////// ///////////// pile de données standardisées pour la représentation graphique de For (If (N Items (xlist) == 1, i = 2, i = 1), i <= N Items (ylist), i ++ , Insérer dans (dt2stackcols, ylist [i]);); Insérer dans (dt2stack, Name Expr (dt2stackcols), 1); dt2 = dt1 << Eval Expr (dt2stack); eval (substitut (expr (dt2 = dt1 << ping), expr (ping), evalexpr (dt2stack))); // C'est délicat! dt2 << nom du set ("pile d'axes y multiples"); //////////////////////////////////////////////////// //////////////// Assemblage de toutes les pièces dans la fenêtre finale qui est affichée - l'ordre compte beaucoup Insérer dans (objout, Name Expr (objhlb1)); Insérer dans (objvlb, Name Expr (objout)); Insérer dans (objhlb2, Name Expr (objvlb)); Insérer dans (objhlb2, Name Expr (obj)); Insérer dans (objwin, Name Expr (objhlb2)); Eval (Eval Expr (objwin)); // Évaluation de toutes les pièces assemblées après évaluation de toutes les expressions gb << size (600, 285); // si vous voulez formater le graphique, envoyez des messages à gb
Trouvez un ensemble plus détaillé de notes sur le fonctionnement du script ici:
https://community.jmp.com/t5/Byron-Wingerd-s-Blog/Multiple-Y-Axis-Graphs/ba-p/52000