Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtIch bin mir nicht sicher, was genau Sie versuchen, aber würde so etwas funktionieren?
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart(0) );
summarize(dt, ages = by(:age));
var_rpt = var_chart << Report(); // this should just give a list of outlineboxes
for(i=1, i<=nitems(var_rpt), i++,
olb = var_rpt[i];
framebox = olb[FrameBox(1)];
framebox << Add Graphics Script(
Transparency( 0.5 );
Pen Color( "blue" );
Line([0,100], [62.5, 62.5]);
);
);Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtIch verwende im Allgemeinen keine Variablen in Grafikskripten, es sei denn, sie werden vollständig intern für die Framebox generiert. Hier ist ein Beispiel meiner Vorgehensweise.
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over list and add script using H Line() with literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Substitute(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( aaa );
);
),
Expr( aaa ), avg[i]
)
)
);Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtSie können das Rückgabeergebnis vom Original überschleifen Variabilitätsdiagramm( By( ... ) ) Befehl:
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P"), :Protection ),
);
//find groupings:
subt = dt << Summary( Group( :"D/P"n, :Protection ), Link to Original Data Table( 0 ) );
dps = subt:"D/P"n << Get Values;
protections = subt:protection << Get Values;
Close( subt, No Save );
For( t = 1, t <= N Items( dps ), t++,
Eval( eval Expr(
rows = dt << Get Rows Where( :NAME("D/P") == Expr( dps[t] ) & :Protection == Expr( protections[t] ) );
) );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt[t] << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )
);Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtHallo Markus, danke für deine Antwort! Ich habe mich gefragt, was der übergebene Wert von "aaa" in H Line() und Expr() ist, ich sehe es nirgendwo zugewiesen, also bin ich neugierig, was das bewirkt? Danke schön!
Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtHallo Vince,
Danke für die Antwort, ich sehe, dass Sie 62.5 fest codiert haben, aber wissen Sie, wie Sie das anpassen würden, um dynamisch zu sein, um der Wert in :wt zu sein?
Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtDer erste Ausdruck ist nur eine Vorlage. Der Ausdruck „aaa“ ist ein Platzhalter für die Substitution. Es wird nie ausgewertet. Substitute() sucht nach Expr( aaa ) und ersetzt den Wert.
Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtverstehe, danke für die Erklärung. Nur aus Neugier wertet jmp nicht zuerst Werte innerhalb einer Funktion aus. Ich hatte in der Vergangenheit Probleme damit, konnte aber nicht herausfinden, wonach ich suchen muss, um das Verhalten zu verstehen, das von einem Python-Hintergrund stammt. In meinem Kopf sollte H Line nur avg[i] erhalten, anstatt den Wert ersetzen zu müssen, aber ich erhalte eine Fehlermeldung.
"Ungültiger Index (muss Zahl oder Liste von Zahlen sein) beim Zugriff oder Auswertung von 'avg[ /*###*/i]' , avg[/*###*/i]"
For( i = 1, i <= N Items( age ), i++,
Eval(
Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( avg[i] );
);
),
)
);Ich schätze die Hilfe und jede Erklärung, danke!
Betreff: Wie man ein Grafikskript dynamisch zu einem Variabilitätsdiagramm mit mehreren Rahmenboxen hinzufügtAusdrücke sind eine leistungsstarke Funktion in der JMP-Skriptsprache. Ich empfehle die Lektüre der Dokumentation um sich mit ihrer Funktionsweise und ihrer Verwendung vertraut zu machen.
Hier ist der richtige Weg, um Ihren letzten Ansatz zu verwenden:
Names Default To Here( 1 );
// open example
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// launch variability chart
var_chart = dt << Variability Chart( Y( :height ), X( :sex ), By( :age ), stddevchart( 0 ) );
// get summary in same order as By groups
Summarize( dt, age = by( :age ), avg = Mean( :height ) );
var_rpt = var_chart << Report;
// iterate over the list and add script using H Line() with the literal argument
For( i = 1, i <= N Items( age ), i++,
Eval(
Eval Expr(
var_rpt[i][FrameBox(1)] << Add Graphics Script(
Pen Color( "Red" ); H Line( Expr( avg[i] ) );
);
);
)
);
So fügen Sie einem Variabilitätsdiagramm mit mehreren Rahmenfeldern dynamisch ein Grafikskript hinzuHallo zusammen,
Ich habe also ein Variabilitätsdiagramm, das durch eine „BY“-Gruppierung unterteilt ist, und habe diese Frage gestellt https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722 in dem ich verstehe, wie das Grafikskript die entsprechenden Zeilen basierend auf den Werten aus den Datentabellen hinzugefügt hat. Ich habe versucht, diese Methode mit mehr Frameboxen an das Variabilitätsdiagramm anzupassen, kann aber nicht herausfinden, wie das geht. Ich vermute derzeit, dass ich jedes By in eine for-Schleife einfügen und die Grafiken iterativ zur jeweiligen Framebox hinzufügen soll, bin mir aber nicht sicher, wie das geht, da ich nicht sicher bin, wie ich iterativ auf eine Framebox zugreifen soll. Jede Hilfe wäre dankbar. Danke!
Bitte verwenden Sie das RPT von unten und fügen Sie möglicherweise eine for-Schleife hinzu
//Potential for loop?<BR /><BR />rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
BY(:Name("D/P"))
);
<BR />//Subset data table by "By" condition to add the correct lines based on the condition.<BR />
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
)
)Datenmischung und -bereinigung