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));
虽然问题解决了,但对我来说还是没有任何意义。为什么在日期轴而不是数字轴上这样做?听起来更像是一个错误。
我有一个图表,其中 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));
虽然问题解决了,但对我来说还是没有任何意义。为什么在日期轴而不是数字轴上这样做?听起来更像是一个错误。