У меня есть способ заставить это работать.
Извините за длинный ответ, но я обнаружил, что способ, которым вы пытаетесь реализовать этот ответ, повлияет на то, сработает он или нет.
Вам нужно установить точку на ноль вручную, когда вы добавляете точки. Примечание. Мне не удалось выполнить эту работу, добавив нулевые точки постфактум.
См. следующие примеры и полученные снимки экрана: chart1.Series.Clear(); chart1.Series.Add(новая серия()); chart1.Series.Add(новая серия()); chart1.Series.Add(новая серия()); chart1.Series.Add(новая серия());
foreach (Series s in chart1.Series)
{
s.ChartType = SeriesChartType.StackedColumn;
}
//chart1.Series[0].Points.Add(new DataPoint(0, 0));
chart1.Series[0].Points.Add(new DataPoint(1, 3));
chart1.Series[0].Points.Add(new DataPoint(2, 3));
chart1.Series[0].Points.Add(new DataPoint(3, 3));
chart1.Series[1].Points.Add(new DataPoint(0, 3));
//chart1.Series[1].Points.Add(new DataPoint(1, 0));
chart1.Series[1].Points.Add(new DataPoint(2, 3));
chart1.Series[1].Points.Add(new DataPoint(3, 3));
chart1.Series[2].Points.Add(new DataPoint(0, 3));
chart1.Series[2].Points.Add(new DataPoint(1, 3));
//chart1.Series[2].Points.Add(new DataPoint(2, 0));
chart1.Series[2].Points.Add(new DataPoint(3, 3));
chart1.Series[3].Points.Add(new DataPoint(0, 3));
chart1.Series[3].Points.Add(new DataPoint(1, 3));
chart1.Series[3].Points.Add(new DataPoint(2, 3));
//chart1.Series[3].Points.Add(new DataPoint(3, 0));
chart1.SaveImage("C:\\Before.png", ChartImageFormat.Png);
Изображение «before.png»: ![введите здесь описание изображения](https://i.stack.imgur.com/T2yzU.png)
Теперь удалите комментарии для ряда без точек данных при заданном значении x:
(Примечание! Я обнаружил, что это не работает, если вы добавляете точки с заданным значением x для значений, где вы делаете y = 0 в конце, то есть прямо перед сохранением изображения. Порядок точек в ряду имеет значение. для StackedColumn я никогда не работал с этим типом, за исключением того, что изучал, как ответить на этот вопрос, так что это может быть общеизвестно для пользователей этого типа)
chart1.Series.Clear();
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
chart1.Series.Add(new Series());
foreach (Series s in chart1.Series)
{
s.ChartType = SeriesChartType.StackedColumn;
}
chart1.Series[0].Points.Add(new DataPoint(0, 0));
chart1.Series[0].Points.Add(new DataPoint(1, 3));
chart1.Series[0].Points.Add(new DataPoint(2, 3));
chart1.Series[0].Points.Add(new DataPoint(3, 3));
chart1.Series[1].Points.Add(new DataPoint(0, 3));
chart1.Series[1].Points.Add(new DataPoint(1, 0));
chart1.Series[1].Points.Add(new DataPoint(2, 3));
chart1.Series[1].Points.Add(new DataPoint(3, 3));
chart1.Series[2].Points.Add(new DataPoint(0, 3));
chart1.Series[2].Points.Add(new DataPoint(1, 3));
chart1.Series[2].Points.Add(new DataPoint(2, 0));
chart1.Series[2].Points.Add(new DataPoint(3, 3));
chart1.Series[3].Points.Add(new DataPoint(0, 3));
chart1.Series[3].Points.Add(new DataPoint(1, 3));
chart1.Series[3].Points.Add(new DataPoint(2, 3));
chart1.Series[3].Points.Add(new DataPoint(3, 0));
// If you add the empty points here, it does not seem to work.
// Empty points are as follows, and are already added above in the 'after' example.
// chart1.Series[0].Points.Add(new DataPoint(0, 0));
// chart1.Series[1].Points.Add(new DataPoint(1, 0));
// chart1.Series[2].Points.Add(new DataPoint(2, 0));
// chart1.Series[3].Points.Add(new DataPoint(3, 0));
chart1.SaveImage("C:\\After.png", ChartImageFormat.Png);
Изображение «after.png»: ![введите здесь описание изображения](https://i.stack.imgur.com/byyjZ.png)
Итак, учитывая, что вы не можете добавить нулевые точки постфактум (хотя вы можете их вставить?), вам нужно будет изменить свой код примерно так:
var allPossibleGroups = t.StudentReports;
var groups = t.StudentReports
.Where<StudentReport>(rep => rep.IsComplete && rep.FirstSaveTimestamp.HasValue)
.GroupBy<StudentReport, DateTime>(rep => rep.FirstSaveTimestamp.Value.Date);
bool hasPoints = false;
foreach (var g in allPossibleGroups)
{
if(groups.ContainsKey(g))
{
series.Points.AddXY(g.Key, g.Count());
hasPoints = true;
}
else
{
series.Points.AddXY(g.Key, 0);
}
}
Извините за длинные блоки кода, но пример был необходим, чтобы продемонстрировать, как заставить его работать, не попадая в ловушку добавления пустых точек (где y = 0) в конце, так как это не сработает.
Дай мне знать, если тебе еще понадобится помощь.
person
JHubbard80
schedule
01.08.2011