StackedColumn图表显示奇怪的列宽

时间:2016-10-27 07:07:09

标签: c# winforms charts

这是我在这里做的一项非常简单的任务。我需要将两个系列作为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;

Picture 1

Picture 2

Picture 3

1 个答案:

答案 0 :(得分:1)

根据MSDN on StackedColumn

  

堆叠系列必须对齐。否则,数据点将是   渲染不正确。有关详细信息,请参阅Aligning Data

这是说:

  

如果两个系列具有相同的编号,则认为它们是对齐的   数据点和相应X值中的相同数据。

PointStackedColumn系列'没有对齐,列为缺少的列腾出空间。

如果您希望显示的点多于堆叠列,则无法避免这种情况,因为:

  

系列数量:一个或多个(多个系列堆叠)。

您可以尝试使用第一个覆盖 第二个 ChartArea,然后添加一个Point系列。见here for two examples!可能需要一些测试来找到设置第二个图表区域及其轴的正确方法。