如何消除堆叠条中的间隙

时间:2015-04-26 20:23:48

标签: c# charts stackedbarseries

我试图在C#中制作甘特图,我使用的是StackedBar图表类型。该图表的目标是展示"任务"可以安排"机器"的数量。在我的算法中,"任务"之间不应该有自由空间。在图表上。每个"任务"被添加为新系列。在第一个酒吧,它应该像它一样工作,但在其他人的任务"任务"在上一个栏结束后开始。我需要帮助消除这些差距。有些任务需要在两台机器上进行划分,当我这样做的时候,这个任务就像它应该从第二列一样显示出来。从开始。

我试图在堆栈上的某个帖子中添加零DataPoints,但它在我的情况下没有帮助。 (Microsoft chart stacked column chart has gaps

以下是我创建此图表的代码:

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;    
      }
 }

enter image description here

- 编辑 -

请求包含数据的图表:http://i.imgur.com/64X3SNy.png

1 个答案:

答案 0 :(得分:0)

堆积条形图会将所有系列叠加在一起,为此,它需要 每个系列的所有x值(*)的数据点。因此,图表中的差距来自数据点的差距。

要获得您可能想要的结果:

enter image description here

您需要填写值为0的所有缺失点。我在列表daz而不是您的points中使用了一个类items,但您将获得& #39;点&#39; ..:

    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));

根据您的数据结构和来源,您应该在收集数据时执行此操作,或者从零预填充数据结构开始,或者稍后使用一点linq来填补空白。

(*)请注意,xy会在条形图中以可视方式切换,因此此处的x-axis 垂直