MS Chart控件上的日期时间类型X轴,不显示周末

时间:2016-07-29 09:54:33

标签: c# winforms charts

我在.Net 4中使用MS Chart控件显示4个数据系列,X轴设置为日期时间类型。

将时间间隔设置为天数,图表包含周末,即使数据中没有包含周末日期。

除了一个系列之外的所有系列都有相同的日期点,例外是从最后一个日期开始并持续若干个工作日(不包括周末)的投影线。

如何从所有系列的图表中删除周末(或没有价值的日期)的显示?

这是一个winforms .Net 4.0应用程序。

 foreach (var series in chart2.Series)
   {
       series.ChartType = SeriesChartType.Line;
       series.BorderWidth = 5;
       series.XValueType = ChartValueType.Date;
       // I Tried this to remove weekends but it results in the graph showing a big red X
       series.IsXValueIndexed = true; 
   }

使用代码进行编辑以重现我的问题:

        DateTime dt = DateTime.Now;
        chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Days;

        Series test1 = new Series("Test1");
        test1.XValueType = ChartValueType.Date;
        for (int i = 1; i < 7; i++)
        {
            //skip the weekend
            if (dt.DayOfWeek.ToString() == "Saturday") dt = dt.AddDays(1);
            if (dt.DayOfWeek.ToString() == "Sunday") dt = dt.AddDays(1);

            test1.Points.AddXY(dt.Date, i);
            dt = dt.AddDays(1);
            i++;
        }

        chart1.Series.Add(test1);

        Series test2 = new Series("Test2");
        test1.XValueType = ChartValueType.Date;
        for (int i = 1; i < 7; i++)
        {
            //skip the weekend
            if (dt.DayOfWeek.ToString() == "Saturday") dt = dt.AddDays(1);
            if (dt.DayOfWeek.ToString() == "Sunday") dt = dt.AddDays(1);

            test2.Points.AddXY(dt.Date, i);
            dt = dt.AddDays(1);
            i++;
        }

        chart1.Series.Add(test2);

        foreach (var series in chart1.Series)
        {
            series.ChartType = SeriesChartType.Line;
            series.BorderWidth = 5;
            series.IsXValueIndexed=true;
        }
        chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 45;
        chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;

1 个答案:

答案 0 :(得分:3)

您要将x值添加为DateTime,这是您应该做的。但默认情况下,这意味着所有x值都是按比例放置的位置,正如人们通常希望的那样。

但是您的案例是一个例外,甚至在Series.IsXValueIndexed属性的文档中也提到过:

  

系列中的所有数据点都使用顺序索引,如果是这样的话   属性为true,则数据点将按顺序绘制,   无论其相关的X值如何。这意味着会有   没有&#34;失踪&#34;数据点。

     

例如,假设一系列中有三(3)个数据点   X值为1,2和4.如果此属性为false,则会有一个   标记为&#34; 3&#34;的X轴位置处缺少数据点。但是,如果你   将此属性设置为true,将绘制三个数据点   点1,2和4,顺序,并没有丢失的数据   点。标有&#34; 3&#34;的X轴位置;不会出现在图表上。

     

如果您不想丢失数据点,这很有用   您知道自己没有数据的时间间隔,例如周末

请注意:

  

如果您要显示多个系列且至少有一个系列使用   索引的X值,然后所有系列必须对齐 - 也就是说,有   相同数量的数据点 - 相应的点必须具有   相同的X值。

所以你使用这个属性是正确的,但很可能,你的系列没有完全对齐

要确保他们经常可以使用其中一个Chart.DataManipulator.InsertEmptyPoints重载。不幸的是,它们都使用固定的Interval,而不是模板Series

因此,您需要确保在Series中数据丢失的任何地方添加一个Empty DataPoint。如果数据是数据绑定的,则必须在DataSource

中执行此操作