mschart 轴上错位的年份标签

Misplaced year label on mschart axis

我有一个图表,其中 x 轴由日期组成,每年间隔一次。问题是,根据最短日期,是否显示最小标签。检查以下内容:

var s = new Series();
s.ChartType = SeriesChartType.Line;

var d = new DateTime(2013, 04, 01);

s.Points.AddXY(d.AddYears(-1), 3);
s.Points.AddXY(d, 3);
s.Points.AddXY(d.AddYears(1), 2);
s.Points.AddXY(d.AddYears(2), 1);
s.Points.AddXY(d.AddYears(3), 4);

chart1.Series.Clear();
chart1.Series.Add(s);


chart1.Series[0].XValueType = ChartValueType.DateTime;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd";
chart1.ChartAreas[0].AxisX.Interval = 2;
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Years;


chart1.Series[0].XValueType = ChartValueType.DateTime;
DateTime minDate = new DateTime(2011, 01, 01);
DateTime maxDate = new DateTime(2022, 01, 01);
chart1.ChartAreas[0].AxisX.Minimum = minDate.ToOADate();

上面的代码运行时,最小日期没有标签(第一个标签是2012),但是如果你用2012作为最小年份,就会显示。这只发生在大于 1 的间隔上,并且值越大越糟。我不知道为什么会这样。我还尝试为 LabelStyle 设置间隔属性(减去偏移量),但无济于事。

PS:示例代码从 this answer 中提取,并进行了一些修改 在 .NET 4.5.1 和 3.5

上测试

要显示的第一个标签是大于或等于最小值的标签,最小值是间隔的倍数。因此,对于 3 的间隔:[2011,2012] ->2013; [2014,2015]->2016.这样就可以通过一些简单的数学运算动态计算偏移量。

var offset = -(interval - (minYear % interval));

虽然问题解决了,但对我来说还是没有任何意义。为什么在日期轴而不是数字轴上这样做?听起来更像是一个错误。