我试图在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;
}
}
- 编辑 -
请求包含数据的图表:http://i.imgur.com/64X3SNy.png
答案 0 :(得分:0)
堆积条形图会将所有系列叠加在一起,为此,它需要 每个系列的所有x值(*)的数据点。因此,图表中的差距来自数据点的差距。
要获得您可能想要的结果:
您需要填写值为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来填补空白。
(*)请注意,x
和y
会在条形图中以可视方式切换,因此此处的x-axis
垂直!