Il grafico dell'asse Y multiplo
Questo è un grafico specializzato che ridimensiona tutte le variabili dell'asse y e le sovrappone, quindi fornisce la scala dell'asse y nelle unità e nell'intervallo della variabile. Ciò è utile quando si desidera sovrapporre 3 o 4 variabili che sono tutte in intervalli diversi. Nella figura sopra le portate sono nell'intervallo 0-40 mentre la potenza è nell'intervallo 200-1000 e da 100 a 500. Questo tipo di grafico viene spesso utilizzato in applicazioni scientifiche e ingegneristiche in cui più sensori registrano i dati contemporaneamente, ma l'intervallo di ciascun sensore è piuttosto diverso. Ad esempio, in un esempio di fermentazione, il glucosio è 1-5 g / dl, il pH è 6,8 - 7,8, l'acido lattico è 10-50 mmol e il numero di cellule o la torbidità è un ordine di grandezza maggiore. Un modo semplice per rappresentare graficamente la relazione tra tutte le variabili nel tempo è molto utile per comprendere la cinetica (o rilevare schemi insoliti) del processo.
Nomi predefiniti qui (1); dt = Current Data Table (); // Anche questa potrebbe essere una finestra di dialogo, ma è impostata per creare un componente aggiuntivo in questo modo. ////////////////////////////////////////////////// //////////// Espressioni - Le ho spostate tutte qui invece di averle sparse nello script obj = Expr (// il diagramma del generatore di grafici che è gb gb = dt2 << Graph Builder (Dimensione (640, 230), Mostra titolo (0), //// opt Mostra pannello di controllo (0), Posizione legenda ("Inside Left"), Variabili (X (Column (dt2, 1)), Y (: Data) , Overlay (: Column Names)), //: La riga deve essere dinamica in base a x o no x nella finestra di dialogo. Elements (Line (X, Y, Legend (7))), SendToReport (Dispatch ({}, "400", LegendBox, {Set Title ("")})), SendToReport (Dispatch ({}, "Graph Builder" , OutlineBox, {Set Title ("Graphed Response Graph")})), SendToReport (Dispatch ({}, "Data", ScaleBox, {Label Row (Show Major Labels (0))})), SendToReport (Dispatch ({ }, "Titolo Y", TextEditBox, {Set Text ("")})))); objwin = Expr (// finestra in cui tutto finisce in una nuova finestra ("Grafico di risposta in scala con più Y")); objout = Expr (// box outline Schema box ("Etichette asse Y")); objhlb1 = Expr (casella di riepilogo H ("1")); // questo ha i grafici degli assi objhlb2 = Expr (H List Box ("1")); // questo ha il grafico objvlb = Expr (V List Box ("1")); // questo ha out e dt2stackcols = Expr (colonne ()); // nomi delle colonne da impilare dt2stack = Expr (// l'espressione dello stack con argomenti. Nota: l'argomento colonna DEVE essere il primo. stack (Colonna etichetta di origine ("Nomi colonna"), Colonna dati in pila ("Dati"))); ////////////////////////////////////////////////// ////////////////// Finestra di dialogo per ottenere i nomi delle colonne cd = Colonna di dialogo (ylist = ColList ("Y", Min Col (2), Max Col (8), Tipo di dati ("Numerico"), Tipo di modellazione ({"Continuous"})), xlist = ColList ("X", Max Col (1), Tipo di modellazione ({"Continuous", "Multiple Response"}))); Eval (Eval Expr (cd [1])); // eval expr, restituisce ciò che è in cd [1] e eval lo fa eseguire Eval (Eval Expr (cd [2])); // eseguo separatamente solo cd [1], quindi esegui evalexpr) cd [1], ecco come ottengo le variabili ylist e xlist ///////////////////// ////////////////////////////////////////////// Tabella dati standardizzati, and "Axis Boxes" "dt1 = New Table (" multiple y-axis table "); // questa è la tabella dove vanno i valori standardizzati If (N Items (xlist) == 1, // nota che se c'è un colonna selezionata per xlist, quindi non viene ridimensionata Inserisci in (ylist, xlist, 1), // chiamami pazzo, ma il primo valore in ylist è la "X", se esiste dt1 << Nuova colonna (" Row ", formula (Row ()))); For (If (N Items (xlist) == 1, // yep, questo è un argomento" if "all'interno di un ciclo" for "i = 2; // if an" x "è specificato, quindi inizia con la seconda cosa nella lista ycol = As Column (dt, ylist [1]) << ottieni valori; dt1 << Nuova colonna (Munger (ylist [1], 1,": ", ""), imposta valori (ycol)); // questo è davvero brutto, i = 1), i <= N Articoli (ylist), i ++, // end of setup for For loop ycol = As Column (dt, ylist [i]) << ottieni valori; yycol = ((yco l - Min (ycol)) / (Max (ycol) - Min (ycol))); dt1 << Nuova colonna (Munger (ylist [i], 1, ":", ""), imposta valori (yycol)); // è davvero brutto, mi dispiace molto amin = Min (ycol); // questa seconda parte di questo script sta ottenendo valori per rendere le caselle dell'asse y amax = Max (ycol); // Ho bisogno dei valori min e max di ciascuna delle colonne non scalate, insieme ai loro nomi ymin = amin - ((amax - amin) * .1); // L'intervallo dell'asse della scatola dell'asse y è superiore e inferiore del 10% rispetto a min e max. ymax = amax + ((amax - amin) * .1); // Sembra migliore ed è più strettamente allineato con i dati in scala in gb obj1 = Graph Box (Framesize (0, 230), yName (Char (ylist [i])), Y Scale (ymin, ymax)); // non è una vera scatola degli assi, solo una casella del grafico schiacciata. la scatola degli assi era libera Inserisci in (objhlb1, Nome Espr (obj1)); // qui c'è molto inserimento di nome expr (). fa parte della costruzione di espressioni dall'interno verso l'esterno. ); ////////////////////////////////////////////////// ///////////// stack di dati standardizzati per la rappresentazione grafica per (If (N articoli (xlist) == 1, i = 2, i = 1), i <= N articoli (ylist), i ++ , Inserisci in (dt2stackcols, ylist [i]);); Inserisci in (dt2stack, Name Expr (dt2stackcols), 1); dt2 = dt1 << Eval Expr (dt2stack); eval (sostituto (expr (dt2 = dt1 << ping), expr (ping), evalexpr (dt2stack))); // Questo è difficile! dt2 << imposta il nome ("pila multipla sull'asse y"); ////////////////////////////////////////////////// ////////////// L'assemblaggio di tutte le parti nella finestra finale visualizzata - l'ordine conta molto Inserisci in (objout, Name Expr (objhlb1)); Inserisci in (objvlb, Name Expr (objout)); Inserisci in (objhlb2, Nome Espr (objvlb)); Inserisci in (objhlb2, Nome Espr (obj)); Inserisci in (objwin, Nome Espr (objhlb2)); Eval (Eval Expr (objwin)); // Valutazione di tutte le parti assemblate dopo che tutte le espressioni sono state valutate in formato g << (600, 285); // se si desidera formattare il grafico, inviare messaggi a gb
Trova un insieme più dettagliato di note su come funziona lo script qui:
https://community.jmp.com/t5/Byron-Wingerd-s-Blog/Multiple-Y-Axis-Graphs/ba-p/52000