Comment supprimer les espaces dans les barres empilées

J’essaie de faire un diagramme de Gantt en C #, j’utilise un type de diagramme StackedBar. Le but de ce tableau est de montrer comment des “tâches” peuvent être planifiées sur un nombre de “machines”. Dans mon algorithme, il ne devrait pas y avoir d’espace libre entre les “tâches” du graphique. Chaque “tâche” est ajoutée en tant que nouvelle série. Sur la première barre, cela fonctionne comme il se doit, mais dans d’autres, la “tâche” commence après la barre précédente. J’ai besoin d’aide pour éliminer ces lacunes. Certaines tâches doivent être divisées sur deux machines, et lorsque je le fais, cette tâche s’affiche dans la deuxième colonne, comme il se doit, à partir du début de la barre.

J’essayais d’append zéro DataPoints comme suggéré dans certains posts sur stack, mais cela ne m’a pas aidé. (Le graphique à colonnes empilées de Microsoft chart présente des lacunes )

Voici mon code pour créer ce tableau:

foreach (var item in tasks) { scheduleChart.Series.Add(item.Name); scheduleChart.Series[item.Name].ChartType = SeriesChartType.StackedBar; scheduleChart.Series[item.Name].LabelForeColor = Color.White; } for (int i = 0; i < mcNaugthon.Machines.Count; i++) { foreach (var item in mcNaugthon.Machines[i].Tasks) { scheduleChart.Series[item.Name].Points .Add(new DataPoint(i, item.Time)); scheduleChart.Series[item.Name].Label = item.Name; } } 

entrez la description de l'image ici

— modifier —

Comme demandé graphique avec des données: http://i.imgur.com/64X3SNy.png

Un graphique à barres empilées emstackra toutes les séries les unes sur les autres. Pour ce faire, il attend des points de données pour toutes les valeurs x (*) de chaque série. Les lacunes dans votre graphique proviennent donc des lacunes dans les points de données.

Pour obtenir le résultat que vous voulez probablement:

entrez la description de l'image ici

vous devez renseigner tous les points manquants avec la valeur 0. J’ai utilisé une classe daz dans une liste de points au lieu de vos items , mais vous obtiendrez le “point” ..:

  points.Add(new daz("0", 0, 3)); points.Add(new daz("0", 1, 0)); //<-filler points.Add(new daz("0", 2, 0)); //<-filler points.Add(new daz("1", 0, 7)); points.Add(new daz("1", 1, 0)); //<-filler points.Add(new daz("1", 2, 0)); //<-filler points.Add(new daz("2", 0, 1)); points.Add(new daz("2", 1, 0)); //<-filler points.Add(new daz("2", 2, 0)); //<-filler points.Add(new daz("3", 0, 1)); points.Add(new daz("3", 1, 7)); points.Add(new daz("3", 2, 0)); //<-filler points.Add(new daz("4", 0, 0)); //<-filler points.Add(new daz("4", 1, 3)); points.Add(new daz("4", 2, 0)); //<-filler points.Add(new daz("5", 0, 0)); //<-filler points.Add(new daz("5", 1, 1)); points.Add(new daz("5", 2, 0)); //<-filler points.Add(new daz("6", 0, 0)); //<-filler points.Add(new daz("6", 1, 1)); points.Add(new daz("6", 2, 2)); points.Add(new daz("7", 0, 0)); //<-filler points.Add(new daz("7", 1, 1)); points.Add(new daz("7", 2, 3)); points.Add(new daz("8", 0, 0)); //<-filler points.Add(new daz("8", 1, 0)); //<-filler points.Add(new daz("8", 2, 2)); points.Add(new daz("9", 0, 0)); //<-filler points.Add(new daz("9", 1, 0)); //<-filler points.Add(new daz("9", 2, 3)); 

En fonction de votre structure de données et de votre source, vous devez le faire lors de la collecte des données, ou bien commencer avec une structure de données préremplie à zéro, ou peut-être utiliser un peu de linq pour combler les lacunes ultérieurement.

(*) Notez que x et y sont visuellement changés dans les histogrammes, donc l' x-axis des x-axis est vertical ici!