如何消除堆积条中的间隙
How to remove gaps in stacked bar
我正在尝试用 C# 制作甘特图,我使用的是 StackedBar 图表类型。此图表的目的是显示如何根据 "machines" 的数量安排 "tasks"。在我的算法中,图表上 "tasks" 之间不应有空闲空间。每个 "task" 都作为新系列添加。在第一个柱上,它按应有的方式工作,但在其他柱上,"task" 在前一个柱上结束后开始。我需要帮助消除这些差距。有些任务需要在两台机器上分配,当我这样做时,这个任务会显示在第二列,从栏的开头开始。
我试图像在堆栈上的某些 post 中建议的那样添加零数据点,但它对我的情况没有帮助。 (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
堆叠条形图会将所有系列相互堆叠,为此它需要 所有 x 值 (*) 每个 的数据点 系列。所以图表中的差距来自数据点的差距。
要获得您可能想要的结果:
您需要用 0 值填充所有缺失的点。我在列表 points
中使用了 class daz
而不是您的 items
,但你会得到 'point'..:[=18=]
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
在这里是 垂直的 !
我正在尝试用 C# 制作甘特图,我使用的是 StackedBar 图表类型。此图表的目的是显示如何根据 "machines" 的数量安排 "tasks"。在我的算法中,图表上 "tasks" 之间不应有空闲空间。每个 "task" 都作为新系列添加。在第一个柱上,它按应有的方式工作,但在其他柱上,"task" 在前一个柱上结束后开始。我需要帮助消除这些差距。有些任务需要在两台机器上分配,当我这样做时,这个任务会显示在第二列,从栏的开头开始。
我试图像在堆栈上的某些 post 中建议的那样添加零数据点,但它对我的情况没有帮助。 (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
堆叠条形图会将所有系列相互堆叠,为此它需要 所有 x 值 (*) 每个 的数据点 系列。所以图表中的差距来自数据点的差距。
要获得您可能想要的结果:
您需要用 0 值填充所有缺失的点。我在列表 points
中使用了 class daz
而不是您的 items
,但你会得到 'point'..:[=18=]
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
在这里是 垂直的 !