Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauSalut tout le monde,
J'essaie de tracer des graphiques (script, JMP 13) avec des lignes de référence pour chaque élément de mon résumé de tableau (graphique du score vs # essai pour chaque nom + grade, puis ajoutez une ligne de référence de 25 et 75 centile du score sur l'axe x) . J'apprécierais tout commentaire
| Nom | Grade | Score | # essayer |
| nom1 | UN | 80 | 2 |
| nom1 | UN | 82 | 3 |
| nom1 | B | 98 | 3 |
| nom1 | C | 86 | 2 |
| nom2 | UN | 88 | 3 |
| nom3 | UN | 90 | 2 |
| nom3 | UN | 88 | 1 |
| nom3 | UN | 94 | 3 |
| nom4 | B | 96 | 2 |
| nom4 | B | 82 | 4 |
| nom4 | UN | 100 | 1 |
| nom4 | C | 92 | 2 |
| nom5 | UN | 84 | 3 |
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauSalut @Tournoiement en haut ,
Je pense que je comprends ce que tu veux. Mais je suis aussi un peu confus : voulez-vous résumer ou simplement représenter graphiquement les 9 graphiques bivariés distincts ?
En travaillant à partir de votre tableau de données d'origine, vous pouvez facilement créer les 9 graphiques si vous effectuez un ajustement bivarié, par exemple :
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
Cela générera vos neuf graphiques que vous aviez coloriés dans votre message précédent.
Ensuite, ce que vous devrez probablement faire est d'utiliser une ou plusieurs boucles For pour générer les lignes quantiles (ou zone ombrée).
Le script pour le premier graphique serait quelque chose comme :
Bivariate(
Y( :Score ),
X( :Name( "# try" ) ),
Where( :Name == "name1" & :Grade == "A" ), // this would be selecting
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 75 ), Max( 100 ), Inc( 5 ), Minor Ticks( 1 ), // this sets the appearance of the y-axis
Add Ref Line( 83, "Solid", "Blue", "25th quantile", 1 ),
Add Ref Line( 95, "Solid", "Blue", "75th quantile", 1 )}
)
)
);En fait, si vous configurez une liste des noms NameList={"Name1", "Name2"...}, ou si vous l'extrayez des éléments de la colonne, vous pouvez avoir un script très court en mettant des boucles For et juste nous référençons l'élément NameList[i]. Ce serait également le cas pour Where(:Name==NameList[i] & Grade == GradeList[i]).
Une autre option serait d'inspecter la structure arborescente de la sortie du premier script que j'ai inclus ci-dessus, puis de référencer AxisBox(i) pour chacun des axes y des 9 graphiques. Les axes y sont tous impairs, donc si vous faites une boucle For, vous devrez faire i++ pour qu'il itère de 1 à 3 à 5 et ainsi de suite dans la boucle.
Il y a de très bonnes choses dans le lien qui @Craige_Hales fourni.
Pour votre problème spécifique, je pense que vous aurez certainement besoin de faire une boucle. Soit cela, soit vous pouvez tout faire manuellement une fois, puis simplement enregistrer le script dans la table de données (probablement en tant que groupe), puis vous pouvez copier/coller cela et l'enregistrer en tant que fichier JSL séparé dans une nouvelle fenêtre de script. Si vous pouvez comprendre comment le faire manuellement, JMP écrira le JSL pour vous, et tout ce que vous avez à faire est de tout rassembler dans un fichier JSL principal qui s'en occupe pour vous. Le seul problème est si vous décidez de changer les noms ou les références de colonne ou des choses comme ça. Si vous le faites, vous devrez commencer à utiliser des variables locales.
J'espère que cela t'aides!,
DS
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauPeut-être quelque chose comme ça
dtBigClass = Open( "$sample_data/big class.jmp" );
dtage = dtBigClass << Summary( Group( :age ) ); // makes a small table of unique ages
ages = dtage[0, 1]; // [12, 13, 14, 15, 16, 17]
Close( dtage, "nosave" ); // table no longer needed
grid = Lineup Box( N Col( 3 ), spacing( 20, 30 ) ); // Horz,Vert extra space between graphs in pixels
For( iAge = 1, iAge <= N Rows( ages ), iAge += 1, // for each age...
dtBigClass << selectwhere( age == ages[iAge] );
dtSubset = dtBigClass << subset( selectedrows( 1 ), linked( 1 ), "invisible" );
// the summary will be a single row with the requested information
dtSummary = dtSubset << Summary( Mean( :height ), Mean( :weight ), Std Dev( :height ), Std Dev( :weight ), Freq( "None" ), Weight( "None" ) );
// grab the values of interest in simpler variable names
heightMean = dtSummary:name( "Mean(height)" )[1]; // row one has the answers
heightStdDev = dtSummary:name( "Std Dev(height)" )[1];
weightMean = dtSummary:name( "Mean(weight)" )[1];
weightStdDev = dtSummary:name( "Std Dev(weight)" )[1];
Close( dtSummary, "nosave" ); // close the work table, no longer needed
// make a graph, attach to a borderbox so it does not open in a window...
bb = Border Box(
dtSubset << Graph Builder(
Size( 400, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ), // don't need a legend
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
// add ref lines. You can get a script like this GraphBuilder script by
// making a graph builder interactively, then using the red triangle->get script.
// below, the numbers in the script have been replaced with the variables above.
SendToReport(
Dispatch(
{},
"height",
ScaleBox,
{Add Ref Line( heightMean, "Dotted", "Red", "", 2 ), Add Ref Line( heightMean + heightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( heightMean - heightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 48.2828947368421 ), Max( 75.8776488919668 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"weight",
ScaleBox,
{Add Ref Line( weightMean, "Dotted", "Red", "", 2 ), Add Ref Line( weightMean + weightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( weightMean - weightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 55.2100840336134 ), Max( 188.127074359155 ), Inc( 20 ), Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 6 ), Transparency( 1 )} ), // make the markers bigger
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Age = " || Char( ages[iAge] ) )} ), // add the age= title
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ) // suppress the Graph Builder title
)
)
);
grid << append( bb ); // add the graph to the grid
); // the iAge loop
dtBigClass << clearRowStates; // undo the final selection
New Window( "the report", V List Box( H Center Box( Text Box( "Big Report", <<SETFONTSIZE></SETFONTSIZE>
Reports grouped in a 3-wide gridReports grouped in a 3-wide gridRapports regroupés dans une grille de 3 largeurs
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauMerci @Craige_Hales pour le lien, mais ma principale difficulté est de savoir comment programmer pour sortir les graphiques individuels car chacun a ses propres lignes de référence, plus clairement, je me demande comment générer des graphiques pour chaque couleur dans ce tableau de données :

Merci!
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauVoici un article connexe : https://community.jmp.com/t5/JSL-Cookbook/Use-Summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauMerci @SDF1 pour votre réponse et désolé de ne pas avoir été très clair. Ici, je voudrais expliquer un peu plus:
tout d'abord, j'essaie d'écrire le script dans une fenêtre de script séparée afin de pouvoir l'exécuter indépendamment, voici la première partie du script où j'essaie d'obtenir le résumé :
Names Default To Here( 1 );
dt = Current Data Table();
Summary = dt << Summary(
Group( :Name, :Grade ),
Median( :Score ),
// other statistics can be added here//
Link to Original Data Table( 0 )
);
la sortie ressemblera à ceci :

Maintenant, ce que je veux vraiment, ce sont les 9 graphiques (Score vs # try) (un pour chaque ligne (ayant des points de données N Rows)), puis utiliser les statistiques de chaque groupe pour les ajouter aux lignes de référence (le tout par script).
Dans votre exemple de graphique, il semble que ce soit pour name1 avec n'importe quelle note.
Merci
Re : Comment tracer un graphique avec des lignes de référence pour chaque élément du résumé du tableauSalut @Tournoiement en haut ,
Je ne suis pas sûr de comprendre entièrement ce que vous voulez faire, mais vous pourriez avoir du mal à tout écrire entièrement. Si vous conservez la table de données pendant un certain temps ou si vous la chargez, vous souhaiterez peut-être effectuer les analyses séparément, puis les enregistrer dans la table de données.
Si vous voulez tout scripter, vous devrez quand même exécuter les analyses pour déterminer les quantiles 25/75, etc.
Lorsque vous dites que vous représentez graphiquement "score vs # essai", voulez-vous dire que lorsque vous faites un "ajustement y par x", ce score est "y" et "# essai" est "x" ?
De plus, lorsque vous dites résumé du tableau, voulez-vous dire que vous trouvez la moyenne du score et #essayez tout en regroupant par nom et par année ? Ou, voulez-vous dire que vous tabulez par nom la note et trouvez la moyenne des valeurs score et #try ?
Vous pouvez cependant le faire de plusieurs manières. J'ai pris votre table et l'ai importée dans JMP, et voici ce que j'ai fait (en supposant que j'y pense de la même manière que vous):
Tabuler par nom (A, B, C sont les # essais), cela aide à obtenir les moyens, mais vous pouvez le scripter séparément si nécessaire.

Avec cela à portée de main, je l'ai représenté graphiquement de différentes manières: ajustement bivarié ou histogramme (l'histogramme a déjà les informations sur le quartile facilement disponibles à partir de la boîte à moustaches). puis vous pouvez ajouter des lignes de référence de manière normale.


Pour écrire tout cela, assurez-vous d'utiliser le bouton rouge pour accéder au script JSL réel afin de générer ce que vous voulez. Mais encore une fois, si vous enregistrez le script dans la table de données, chaque fois que vous ouvrez la table de données, vous pouvez cliquer sur le bouton vert et le relancer rapidement.
J'espère que cela t'aides!,
DS