Comment ajouter des lignes horizontales dynamiques avec un axe y partagé dans un graphique de variabilité avec un axe x regroupé avec des valeurs de répétition de différents N ?Salut tout le monde,
Je voulais créer un nouveau fil de discussion pour me différencier en fonction de mon message précédent : https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among /mp/622722 . La même idée doit être appliquée là où je voudrais une ligne horizontale dynamique sur un graphique de variabilité, mais contrairement à la solution précédente qui utilise un tableau associatif car il y a une valeur par x, ce cas a potentiellement plusieurs valeurs par groupe x dans lequel le graphique basé sur N par x ne fonctionne pas car le N est divisé entre les conditions et doit être dessiné comme tel. C'est là que j'ai du mal à comprendre comment faire cela et j'apprécierais que quelqu'un avec plus d'expérience en matière de script graphique m'aide si possible. Vous trouverez ci-dessous le résultat souhaité avec des lignes dessinées à la main par exemple et le code pour générer le graphique est également ci-dessous.
Dans l'exemple ci-dessous, Toyota est désormais réparti entre : Protection dans laquelle il y a N = 8 et N = 3 et de même Ford est N = 11 et N = 3 pour les groupements et je voudrais m'assurer que les groupes Toyota et les groupes Ford entre autres, ont une ligne horizontale avec la valeur de Max(:Wt) comme indiqué par les lignes rouges et bleues et tous les autres ont une ligne tout aussi unique comme le montrent les lignes violettes. Toute idée sur la façon d’y parvenir serait fantastique. Au bas de l'article, le code donné par @ErraticAttack est publié comme un merveilleux modèle de regroupement et de représentation graphique, mais comme il s'agit d'un tableau associatif, il dirait que Toyota est N : 8+3 = 11 et de même Ford est 11+3=14. large et représentez mal les plages car elles sont maintenant divisées. 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :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")),
);Le code de @ErraticAttack pour répondre à ma question précédente.
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 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
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 << 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
)
)
)
) )Merci, j'apprécie vraiment toute aide !
Automatisation et scriptsAnalyse et modélisation des données de baseExploration et visualisation des donnéesPersonnalisation de masseles fenêtresRe : Comment ajouter des lignes horizontales dynamiques avec un axe y partagé dans un graphique de variabilité avec un axe x regroupé avec des valeurs de répétition de différents N ?Merci Jim!
Re : Comment ajouter des lignes horizontales dynamiques avec un axe y partagé dans un graphique de variabilité avec un axe x regroupé avec des valeurs de répétition de différents N ?À la ligne 37, vous devez changer de
fb = Report(varchart)[i][FrameBox(1)];
à
fb = Report( varchart[i] )[FrameBox( 1 )];
Re : Comment ajouter des lignes horizontales dynamiques avec un axe y partagé dans un graphique de variabilité avec un axe x regroupé avec des valeurs de répétition de différents N ?Salut @jthi ,
Merci pour la solution, il existe une réponse assez élégante. Comme vous l'avez mentionné, ce n'est que pour un seul Framebox et j'aimerais idéalement que cela fonctionne pour les deux framebox générés par le graphique de variabilité. J'ai adapté votre code à cela, mais je ne parviens pas à faire apparaître les lignes horizontales pour les deux. Si vous pouviez voir l'erreur et savoir comment s'y prendre, ce serait fantastique. Merci!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);Re : Comment ajouter des lignes horizontales dynamiques avec un axe y partagé dans un graphique de variabilité avec un axe x regroupé avec des valeurs de répétition de différents N ?Une option assez simple consiste à créer une nouvelle colonne pour votre groupe.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :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(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
Notez que cet exemple n'a qu'un seul framebox car les autres D/P sont supprimés