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

本文关键字:类型 周末 显示 时间 日期 控件 MS | 更新日期: 2023-09-27 17:59:14

我使用.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;

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

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

但您的情况是一个例外,甚至在Series.IsXValueIndexed属性的文档中也提到了这一点:

序列中的所有数据点都使用顺序索引,如果属性为真,则数据点将按顺序绘制,而不管其相关联的X值如何。这意味着没有"丢失"的数据点。

例如,假设一个序列中有三(3)个数据点X值为1、2和4。如果此属性为假,则会出现标记为"3"的X轴位置缺少数据点。但是,如果如果将该属性设置为true,则三个数据点将在点1、2和4,按顺序排列,并且不会有丢失的数据指向标记为"3"的X轴位置将不会出现在图表上。

当您不希望的数据点丢失时,这很有用您知道没有数据的时间间隔,如周末

注意:

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

因此,您使用此属性是正确的,但是,很可能您的系列没有完全对齐。

为了确保它们是经常使用的Chart.DataManipulator.InsertEmptyPoints过载之一。不幸的是,它们都使用固定的Interval,而不是模板Series

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