Graph Builder: Berechnen von Achsenmaximum, -minimum und -bereich für die dynamische Platzierung von AnmerkungenHallo JMP-Community,
Ich habe ein Skript, das Daten aus einer Reihe von Spalten in einer Tabelle gruppiert basierend auf einer Variablen (:VAR_CAT) darstellt und 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).
Konkret habe ich verschiedene Ansätze ausprobiert, darunter:
- YMax = Col Mean (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. Dies wären die richtigen Codezeilen, um das tatsächliche Maximum der Y-Achse für die gruppierten Daten dynamisch zu berechnen Kategorien überlagern (ich weiß, dass die Option „Nach“ nur innerhalb einer Struktur „Für jede Zeile“ funktioniert)?
- YMAX = report (gb)[Axis Box (2)] << Get Max; Dadurch wird das tatsächliche Maximum für die GB-Y-Achse abgerufen. Dieser Ansatz würde mich jedoch dazu zwingen, den Ausdruck ein zweites Mal auszuwerten, was weder effizient noch 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;
); Betreff: Graph Builder: Berechnung von Achsenmaximum, -minimum und -bereich 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;
(Aus Hilfe > Skripting-Index)
Betreff: Graph Builder: Berechnung von Achsenmaximum, -minimum und -bereich für die dynamische Platzierung von AnmerkungenSie können das Skript für das Achsenfeld abrufen und dann die Argumente für die Einstellungen Min() und Max() 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 );
Betreff: Graph Builder: Berechnung von Achsenmaximum, -minimum und -bereich für die dynamische Platzierung von AnmerkungenHallo,
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 das Y-Achsen-Maximum zu berechnen oder aus GB zu extrahieren, um den dynamischen Textskriptinhalt genau im Diagramm zu platzieren.
Vielleicht wollten Sie vorschlagen, dass ich ein Beschriftungsfeld anstelle von direktem Textskript 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 aus einem Beschriftungsfeld dynamisch zu ersetzen (bitte korrigieren Sie mich, wenn ich falsch liege).
Ich danke Ihnen für Ihre Hilfe.
Aufrichtig,
TSBetreff: Graph Builder: Berechnung von Achsenmaximum, -minimum und -bereich für die dynamische Platzierung von AnmerkungenVersuchen Sie, eines davon zur Elementliste des Graph Builders 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 mit der rechten Maustaste in den Graph Builder klicken und ein Beschriftungsfeld hinzufügen. Ändern Sie dann in der Liste auf der linken Seite die zusammenfassenden Statistiken nach Bedarf und ändern Sie die Variablen, die für die Berechnung verwendet werden.