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;
您将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
!