我在.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;
答案 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
!