Graphique à barres groupées par variableSalut tout le monde,
Cela peut sembler une question simple, mais je n'ai pas trouvé de moyen de le faire fonctionner.
J'ai effectué un test sur plusieurs échantillons et pour chaque échantillon, le test affiche les pourcentages des trois composants différents qui composent l'échantillon.
J'ai créé un tableau de données avec 4 colonnes : 1 pour le nom de l'échantillon et les 3 autres pour les pourcentages des 3 composants.
J'essaie de créer un graphique à barres groupées comme indiqué dans l'image ci-jointe (faite dans Excel), où les données sont regroupées en 3 groupes différents, correspondant aux 3 composants.
Je sais que je pourrais d'abord essayer d'empiler toutes les colonnes de composants ("Clustering by Variable" décrit ici ); cependant, cela en ferait un tableau très long et difficile à naviguer (j'ai plusieurs types de tests, chacun produisant des composants différents). De plus, j'aurais besoin de 2 tableaux séparés, un pour le format de données d'origine qui est plus facile à naviguer et un autre pour les graphiques à barres groupés.
Je pense à deux méthodes différentes pour contourner ce problème.
1) Pour chaque test, tracez les résultats pour chaque composant côte à côte. Existe-t-il un moyen de les faire partager tous le même axe y?
2) En utilisant la méthode d'empilement de colonnes, existe-t-il un moyen de combiner les deux tables en une seule afin que je puisse avoir un script enregistré dans la table d'origine qui générerait automatiquement les graphiques à barres groupées lorsque je clique dessus ? Je suis conscient que je pourrais enregistrer le script qui génère le tableau empilé, mais j'aurais encore besoin de recréer les graphiques à barres groupés.
Merci!
Re : Diagramme à barres groupées par variableMerci! C'est ce que je me demandais. Ce n'est pas grave, car comme vous l'avez dit, le script de chaque opération est accessible.
Re : Diagramme à barres groupées par variableJim,
Merci de m'avoir guidé à travers votre code - rend les choses très claires maintenant. Question rapide - si je veux ajouter plusieurs opérations à la nouvelle table empilée, je devrai toujours l'appeler avant chaque opération, n'est-ce pas ? Dites, si je veux aussi tracer un histogramme à partir du tableau empilé, j'ajouterai simplement cette ligne suivante ?
dtStack << Distribution( Continuous Distribution( Column( :Data ) ) );
Re : Diagramme à barres groupées par variablePour être clair, il n'existe aucun moyen d'enregistrer toutes vos opérations dans JMP dans un seul script.Vous pouvez enregistrer une macro de cette manière dans Excel mais pas dans JMP.
Au lieu de cela, le JSL de chaque plate-forme que vous exécutez dans JMP est accessible en cliquant sur le petit triangle rouge et en sélectionnant l'une des options Enregistrer le script.
Re : Diagramme à barres groupées par variablePermettez-moi de passer en revue ce que j'ai fait pour produire le script que je vous ai fourni lors de cette discussion, afin d'illustrer ma façon de créer un script.
- Vous n'avez pas fourni de table de données, j'ai donc dû créer mon propre exemple de table de données.
- Puisque je voulais vous fournir ma copie de mon exemple de table de données, j'ai dû décider s'il était préférable de sauvegarder et de charger la table, ou de simplement l'inclure dans le script.Comme il s'agit d'une taille très modeste, j'ai décidé de simplement mettre le script.
- J'ai donc ouvert une fenêtre de script.
- j'ai tapé manuellement
Names Default to Here(1);
Cela devrait normalement être la première instruction de chaque script.Cela garantit que les variables JSL de ce script seront isolées de ce script et n'interféreront pas avec d'autres scripts.
- Je suis ensuite allé à la table de données que j'avais créée, j'ai cliqué sur le triangle rouge dans le panneau de la table et sélectionné "Copier le script de la table".Cela a placé le script qui générera la table telle qu'elle existe actuellement, dans le tampon de collage.
- Je suis ensuite retourné à la fenêtre de script et l'ai collé dans le script juste en dessous de la première ligne
Names Default to Here(1);<BR />
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
J'ai également ajouté dt = devant la définition de la table, ce qui permet de référencer cette table de données par "dt" plutôt que d'avoir une référence plus formelle de "table de données ("exemple")".
- J'ai alors commencé à jouer, de manière interactive avec la table de données et le constructeur de graphes, pour comprendre ce que je devais faire pour produire le graphe que je voulais.Il s'agissait d'une méthodologie itérative, nécessitant plusieurs manipulations de tables de données et exécutions de générateurs de graphiques jusqu'à ce que j'obtienne les résultats souhaités.
- Donc, une fois que j'étais satisfait des résultats, j'ai ensuite regardé ce qu'il fallait pour générer les résultats. Il s'agissait d'une simple manipulation de table consistant à empiler les données, puis d'exécuter un générateur de graphiques sur les données empilées.
- J'avais d'abord besoin d'obtenir le code du script.Ce code est facilement disponible dans le panneau de tableau de la table de données empilées.Si vous faites un clic droit sur le triangle vert devant l'entrée "source" dans le panneau du tableau, vous pouvez sélectionner "Modifier".Cela affichera le JSL qui peut être utilisé pour recréer cette table de données.J'ai sélectionné tout le code et copié dans le tampon de collage, juste après le JSL déjà existant dans la fenêtre de script
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);Notez que j'ai également ajouté un pointeur vers la pile "dtStack =" et remplacé la référence longue à la table de données d'origine par la référence courte de ""dt" ;
- Ensuite, je suis allé à la sortie de Graph Builder et j'ai cliqué sur le triangle rouge et sélectionné "Enregistrer le script ==> Dans le presse-papiers"
- J'ai ensuite collé le Presse-papiers (tampon de collage) dans le script.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);Remarque, j'ai ajouté "dtStack <<" devant l'instruction Graph Builder.C'est le meilleur moyen de s'assurer que Graph Builder s'exécutera sur les données empilées et non sur le code d'origine.
C'est donc le processus utilisé pour créer un script combiné.Comme je suis sûr que vous pouvez l'imaginer, de nombreuses plates-formes différentes peuvent être ajoutées à un tel script, en utilisant la table de données d'origine ("dt") ou la table de données empilées ("dtStack").Vous pouvez également avoir d'autres manipulations de table de données que vous devez ajouter, etc.
Concernant la copie en masse, les scripts que vous avez enregistrés dans une table de données, je ne suis pas conscient de pouvoir le faire, cependant, je n'ai pas eu de problème avec cela moi-même.La plupart du temps, je cherche à construire un script, pas à faire ma propre analyse de données.
Re : Diagramme à barres groupées par variableOui, on dirait que j'ai mal interprété ce que tu voulais dire.
Pouvez-vous en dire plus sur " scripts de manipulation de table et Platform Save Scripts" ?
Une chose que je viens de découvrir, c'est que je pouvais en fait copier l'intégralité du script de la table de données. Donc, cela seul devrait suffire pour ce dont j'ai actuellement besoin. Je dois d'abord enregistrer des rapports individuels dans la table de données en tant que nouveaux scripts, mais je peux maintenant les copier tous en même temps plutôt qu'individuellement.
Re : Diagramme à barres groupées par variableLa méthode JMP consiste simplement à prendre les scripts de chacun des graphiques, ainsi que les manipulations de données et à les placer dans un seul script.
Cela sonne un peu comme si vous pensiez à enregistrer les scripts dans la table de données.Ce n'est pas ce que j'indique.Je suis en train de sauvegarder les scripts de manipulation de table et les scripts de sauvegarde de la plate-forme dans une nouvelle fenêtre de script.
Re : Diagramme à barres groupées par variableJ'ai compris ce que vous dites et c'est exactement ce que j'ai fait - en combinant le script d'empilement de tables et le script Graph Builder.
Je demandais simplement les cas où je dois effectuer plusieurs opérations (par exemple, générer plusieurs graphiques dans le deuxième tableau) plutôt que deux - s'il existe un moyen "d'enregistrer" toutes ces opérations dans un seul script pendant que j'exécute eux. Je ne dis pas que c'est nécessaire, je me demande simplement si une telle fonctionnalité existe dans JMP.
Re : Diagramme à barres groupées par variableLa réponse est oui.
Le JSL que j'ai posté a été principalement écrit par JMP.Chaque plate-forme que vous exécutez et chacune des opérations File==>Tables que vous effectuez feront apparaître le JSL qui régénérera les tables de données ou les affichages qui ont été créés de manière interactive.
Lorsque vous créez une nouvelle table de données par empilement, l'entrée "Source" de la nouvelle table contient le JSL qui créera la table de données.
Pour la plate-forme Graph Builder, si vous allez dans le triangle rouge et sélectionnez "Enregistrer le script", cela fournira un script qui recréera le graphique.
Re : Diagramme à barres groupées par variableMerci!
Je n'ai jamais fait de script dans JMP, mais j'ai pu fusionner le script de pile du script de création de table et de graphique d'origine de la table empilée en un seul avec une petite modification et je l'ai fait fonctionner. Une nouvelle table doit encore être générée mais au moins je n'aurai qu'une seule table à conserver.
On dirait que je vais devoir commencer à apprendre à écrire des scripts dans JMP pour me simplifier la vie.
Par curiosité, existe-t-il une fonction dans JMP qui me permette "d'enregistrer" ce que je fais sur l'interface utilisateur dans un script ?
Re : Diagramme à barres groupées par variableJ'ai pu reproduire votre graphe avec un simple Stack puis un Graph Builder.

Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);