【问题标题】:Misplaced year label on mschart axismschart 轴上的年份标签错位
【发布时间】:2015-03-11 18:16:18
【问题描述】:

我有一个图表,其中 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 上测试

【问题讨论】:

  • 可能空间不够?你能选择更紧或更小的字体吗?
  • 如果字体是问题,为什么在使用不同年份时会显示? “2012”和“2011”的字体大小肯定没有显着差异吗?此外,如果标签变得局促,它会自动组织起来,我相信它被称为“智能标签”
  • 其实有。但原因也可能是标签是如何沿轴分布的。你能发布一两张图片吗?
  • 完成。看看这个。我很难相信字体是这里的问题。你还这么认为吗?
  • 不幸的是,我是blocked,因为我看到了这些图像。也许其他人会跳进来。希望障碍很快就会消失..

标签: c# charts label mschart


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多