Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxNon sono sicuro di cosa stai provando esattamente, ma qualcosa del genere funzionerebbe?
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]);
);
);Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxGeneralmente non uso le variabili negli script grafici a meno che non siano generate interamente all'interno del frame box. Ecco un esempio del mio approccio.
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]
)
)
);Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxPuoi ripetere il risultato restituito dall'originale Grafico di variabilità( Per( ... ) ) comando:
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
)
)
)
) )
);Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxCiao Marco, grazie per la tua risposta! Mi chiedevo quale sia il valore passato di "aaa" in H Line () e Expr (), non lo vedo assegnato da nessuna parte, quindi sono curioso di sapere cosa fa? Grazie!
Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxCiao Vince,
Grazie per la risposta, vedo che hai 62.5 hardcoded, ma sai come lo adatteresti per essere dinamico per essere il valore in: wt?
Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxLa prima espressione è solo un modello. L'espressione 'aaa' è un segnaposto per la sostituzione. Non viene mai valutato. Substitute() cerca Expr( aaa ) e sostituisce il valore.
Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxCapisco, grazie per la spiegazione. Solo per curiosità, jmp non valuta prima i valori all'interno di una funzione. Ho avuto problemi con questo in passato, ma non sono riuscito a capire cosa cercare per capire il comportamento proveniente da uno sfondo di pitone. Nella mia testa H Line dovrebbe solo ottenere avg[i] piuttosto che dover sostituire il valore ma ottengo un errore.
"pedice non valido (deve essere un numero o un elenco di numeri) nell'accesso o nella valutazione di '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] );
);
),
)
);Apprezzo l'aiuto e qualsiasi spiegazione, grazie!
Ri: Come aggiungere uno script grafico in modo dinamico a un grafico di variabilità con più frame boxLe espressioni sono una potente funzione del linguaggio di scripting di JMP. Consiglio di leggere il documentazione per acquisire maggiore familiarità con il loro funzionamento e come potrebbero essere utilizzati.
Ecco il modo corretto di utilizzare il tuo ultimo approccio:
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] ) );
);
);
)
);
Come aggiungere dinamicamente uno script grafico a un grafico di variabilità con più riquadri di frameCiao a tutti,
Quindi ho un grafico di variabilità diviso da un raggruppamento "BY", ho posto questa domanda https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722 in cui capisco come lo script grafico ha aggiunto le rispettive righe in base ai valori delle tabelle dati. Stavo cercando di adattare questo metodo al grafico della variabilità con più framebox e non riesco a capire come farlo. La mia ipotesi per ora è di inserire ciascun By in un ciclo for e aggiungere la grafica al rispettivo framebox in modo iterativo, ma sono confuso su come farlo poiché non sono sicuro di come accedere a un framebox in modo iterativo. Qualsiasi aiuto sarebbe apprezzato. Grazie!
Si prega di utilizzare rpt dal basso e potenzialmente aggiungere un ciclo for in modo che
//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
)
)
)
)
)Combinazione e pulizia dei dati