繁体   English   中英

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: 从此答案中提取了示例代码,并进行了一些修改。在.NET 4.5.1和3.5中进行了测试

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

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

尽管问题已解决,但对我来说仍然没有意义。 为什么要在日期轴上而不是数字轴上呢? 听起来更像是个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM