Plusieurs lignes de référence sur l'axe des xSalut,
Pour un projet sur lequel je travaille, j'ai créé un graphique avec le temps sur l'axe des x qui montre une période d'environ 24 heures. Pour illustrer visuellement quand il fait nuit et jour, j'ai ajouté des lignes de référence comme indiqué dans le script ci-dessous et l'image jointe.
Propriétés de la colonne de l'axe des x :
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);
Créer un graphique, ajouter et configurer des lignes de référence :
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"]
));
Mais maintenant, j'ai des données couvrant deux semaines et j'aimerais toujours illustrer visuellement quand c'est le jour et la nuit. Je peux bien sûr les ajouter manuellement mais et copier le script mais je voudrais le faire de manière robuste.
Puis-je en aucune façon ajouter ces propriétés supplémentaires au "Durée depuis la première dose-[heures]" colonne ou est-il possible de créer un tableau de données séparé comprenant toutes les limites et de les insérer dans le tableau de données en une seule fois ?
Merci d'avance.
Frère Julie

Personnalisation de masseIngénierie de la qualité et des procédésRe : Plusieurs lignes de référence sur l'axe des xEn fait, j'ai eu de l'aide avec ça et il s'est avéré quelque chose comme ça:
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" ) ) );
);
Re : Plusieurs lignes de référence sur l'axe des xC'est un ensemble de données très amusant, merci de l'avoir publié et de vos questions.
Si j'avais un temps infini, ce serait encore mieux si les phases sombres étaient une ligne d'intervalle légèrement ombrée de gris. Peut-être que quelqu'un d'autre peut le récupérer et courir avec ?
Re : Plusieurs lignes de référence sur l'axe des xWow merci beaucoup pour l'explication. Cela avait du bon sens et cela fonctionne à merveille aussi.
Re : Plusieurs lignes de référence sur l'axe des xLe deuxième problème avec les lignes de phase claires et sombres qui n'apparaissent pas là où prévu est dû à un décalage entre la variable d'axe et la variable utilisée pour définir où les lignes doivent aller.
Dans le graphique, l'axe des x est une durée et dans le script personnalisé, les lignes sont basées sur le numéro de ligne, donc le générateur de graphiques utilise le numéro de ligne et le trace sur la durée, ce qui ne fonctionne tout simplement pas.
J'ai ajouté quelques colonnes à la table de données, elles sont similaires à certaines des colonnes d'origine, mais avec quelques petits ajustements et différences de formatage.
//if you have the data table open, make it the active table and run this
dt=current data table();
dt<<NEW column=""></NEW>
L'étape suivante consiste à modifier le script personnalisé dans le graphique.
//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.
Le résultat est le graphique fixe, comme celui-ci.

Avec tous les changements, l'axe des x est maintenant au format Jours:Heures:minutes, et toutes les lignes de phase claires et sombres apparaissent au bon endroit. L'étiquette de phase est abrégée afin qu'elle ne se chevauche pas et ne fasse qu'un mélange de texte désordonné.
Scénario graphique
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 )
)
);
)}
)}
)
)
)Re : Plusieurs lignes de référence sur l'axe des xil semble que cela fonctionne bien, mais pas comme prévu, en raison peut-être d'une valeur aberrante ...

la colonne max() de la variable de l'axe Y est supérieure à 23. Ainsi, le texte apparaît hors échelle avec le reste de la figure.
Re : Plusieurs lignes de référence sur l'axe des xSalut @Byron_JMP
Merci pour la suggestion.
J'ai essayé d'utiliser la configuration que vous décrivez et cela a fonctionné dans une certaine mesure. Afin de suivre le même processus, j'ai créé une nouvelle colonne dans ma table de données (NewPhase) où les lignes qui ne manquent pas doivent entraîner une ligne d'événement.
J'ai basé la sortie de la colonne NewPhase uniquement sur le numéro d'animal avec le plus grand nombre de lignes afin que je n'obtienne qu'un seul ensemble de lignes d'événement au lieu d'un pour chaque animal :
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"
),
.
)));J'ai ensuite créé le graphique avec votre entrée
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 )}
)
)
);Mais pour une raison quelconque, il ne comprend qu'un nombre limité de lignes et n'inclut aucun texte.
Qu'est-ce que je fais mal?
Re : Plusieurs lignes de référence sur l'axe des xJ'ai utilisé des colonnes pour définir quand ajouter des lignes de référence. Je suppose qu'il serait tout aussi facile d'ajouter des gammes aussi.
Voici quelques notes qui pourraient être utiles : Lignes d'événements et commentaires sur les cartes de contrôle