Mehrere Referenzlinien auf der X-AchseHallo,
Für ein Projekt, an dem ich arbeite, habe ich ein Diagramm mit der Zeit auf der x-Achse erstellt, das einen Zeitraum von ca. 24 Stunden zeigt. Um visuell zu veranschaulichen, wann es Nacht und Tag ist, habe ich Referenzlinien hinzugefügt, wie im folgenden Skript und im angehängten Bild gezeigt.
Eigenschaften für die X-Achsen-Spalte:
SableData << New Column(
"Time since first dose-[hours]",
Numeric, "Continuous",
Format("Best", 12),
Formula((:Date Time - :StartTime) / (60 * 60)),
Set Property("Spec Limits", {LSL(8), USL(20), Show Limits(0)}), Set Selected);
Diagramm erstellen, Referenzlinien hinzufügen und konfigurieren:
Oxygen consumption = SableData << Graph Builder(
Size( 1007, 689 ),
Variables(
X( :Name( "Time since first dose-[hours]" ) ),
Y( :Name("VO2-[ml/min]" )),
Overlay( :Treatment )
),
Elements( Line( X, Y, Legend( 21 ), Error Bars( "Standard Error" ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "Oxygen consumption" )} ),
Dispatch(
{},
"Time since first dose-[hours]",
ScaleBox,
{Min( 168 ), Max( 288), Inc( 2 ), Minor Ticks( 12 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
21,
Properties( 0, {Line Color( 0 )}, Item ID( "A", 1 ) ),
Properties(
1,
{Line Color( 53 )},
Item ID( "B", 1 )
),
Properties(
2,
{Line Color( 37 )},
Item ID( "C", 1 )
),
Properties( 3, {Line Color( 0 )}, Item ID( "A", 2 ) ),
Properties(
4,
{Line Color( 53 )},
Item ID( "B", 2 )
),
Properties(
5,
{Line Color( 37 )},
Item ID( "C", 2 )
)
)}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 0 )} ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} )
)
);
Eval(
Substitute(
Expr(
Report( Oxygen consumption )[AxisBox( 1 )] << Add Ref Line( {__LSL__, __USL__}, "Solid", "Black", "", 1, 0.25 ) //try show limits(1) in spec limits
),
Expr( __LSL__ ), (SableData:Name( "Time since first dose-[hours]" ) << get property( "spec limits" ))["LSL"],
Expr( __USL__ ), (SableData:Name( "Time since first dose-[hours]" ) << get property( "spec limits" ))["USL"]
));
Aber jetzt habe ich Daten über zwei Wochen und möchte immer noch visuell veranschaulichen, wann es Tag und Nacht ist. Ich kann diese natürlich manuell hinzufügen und das Skript kopieren, aber ich möchte dies auf robuste Weise tun.
Kann ich diese zusätzlichen Eigenschaften auf irgendeine Weise hinzufügen? „Zeit seit der ersten Dosis – [Stunden]“ Spalte oder ist es möglich, eine separate Datentabelle mit allen Grenzwerten zu erstellen und diese auf einmal in die Datentabelle zu ziehen?
Vielen Dank im Voraus.
Br. Julie

MassenanpassungQualitäts- und VerfahrenstechnikBetreff: Mehrere Referenzlinien auf der X-AchseIch hatte tatsächlich Hilfe dabei und es stellte sich heraus, dass es ungefähr so war:
DarkLight = SableData << select where(:NewPhase == "new" ) << subset(
Output Table("DarkLight"),
columns(
:Date,
:Phase,
:Name("Time since first dose-[hours]"),
:NewPhase)
);
DarkLight:Date << data type( Character ) << Set Modeling Type( Nominal );
DarkLight << new column("Phase per day", Character, "Nominal", Formula( :Date || "-" || :Phase ) );
DarkLight << new column("High", Numeric, "Continuous", Formula(
Lag( :Name( "Time since first dose-[hours]" ), -1 ))
);
DarkLight:High << delete formula;
DarkLight << new column("Color", Character, "Nominal", set each value("Grey"));
column(DarkLight, "Time since first dose-[hours]") << Set Name("Low");
DarkLight << select where(:Phase == "Light phase") << delete rows;
RQ = SableData << Graph Builder(
Size( 938, 712 ),
Variables(
X( :Name( "Time since first dose-[hours]" ) ),
Y( :RQ ),
Overlay( :Treatment )
),
Elements( Points( X, Y, Legend( 4 ) ) )
);
x axis = Report( RQ )[AxisBox(1)];
For Each Row( DarkLight,
// draw colored regon
Eval( Eval Expr( x axis << Add Ref Line( { Expr( :Low ), Expr( :High ) }, "Solid", Expr( :Color ), , , 0.25 ) ) );
// draw border lines
Eval( Eval Expr( x axis << Add Ref Line( Expr( :Low ), "Solid", "Black" ) ) );
Eval( Eval Expr( x axis << Add Ref Line( Expr( :High ), "Solid", "Black" ) ) );
);
Betreff: Mehrere Referenzlinien auf der X-AchseDas ist ein sehr unterhaltsamer Datensatz, vielen Dank für die Veröffentlichung und Ihre Fragen.
Wenn ich unendlich viel Zeit hätte, würde es noch besser aussehen, wenn die dunklen Phasen eine Intervalllinie wären, die nur ein wenig grau schattiert wäre. Vielleicht kann jemand anderes das aufgreifen und damit laufen?
Betreff: Mehrere Referenzlinien auf der X-AchseWow, vielen Dank für die Erklärung. Das hat durchaus Sinn gemacht und funktioniert auch wunderbar.
Betreff: Mehrere Referenzlinien auf der X-AchseDas zweite Problem, dass die hellen und dunklen Phasenlinien nicht dort angezeigt werden, wo sie erwartet werden, ist auf eine Nichtübereinstimmung zwischen der Achsenvariablen und der Variablen zurückzuführen, die zur Definition des Verlaufs der Linien verwendet wird.
Im Diagramm ist die x-Achse eine Dauer und im benutzerdefinierten Skript basieren die Linien auf der Zeilennummer, sodass der Diagrammersteller die Zeilennummer verwendet und sie über die Zeitdauer darstellt, was einfach nicht funktioniert.
Ich habe der Datentabelle einige Spalten hinzugefügt. Sie ähneln einigen der ursprünglichen Spalten, weisen jedoch einige kleine Änderungen und Formatierungsunterschiede auf.
//if you have the data table open, make it the active table and run this
dt=current data table();
dt<<NEW column=""></NEW>
Der nächste Schritt besteht darin, das benutzerdefinierte Skript im Diagramm zu bearbeiten.
//This script goes into the Custom Script in the graph builder plot
For Each Row( If( Is Missing( :NewPhase ) == 0, V Line( :Time2 ) ) );
For Each Row(
If( Is Missing( :NewPhase ) == 0,
Text( {:Time2, 5 + :step2}, " "||:Phase2 )
)
);
//The, " "||:phase2, inserts a space before the label so that it isn't touching the phase line.
Das Ergebnis ist ein fester Graph wie dieser.

Mit all den Änderungen hat die x-Achse jetzt das Format Tage:Stunden:Minuten und alle hellen und dunklen Phasenlinien werden an der richtigen Stelle angezeigt. Die Phasenbezeichnung ist abgekürzt, damit sie sich nicht überschneidet und den Text nur durcheinander bringt.
Diagrammskript
Graph Builder(
Size( 1455, 290 ),
Show Control Panel( 0 ),
Variables( X( :Time2 ), Y( :Name( "EE-[kcal/h]" ) ), Overlay( :Treatment ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch(
{},
"Time2",
ScaleBox,
{Min( -586333.5 ), Max( 2531060.48337292 ), Interval( "Day" ), Inc( 1 ),
Minor Ticks( 6 ), Label Row( Label Orientation( "Perpendicular" ) )}
),
Dispatch(
{},
"EE-[kcal/h]",
ScaleBox,
{Format( "Best", 12 ), Min( 1.7751677852349 ), Max( 5.7751677852349 ),
Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "Script" ),
For Each Row( If( Is Missing( :NewPhase ) == 0, V Line( :Time2 ) ) );
For Each Row(
If( Is Missing( :NewPhase ) == 0,
Text( {:Time2, 5 + :step2}, " " || :Phase2 )
)
);
), Grid Line Order( 1 ), Reference Line Order( 3 ),
DispatchSeg(
TopSeg( 1 ),
{Set Script(
For Each Row(
If( Is Missing( :NewPhase ) == 0,
V Line( :Time2 )
)
);
For Each Row(
If( Is Missing( :NewPhase ) == 0,
Text( {:Time2, 5 + :step2}, " " || :Phase2 )
)
);
)}
)}
)
)
)Betreff: Mehrere Referenzlinien auf der X-AchseEs sieht so aus, als ob es gut funktioniert, nur nicht wie erwartet, möglicherweise aufgrund eines Ausreißers ...

die Spalte max() der Y-Achsenvariablen liegt über 23. Der Text stimmt also nicht mit dem Rest der Abbildung überein.
Betreff: Mehrere Referenzlinien auf der X-AchseHallo @Byron_JMP
Danke für den Vorschlag.
Ich habe versucht, das von Ihnen beschriebene Setup zu verwenden, und es hat einigermaßen funktioniert. Um den gleichen Prozess durchzuführen, habe ich eine neue Spalte in meiner Datentabelle (NewPhase) erstellt, in der die nicht fehlenden Zeilen zu einer Ereigniszeile führen sollten.
Ich habe die Ausgabe der NewPhase-Spalte ausschließlich auf der Tiernummer mit der höchsten Anzahl an Zeilen basiert, sodass ich nur einen Satz Ereigniszeilen anstelle einer für jedes Tier erhalte:
DataPointsAnimal = SableData << Summary(
Group( :Animal No. ),
N( :Phase ),
Freq( "None" ),
Weight( "None" ));
DataPointsAnimalSorted = DataPointsAnimal << Sort( By( :N Rows ), Order( Descending ) );
Close( DataPointsAnimal, No Save );
AnimalVar = DataPointsAnimalSorted:Animal No.[1];
SableData << New column("NewPhase", Formula(If( :Animal No. == AnimalVar,
If( :Phase == Lag( :Phase, 1 ),
.,
"new"
),
.
)));Ich habe dann die Grafik mit Ihren Eingaben erstellt
Graph Builder(
Size( 924, 695 ),
Variables(
X( :Name( "Time since first dose-[hours]" ) ),
Y( :Name( "EE-[kcal/h]" ) ),
Overlay( :Treatment )
),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "Script" ),
For Each Row( If( Is Missing( :NewPhase ) == 0, V Line( Row() ) ) );
For Each Row(
If( Is Missing( :NewPhase ) == 0,
Text(
Right Justified,
{Row(), Col Maximum( :Name( "EE-[kcal/h]" ) ) * 1.2},
:Phase
)
)
);
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);Aber aus irgendeinem Grund enthält es nur eine begrenzte Anzahl von Zeilen und überhaupt keinen Text.
Was mache ich falsch?
Betreff: Mehrere Referenzlinien auf der X-AchseIch habe Spalten verwendet, um zu definieren, wann Referenzlinien hinzugefügt werden sollen. Ich nehme an, dass es genauso einfach wäre, auch Bereiche hinzuzufügen.
Hier sind einige Hinweise, die nützlich sein könnten: Ereignislinien und Kommentare zu Kontrollkarten