这是我在这里做的一项非常简单的任务。我需要将两个系列作为StackedColumn和1个Point系列放在一个ChartArea中。下面是代码。 每个系列只有三个DataPoints用于测试目的。
结果图表如下图所示。堆叠柱的宽度看起来很细。如果我在三个月内将Point系列的数据更改为每月1点,则生成的堆叠列宽看起来很好(图2)。此外,如果我使用Column而不是StackedColumn用于s1和s2,则无论Point系列s3中的数据是什么,列宽都将是好的(图3)。
任何人都可以解释这里发生了什么,以及如何解决图1中的问题。
Series s1 = new Series("s1");
s1.ChartType = SeriesChartType.StackedColumn;
//s1.ChartType = SeriesChartType.Column;
s1.XValueType = ChartValueType.Date;
s1.Points.Add(new DataPoint((new DateTime(2016, 1, 1)).ToOADate(), 100));
s1.Points.Add(new DataPoint((new DateTime(2016, 2, 1)).ToOADate(), 100));
s1.Points.Add(new DataPoint((new DateTime(2016, 3, 1)).ToOADate(), 100));
Series s2 = new Series("s2");
s2.ChartType = SeriesChartType.StackedColumn;
//s2.ChartType = SeriesChartType.Column;
s2.XValueType = ChartValueType.Date;
s2.Points.Add(new DataPoint((new DateTime(2016, 1, 1)).ToOADate(), 200));
s2.Points.Add(new DataPoint((new DateTime(2016, 2, 1)).ToOADate(), 200));
s2.Points.Add(new DataPoint((new DateTime(2016, 3, 1)).ToOADate(), 200));
Series s3 = new Series("s3");
s3.ChartType = SeriesChartType.Point;
s3.XValueType = ChartValueType.Date;
s3.Points.Add(new DataPoint((new DateTime(2016, 1, 1)).ToOADate(), 400));
s3.Points.Add(new DataPoint((new DateTime(2016, 1, 4)).ToOADate(), 400));
s3.Points.Add(new DataPoint((new DateTime(2016, 1, 7)).ToOADate(), 400));
//s3.Points.Add(new DataPoint((new DateTime(2016, 1, 1)).ToOADate(), 400));
//s3.Points.Add(new DataPoint((new DateTime(2016, 2, 4)).ToOADate(), 400));
//s3.Points.Add(new DataPoint((new DateTime(2016, 3, 7)).ToOADate(), 400));
cht.Series.Add(s1); cht.Series.Add(s2); cht.Series.Add(s3);
cht.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Months;
cht.ChartAreas[0].AxisX.Interval = 1;
cht.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
cht.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
答案 0 :(得分:1)
堆叠系列必须对齐。否则,数据点将是 渲染不正确。有关详细信息,请参阅Aligning Data。
这是说:
如果两个系列具有相同的编号,则认为它们是对齐的 数据点和相应X值中的相同数据。
自Point
和StackedColumn
系列'没有对齐,列为缺少的列腾出空间。
如果您希望显示的点多于堆叠列,则无法避免这种情况,因为:
系列数量:一个或多个(多个系列堆叠)。
您可以尝试使用第一个覆盖 第二个 ChartArea
,然后添加一个Point系列。见here for two examples!可能需要一些测试来找到设置第二个图表区域及其轴的正确方法。