Créez un graphique à barres horizontales chronologique avec des catégories variables au fil du tempsSalut tout le monde,
J'ai un tableau de données avec un tas d'unités qui appartiennent à différentes catégories pour différentes périodes de temps.Cet ensemble de données est défini dans le tableau de données comme ici : Il y a quatre colonnes de données : (i) l'identifiant de l'unité (un nombre discret), (ii) la date de début, (iii) la date de fin et (iv) la catégorie.La colonne Catégorie répertorie les catégories dans lesquelles l'unité appartient entre l'heure de début et l'heure de fin.Une unité donnée peut avoir plusieurs lignes de données correspondant à différentes périodes.Le tableau de données est tel que ci-joint.
J'essaie de créer un graphique – avec l'axe X comme temps, l'axe Y comme unité, et pour chaque unité, j'ai besoin d'un graphique à barres horizontales qui montre la catégorie par une couleur pour la période de temps donnée.Je joins un croquis graphique pour montrer à quoi devrait ressembler le graphique.Le croquis est destiné à guider mon idée du graphique.
J'ai fait de mon mieux, mais je n'ai pas pu obtenir ce que je cherchais.J'apprécie votre aide à ce sujet.Soit via un générateur de graphiques, soit via un script JSL, c'est très bien.J'utilise JMP 16 pro.
Exploration et visualisation des donnéesRe : Créer un graphique à barres horizontales chronologique avec des catégories variables au fil du tempsVoici le début d'un script que vous devriez pouvoir développer.J'ai exécuté le module complémentaire Gantt, qui ne permet pas plusieurs plages par ligne, et j'ai ajouté certains éléments au script qui font ce que vous voulez.

Names Default To Here( 1 );
dt = Current Data Table();
gb = Graph Builder(
Size( 1121, 626 ),
Show Control Panel( 0 ),
Variables(
X( :Start Date ),
X( :End Date, Position( 1 ) ),
Y( :Unit/*, Order By( :Start Date, Descending, Order Statistic( "Mean" ) )*/ )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 32 ), Bar Style( "Range" ) ) ),
SendToReport(
Dispatch(
{},
"Start Date",
ScaleBox,
{Min( 3790824458.85 ), Max( 3734876513.055 ), Interval( "Week" ), Inc( 1 ), Minor Ticks( 0 ),
Label Row( Label Orientation( "Angled" ) )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
32,
Level Name( 0, "Span of Task", Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) ),
Properties( 0, {Fill Color( 2 )}, Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) )
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Gantt Chart" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "Date" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Tasks" )} )
)
);
// set axis values
offset = (Col Max( :end date ) - Col Min( :end date )) / 20;
gbr = gb << report;
gbr["Graph Builder", AxisBox( 1 )] << Min( Col Min( :start date ) - offset );
gbr["Graph Builder", AxisBox( 1 )] << Max( Col Max( :end date ) + offset );
// Add the display
gbr["Graph Builder", FrameBox( 1 )] << Add Graphics Script(
// Get Category values
Summarize( dt, catGroups = by( :Category ) );
For Each Row(
Fill Color( Contains( catGroups, :category ) + 2 );
Rect( :Start Date, Num( :unit ) - .9, :End Date, Num( :unit ) - 1.1, fill = 1 );
);
)
;
Re : Créer un graphique à barres horizontales chronologique avec des catégories variables au fil du tempsMerci beaucoup!Votre solution correspond presque exactement à ce que je cherchais.Je n'ai pas pu comprendre complètement comment vous avez manipulé les données pour obtenir des barres de couleurs différentes pour chaque période.Voici 2 questions de votre script :
1. Comment puis-je afficher la légende de chaque catégorie ?en haut à droite ? - comme les valeurs A,B,C,D,E etc dans le tableau ?Est-il également possible de les afficher au-dessus ou à l'intérieur de chaque barre de couleur pour chaque unité ?
2. Je vois des espaces rectangulaires de couleur blanche derrière les barres de couleur rouge.De quoi s’agit-il et ne puis-je pas les afficher dans le graphique ?
J'apprécie votre aide pour affiner cela davantage.Merci beaucoup!
Re : Créer un graphique à barres horizontales chronologique avec des catégories variables au fil du tempsJMP ne dispose pas de graphique intégré pour produire ce que vous voulez.Cependant, il a la possibilité de modifier les graphiques par défaut pour obtenir ce que vous souhaitez.Ainsi, le JSL que j'ai fourni auparavant, auquel j'ai ajouté plus d'annotations et répertorié ci-dessous, utilise la plate-forme Graph Builder pour créer le formulaire général pour le graphique requis, mais le script y ajoute ensuite des graphiques, qui fournissent les résultats souhaités, et supprime les résultats d'origine.Dans ma première liste du script, je viens de changer les barres produites par le GB d'origine, pour qu'elles soient affichées en blanc.Cependant, j'ai modifié cela pour supprimer simplement les barres d'origine.Les barres originales correspondent à ce que vous voyez en arrière-plan du graphique.
Concernant la Légende, il faut la créer.Vous devez relever ce défi.Tout d’abord, vous devez étudier le script actuel.Réa
Names Default To Here( 1 );
dt = Current Data Table();
// The Graph Builder Platform currently does not have the capability to create the
// needed Gantt like chart. The main issue is that it does not apppear that Graph
// Builder can display more than one Range Bar on a given line. If more than one
// range is input, then Graph Builder averages the start values and then averages
// the end values, and creates a range bar with the averaged values.
// However, Graph Builder does create a display window with the correct Axes etc.
// So the JSL below runs the Graph Builder Platform, and then adds the Gantt like
// bars, and then finally, deletes the original bars that Graph Builder created.
gb = Graph Builder(
Size( 1121, 626 ),
Show Control Panel( 0 ),
Variables(
X( :Start Date ),
X( :End Date, Position( 1 ) ),
Y( :Unit )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 32 ), Bar Style( "Range" ) ) ),
SendToReport(
Dispatch(
{},
"Start Date",
ScaleBox,
{Min( 3790824458.85 ), Max( 3734876513.055 ), Interval( "Week" ), Inc( 1 ), Minor Ticks( 0 ),
Label Row( Label Orientation( "Angled" ) )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
32,
Level Name( 0, "Span of Task", Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) )
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Gantt Chart" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "Date" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Tasks" )} )
)
);
// set axis values of the graph to make sure the complete date range is displayed
// Set the min date displayed to the earliest date - 5% of the overall range
// Set the max date displayed to the latest date + 5% of the overall range
offset = (Col Max( :end date ) - Col Min( :end date )) / 20;
gbr = gb << report;
gbr["Graph Builder", AxisBox( 1 )] << Min( Col Min( :start date ) - offset );
gbr["Graph Builder", AxisBox( 1 )] << Max( Col Max( :end date ) + offset );
// Add the color bars to the display
gbr["Graph Builder", FrameBox( 1 )] << Add Graphics Script(
// Get Category values
Summarize( dt, catGroups = by( :Category ) );
// Loop through each row in the data table and draw a filled rectangle on the
// display
For Each Row(
Fill Color( Contains( catGroups, :category ) + 2 );
Rect( :Start Date, Num( :unit ) - .9, :End Date, Num( :unit ) - 1.1, fill = 1 );
);
);
// Delete the bars created by Graph Builder
theBarSeg = gbr["Graph Builder", FrameBox( 1 )] << find seg( bar seg);
theBarSeg << delete;
d le Guide de script et familiarisez-vous avec l'Index de script.Vous pourrez alors vous lancer dans la construction de la légende.