Referenzlinie basierend auf Säulendaten automatisierenHallo, ich bin sehr neu bei JSL und habe Schwierigkeiten, eine Möglichkeit zu finden, automatisch mehrere Referenzlinien in einem Diagramm basierend auf Werten in einer bestimmten Spalte zu erstellen. Derzeit zeichne ich eine Variable (:Signal) auf der Y-Achse und drei Variablen (:Zone, :Target und :Condition) auf der X-Achse. Jede (:Target)-Variable hat ein bestimmtes (:historisches Signal) und ich würde gerne einen Weg finden, das (:historische Signal) von (:Target) automatisch als Referenzlinie darzustellen. Der Code, den ich habe, wird durch manuelles Hinzufügen des historischen Signalwerts über h line() erstellt, aber idealerweise würde das Skript für jedes (:target) eine Referenzzeile basierend auf dem entsprechenden historischen Signal hinzufügen. Dankeschön!
Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Signal"},
"Variability Chart",
FrameBox,
{Frame Size( 969, 240 ),
Add Graphics Script(
2,
Description( "" ),
Pen Color( "RED" );
//Target 2
H Line( 0, 2, 234 );
//Target 3
H Line( 2, 4, 670 );
//Target 1
H Line( 4, 6, 463 );
)}
)
)
);
SkriptingBetreff: Referenzlinie basierend auf Säulendaten automatisierenIn Anbetracht Ihrer aktuellen Datenstruktur finden Sie hier eine Möglichkeit, Ihre historischen Signale zu automatisieren
Names Default To Here( 1 );
dt = Current Data Table();
targ1 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 1" )] );
targ2 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 2" )] );
targ3 = Mean( :Historical Signal[dt << get rows where( :Target == "Target 3" )] );
Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Signal"},
"Variability Chart",
FrameBox,
{Frame Size( 969, 240 ), Add Graphics Script(
2,
Description( "" ),
Pen Color( "RED" );
//Target 2
H Line( 0, 2, targ2 );
//Target 3
H Line( 2, 4, targ3 );
//Target 1
H Line( 4, 6, targ1 );
)}
)
)
);Betreff: Referenzlinie basierend auf Säulendaten automatisierenHey txnelson, vielen Dank für deine Antwort, das ist fast genau das, was ich suche! Die einzige andere Sache, die ich mich frage, ist, ob es möglich ist, den Code von h line() mit seinem entsprechenden :Target abzugleichen, anstatt die Koordinaten manuell in den Graphen eingeben zu müssen. In Zukunft werde ich unterschiedlich viele Ziele hinzufügen und sie werden nicht immer in der gleichen Reihenfolge sein.
Betreff: Referenzlinie basierend auf Säulendaten automatisierenAlles, was Sie tun müssen, ist herauszufinden, wie Sie die Werte und die Reihenfolge erhalten, und dann die erforderliche JSL zu generieren.Hier ist ein einfaches Beispiel, das Ihnen einen Start in die richtige Richtung geben sollte, um Ihr endgültiges Skript zu erstellen.
Names Default To Here( 1 );
dt = Current Data Table();
// Find the number of targets and get the means
Summarize( dt, targs = by( :Zone, :Target ), targMeans = Mean( :Historical Signal ) );
vc = Variability Chart(
Y( :Signal ),
X( :Zone, :Target, :Condition ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Mean Diamonds( 1 )
);
// Create the JSL to submit to generate the Target Lines
theExpr =
"Report( vc )[FrameBox( 1 )] << add graphics Script(
Description( \!"\!" ),
Pen Color( \!"RED\!" );";
For( ii = 1, ii <= N Items( targMeans ), ii++,
theExpr = theExpr || "H Line( " || Char( (ii - 1) * 2 ) || "," || Char( (ii - 1) * 2 + 2 )
|| "," || Char( targMeans[ii] ) || ");";
);
Eval( Parse( theExpr ) );