Tôi có một cách để thực hiện công việc này.
Xin lỗi vì câu trả lời dài, nhưng tôi thấy cách bạn cố gắng thực hiện câu trả lời này sẽ ảnh hưởng đến nó nếu nó hoạt động hay không.
Bạn cần đặt điểm bằng 0 theo cách thủ công khi bạn thêm điểm. Lưu ý: Tôi không thể thực hiện công việc này bằng cách thêm các điểm không sau sự kiện.
Xem ví dụ bên cạnh và ảnh chụp màn hình kết quả: 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));
chart1.SaveImage("C:\\Before.png", ChartImageFormat.Png);
Ảnh của "before.png":
Bây giờ loại bỏ những ý kiến cho series không có điểm dữ liệu tại một giá trị x cho:
(Lưu ý tôi thấy nó không làm việc nếu bạn thêm các điểm tại một giá trị x đã cho cho các giá trị mà bạn tạo y = 0 ở cuối - aka ngay trước khi tôi lưu hình ảnh. Thứ tự của các điểm trong chuỗi có vẻ quan trọng đối với StackedColumn, tôi chưa bao giờ làm việc với loại này ngoại trừ điều tra cách trả lời câu hỏi này để có thể là kiến thức chung cho người dùng thuộc loại này)
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);
Ảnh của "after.png": (? Mặc dù bạn có thể chèn chúng)
Vì vậy, cho rằng bạn không thể thêm số không điểm sau khi thực tế, bạn sẽ cần phải sửa đổi mã của bạn để một cái gì đó như thế này:
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);
}
}
Xin lỗi vì các khối mã dài, nhưng ví dụ này là cần thiết để chứng minh làm thế nào để làm cho nó hoạt động, mà không rơi vào cái bẫy của việc thêm các điểm trống (trong đó y = 0) ở cuối, vì điều đó sẽ không hoạt động.
Hãy cho tôi biết nếu bạn cần thêm trợ giúp.
+1 cảm ơn các mẫu mã tuyệt vời –