Graph Builder: Berechnung der Achsen Max, Min und Range für die dynamische Platzierung von AnmerkungenHallo JMP-Gemeinde,
Ich habe ein Skript, das Daten aus einer Reihe von Spalten in einer Tabelle darstellt, die basierend auf einer Variablen (: VAR_CAT) gruppiert sind, und das mithilfe von Graph Builder dynamisch Text aus einer anderen Tabelle hinzufügt. Obwohl dieses Skript gut funktioniert, hatte ich einige Schwierigkeiten mit der vertikalen Platzierung des dynamisch hinzugefügten Textes (siehe Skript unten).
Insbesondere habe ich verschiedene Ansätze ausprobiert, darunter:
- YMax = Spaltenmittelwert (YCOL) + (Col Std Dev (YCOL)/sqrt(Col Number(YCOL))); Dies funktioniert jedoch nicht gut genug, da dies den YMAX für die gesamte Spalte und nicht für die durch die Overlay-Variable definierte Teilmenge zurückgibt --> was wären die richtigen Codezeilen, um dynamisch das tatsächliche Y-Achsen-Maximum für die gruppierten Daten zu berechnen in Überlagerungskategorien (ich weiß, dass die Option "By" nur innerhalb einer For Each Row-Struktur funktioniert)?
- YMAX = report (gb)[Axis Box (2)] << Get Max; Dadurch wird das tatsächliche Maximum für die GB-Y-Achse abgerufen, aber dieser Ansatz würde mich dazu zwingen, den Ausdruck ein zweites Mal auszuwerten, was nicht effizient oder elegant erscheint
Names Default to Here (1);
dt1 = Data Table ("DATA_TABLE.JMP");
dt2 = Data Table ("PVALUE_TABLE.JMP");
CList = dt1 << Get Column Names(string);
gbe = Expr (Graph Builder(
Size( 497, 507 ),
Variables(
X( :DURATION ),
Y( _YS_ ),
Overlay( :VAR_CAT ),
Interval( _ES_)
),
Elements( Points( X, Y, Legend( 9 ) ), Line( X, Y, Legend( 11 ) ) ),
SendToReport(
Dispatch(
{},
_LABEL_,
ScaleBox,
{Add Ref Line( 0, "Dotted", "Black", "", 2 )}
),
Dispatch(
{},
"DURATION",
ScaleBox,
{Min( -1.0 ), Max( 16 ), Inc( 2 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
9,
Base( 0, 0, 0, Item ID( "CAT1", 1 ) ),
Base( 1, 0, 0, Item ID( "CAT2", 1 ) )
)}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 6 ), Add Graphics Script(
2,
Description( "Script" ),
Text( Center Justified, {3.8, _TP_}, _TXT1_ );
Text( Center Justified, {13.6, _TP_}, _TXT2_ );
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
)
);
For (i = 5, i <= 96, i++, //96
YCOL = Column (dt1, i);
ECOL = Column (dt1, i+92);
LBL = CList [i];
YMax = Col Mean (YCOL) + (Col Std Dev (YCOL)/sqrt(Col Number(YCOL)));
YMin = Col Mean (YCOL) - (Col Std Dev (YCOL)/sqrt(Col Number(YCOL)));
YRANGE = abs (YMax - Y Min);
If (YRANGE < 1.0,
YMax = YMax + 0.5;
YMin = YMin - 0.3
);
TOPY = YMax-0.1;
PVAL1 = "p VAL " || CHAR(Format(Column(dt2, 2)[i-4], "PValue"));
PVAL2 = "p VAL " || CHAR(Format(Column(dt2, 3)[i-4], "PValue"));
gbx = Substitute (Name Expr (gbe), Expr (_YS_), YCOL,
Expr (_ES_), ECOL,
Expr (_LABEL_), LBL,
Expr (_TP_), TOPY,
Expr (_TXT1_), PVAL1,
Expr (_TXT2_), PVAL2
);
gb = Eval (gbx);
Yaxis = report (gb)[Axis Box (2)];
LocYMin = Yaxis << Get Min;
LocYMax = Yaxis << Get Max;
LocRange = LocYMax - LocYMin;
mytitle = substitute (LBL, "Least Sq Mean LOG2 FC ", "");
report (gb) [OutlineBox (1)] << Set Title (mytitle);
if(abs (LocRange) < 1.0,
Yaxis << Max (LocYMax + 0.5);
Yaxis << Min (LocYMin - 0.3);
Yaxis << Inc (0.2),.);
gb << Journal;
gb << close window;
); Re: Graph Builder: Berechnen der Achsen Max, Min und Range für die dynamische Platzierung von AnmerkungenSie können die Achsenbox auch direkt fragen:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
axisbox = rbiv[axis box( 1 )];
axisbox << Get Max;
(Über Hilfe > Skripting-Index)
Re: Graph Builder: Berechnen der Achsen Max, Min und Range für die dynamische Platzierung von AnmerkungenSie können das Skript für das Achsenfeld abrufen und dann die Argumente für die Min()- und Max()-Einstellungen finden.
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), Fit Line( {Line Color( {212, 73, 88} )} ) );
y_axis_script = Report( biv )[axis box( 1 )] << get script;
/*
y_axis_script will be a list: {Scale( "Linear" ), Format( "Fixed Dec", 12, 0 ), Min( 60 ), Max( 180 ),
Interval( "Numeric" ), Inc( 20 ), Minor Ticks( 0 ), Label Row Nesting( 1 ),
Label Row(
{Automatic Font Size( 0 ), Automatic Tick Marks( 0 ), Inside Ticks( 0 ),
Label Alignment( "Near" ), Label Buffer Scale( 1 ),
Label Orientation( "Horizontal" ), Lax Label Range( 0 ),
Major Grid Line Color( -14145495 ), Minimum Depth( 0 ), Minimum Font Size( 8 ),
Minor Grid Line Color( -15790320 ), Show Major Grid( 0 ), Show Major Labels( 1 ),
Show Major Ticks( 1 ), Show Minor Grid( 0 ), Show Minor Labels( 0 ),
Show Minor Ticks( 1 ), Tick Offset( 0 ), Wrap Lines( 0 )}
)}
*/
//get the arguments for the 3rd and 4th elements of that list
minimum = Arg( y_axis_script[3], 1 );
maximum = Arg( y_axis_script[4], 1 );
Re: Graph Builder: Berechnen der Achsen Max, Min und Range für die dynamische Platzierung von AnmerkungenHi,
Vielen Dank für diesen Vorschlag, aber ich glaube nicht, dass er mein Problem löst. Möglicherweise habe ich mein Problem nicht klar beschrieben: Was ich erreichen möchte, ist, aus den Daten zu berechnen oder das Y-Achsen-Maximum aus GB zu extrahieren, um den Inhalt des dynamischen Textskripts genau im Diagramm zu platzieren.
Vielleicht wollten Sie vorschlagen, dass ich ein Beschriftungsfeld anstelle eines direkten Textskripts verwenden sollte, um meine Diagramme dynamisch zu kommentieren. Wenn dies der Fall ist, bin ich mir nicht sicher, ob es möglich ist, den Textinhalt einer Caption Box dynamisch zu ersetzen (bitte korrigieren Sie mich, wenn ich falsch liege).
Danke für Ihre Hilfe.
Aufrichtig,
TSRe: Graph Builder: Berechnen der Achsen Max, Min und Range für die dynamische Platzierung von AnmerkungenVersuchen Sie, eines davon zur Elementliste des Graph Builder hinzuzufügen:
Beschriftungsfeld ( Y, Legende ( 4 ), Zusammenfassungsstatistik ( "Max" ) )
Also:
gbe = Expr (Graph Builder(
Size( 497, 507 ),
Variables(
X( :DURATION ),
Y( _YS_ ),
Overlay( :VAR_CAT ),
Interval( _ES_)
),
Elements(
Points( X, Y, Legend( 9 ) ),
Line( X, Y, Legend( 11),
Caption Box( Y, Legend( 4 ), Summary Statistic( "Max" ) )<BR /> ) ),<BR />//the rest of your codeSie können dies visuell tun, indem Sie im Graph Builder mit der rechten Maustaste klicken und ein Beschriftungsfeld hinzufügen. Ändern Sie dann in der Liste auf der linken Seite die zusammenfassenden Statistiken so, wie Sie sie benötigen, und ändern Sie die Variablen, die für die Berechnung verwendet werden.