Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresJe ne sais pas exactement ce que vous essayez, mais est-ce que quelque chose comme ça fonctionnerait?
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]);
);
);Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresJe n'utilise généralement pas de variables dans les scripts graphiques à moins qu'elles ne soient entièrement générées en interne dans la boîte de cadre. Voici un exemple de ma démarche.
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]
)
)
);Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresVous pouvez boucler sur le résultat de retour de l'original Graphique de variabilité( Par( ... ) ) commande:
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
)
)
)
) )
);Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresSalut Marc, merci pour ta réponse ! Je me demandais quelle est la valeur transmise de "aaa" dans H Line() et Expr(), je ne la vois nulle part, donc je suis curieux de savoir ce que cela fait? Merci!
Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresSalut Vince,
Merci pour la réponse, je vois que vous avez 62,5 codés en dur, mais savez-vous comment vous adapteriez cela pour qu'il soit dynamique pour être la valeur dans :wt ?
Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresLa première expression n'est qu'un modèle. L'expression 'aaa' est un espace réservé pour la substitution. Il n'est jamais évalué. Le Substitute() recherche Expr( aaa ) et substitue la valeur.
Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresJe vois, merci pour l'explication. Juste par curiosité, jmp n'évalue-t-il pas d'abord les valeurs à l'intérieur d'une fonction. J'ai eu des problèmes avec cela dans le passé, mais je n'ai pas été en mesure de comprendre quoi rechercher pour comprendre le comportement provenant d'un arrière-plan python. Dans ma tête, H Line devrait simplement obtenir avg[i] plutôt que d'avoir à remplacer la valeur mais j'obtiens une erreur.
"indice invalide (doit être un nombre ou une liste de nombres) dans l'accès ou l'évaluation de '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] );
);
),
)
);J'apprécie l'aide et toute explication, merci!
Re : Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs cadresLes expressions sont une fonctionnalité puissante du langage de script JMP. Je recommande la lecture du Documentation se familiariser avec leur fonctionnement et leur utilisation potentielle.
Voici la bonne façon d'utiliser votre dernière approche :
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] ) );
);
);
)
);
Comment ajouter dynamiquement un script graphique à un graphique de variabilité avec plusieurs zones de cadreSalut tout le monde,
J'ai donc un graphique de variabilité divisé par un regroupement "PAR", j'ai posé cette question dans https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722 dans lequel je comprends comment le script graphique a ajouté les lignes respectives en fonction des valeurs des tableaux de données. J'essayais d'adapter cette méthode au tableau de variabilité avec plus de framebox et je n'arrive pas à comprendre comment le faire. Pour l'instant, je suppose qu'il faut mettre chaque By dans une boucle for et ajouter les graphiques à la framebox respective de manière itérative, mais je ne sais pas comment procéder car je ne sais pas comment accéder à une framebox de manière itérative. Toute aide serait appréciée. Merci!
Veuillez utiliser le rpt ci-dessous et éventuellement ajouter une boucle for afin que
//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
)
)
)
)
)Mélange et nettoyage des données