Das Diagramm mit mehreren Y-Achsen
Dies ist ein spezialisiertes Diagramm, das alle Variablen der y-Achse skaliert und überlagert und dann die y-Achsenskala in den Einheiten und im Bereich der Variablen angibt. Dies ist nützlich, wenn Sie 3 oder 4 Variablen in unterschiedlichen Bereichen überlagern möchten. In der obigen Abbildung liegen die Durchflussraten im Bereich von 0 bis 40, während die Leistung im Bereich von 200 bis 1000 und 100 bis 500 liegt. Diese Art von Grafik wird häufig in wissenschaftlichen und technischen Anwendungen verwendet, bei denen mehrere Sensoren gleichzeitig Daten aufzeichnen, die Reichweite der einzelnen Sensoren jedoch sehr unterschiedlich ist. Zum Beispiel beträgt in einem Fermentationsbeispiel Glucose 1–5 g / dl, pH 6,8–7,8, Milchsäure 10–50 mmol und die Zellzahl oder Turrbidität ist eine Größenordnung größer. Eine einfache Möglichkeit, die Beziehung zwischen allen Variablen über die Zeit grafisch darzustellen, ist sehr hilfreich, um die Kinetik (oder das Erkennen ungewöhnlicher Muster) des Prozesses zu verstehen.
Names Default To Here (1); dt = Aktuelle Datentabelle (); // Dies könnte auch ein Dialog sein, der jedoch so eingerichtet ist, dass er ein Add-In erstellt. //////////////////////////////////////////////////// ////////////// Ausdrücke - Ich habe diese hierher verschoben, anstatt sie im Skript zu verteilen (640, 230), Titel anzeigen (0), //// opt Systemsteuerung anzeigen (0), Legendenposition ("Links innen"), Variablen (X (Spalte (dt2, 1)), Y (: Daten) , Überlagerung (: Spaltennamen), //: Zeile muss dynamisch sein, basierend auf x oder keinem x im Dialogfeld. Elemente (Linie (X, Y, Legende (7))), SendToReport (Versand ({}, "400", LegendBox, {Set Title ("")})), SendToReport (Versand ({}, "Graph Builder") , OutlineBox, {Set Title ("Scaled Response Graph")}), SendToReport (Versand ({}, "Data", ScaleBox, {Label Row (Show Major Labels (0)))), SendToReport (Versand ({ }, "Y title", TextEditBox, {Set Text ("")})))); objwin = Ausdruck (// Fenster, in dem alles in einem neuen Fenster endet ("Skaliertes Antwortdiagramm mit mehreren Ys")); objout = Ausdruck (// Gliederungsrahmen Gliederungsrahmen ("Y-Achsenbeschriftungen")); objhlb1 = Ausdruck (H-Listenfeld ("1")); // Dieser hat die Achsendiagramme objhlb2 = Expr (H List Box ("1")); // dieser hat den obj graph objvlb = Expr (V List Box ("1")); // dieser hat out und dt2stackcols = Expr (columns ()); // zu stapelnde Spaltennamen dt2stack = Expr (// der Stapelausdruck mit Argumenten. Hinweis: Das Spaltenargument MUSS an erster Stelle stehen. stack (Source Label Column ("Spaltennamen"), Stacked Data Column ("Data"))); //////////////////////////////////////////////////// //////////////////// Dialog zum Abrufen der Spaltennamen cd = Column Dialog (ylist = ColList ("Y", Min Col (2), Max Col (8), Datentyp ("Numerisch"), Modelltyp ({"Fortlaufend"}), xlist = ColList ("X", Max Col (1), Modelltyp ({"Fortlaufend", "Mehrfachantwort"}))); Eval (Eval Expr (cd [1])); // eval expr gibt zurück, was sich in cd [1] befindet, und das eval veranlasst es, Eval auszuführen (Eval Expr (cd [2])); // Führe nur cd [1] separat aus und dann evalexpr) cd [1] aus. So erhalte ich die Variablen ylist und xlist /////////////////// ////////////////////////////////////////////// standardisierte Datentabelle, und "Axis Boxes" "dt1 = Neue Tabelle (" Tabelle mit mehreren y-Achsen "); // Dies ist die Tabelle, in die die standardisierten Werte gehen Spalte für xlist ausgewählt, dann wird sie nicht skaliert. Insert Into (ylist, xlist, 1), // call me crazy, aber der erste Wert in ylist ist das "X", falls vorhanden. dt1 << New Column (" Zeile ", Formel (Zeile ())); Für (If (N Items (xlist) == 1, // yep, das ist ein" if "-Argument innerhalb einer" for "-Schleife i = 2; // if an" x "wird angegeben, dann beginne mit dem zweiten Punkt in der Liste ycol = As Column (dt, ylist [1]) << erhalte Werte; dt1 << New Column (Munger (ylist [1], 1,": ", ""), setze Werte (ycol)); // das ist soooo hässlich, i = 1), i <= N Items (ylist), i ++, // Ende des Setups für die For-Schleife ycol = As Column (dt, ylist [i]) << Werte erhalten; yycol = ((yco 1 - Min (ycol)) / (Max (ycol) - Min (ycol)); dt1 << Neue Spalte (Munger (ylist [i], 1, ":", ""), eingestellte Werte (yycol)); // das ist sooo hässlich, sehr leid amin = Min (ycol); // Dieser zweite Teil dieses Skripts ruft Werte ab, um die y-Achsen-Boxen amax = Max (ycol); // Ich benötige die minimalen und maximalen Werte aus jeder der nicht skalierten Spalten zusammen mit ihren Namen ymin = amin - ((amax - amin) * .1); // Der y-Achsen-Boxachsenbereich ist 10% höher und niedriger als der min- und max-Bereich. ymax = amax + ((amax - amin) * .1); // Es sieht besser aus und ist enger mit den skalierten Daten in gb ausgerichtet. Obj1 = Grafikfeld (Framesize (0, 230), yName (Char (ylist [i])), Y-Skala (ymin, ymax)); // Es ist keine echte Achsenbox, nur eine gequetschte Grafikbox. das Achsenfeld war frei Insert Into (objhlb1, Name Expr (obj1)); // Hier wird viel der Name expr () eingefügt. Es ist ein Teil des Aufbaus von Ausdrücken von innen nach außen. ); //////////////////////////////////////////////////// ///////////// standardisierte Daten für die grafische Darstellung stapeln Für (If (N Items (xlist) == 1, i = 2, i = 1), i <= N Items (ylist), i ++ , Insert Into (dt2stackcols, ylist [i]);); Insert Into (dt2stack, Name Expr (dt2stackcols), 1); dt2 = dt1 << Eval Expr (dt2stack); eval (Ersatz (expr (dt2 = dt1 << ping), expr (ping), evalexpr (dt2stack))); // Das ist knifflig! dt2 << set name ("Stapel mit mehreren y-Achsen"); //////////////////////////////////////////////////// //////////////// Zusammenbau aller Teile in das endgültige Fenster, das angezeigt wird - Reihenfolge ist sehr wichtig Einfügen in (objout, Name Ausdruck (objhlb1)); Insert Into (objvlb, Name Expr (objout)); Insert Into (objhlb2, Name Expr (objvlb)); Insert Into (objhlb2, Name Expr (obj)); Einfügen in (objwin, Name Expr (objhlb2)); Eval (Eval Expr (objwin)); // Alle zusammengesetzten Teile auswerten, nachdem alle Ausdrücke ausgewertet wurden gb << size (600, 285); // Wenn Sie das Diagramm formatieren möchten, senden Sie Nachrichten an GB
Weitere Hinweise zur Funktionsweise des Skripts finden Sie hier:
https://community.jmp.com/t5/Byron-Wingerd-s-Blog/Multiple-Y-Axis-Graphs/ba-p/52000