我正在创建一个C#WinForms应用程序,该应用程序使用WinForms折线图控件从SQL服务器显示几乎实时的,基于时间的(~5s刷新率)数据。在图表上获取和插入数据工作得很好,这只是我遇到问题的格式。 X轴包含每个点的DateTime,并设置为在X轴上显示日期。
我遇到的问题是X轴标签没有在图表中均匀显示。我能够得到我想要的轴标签数量,但它们并不总是在轴上的相同位置。
理想情况下,我希望能够设置x轴标签的数量,在图表的每一端都有一个标签,然后其余的标签在图表的其余部分均匀分布。然后,每次将新数据添加到图表时,标签都会保留在完全相同的位置,只需更新标签文本。
这是两张图片,应该清楚我要追究的是什么。
第一张照片是16:10:00到16:11:00范围内的数据。
这就是我想要的任何开始/结束日期:
第二张图显示了当我添加5秒的新数据并删除5秒旧数据时会发生什么。
使用新数据刷新后的图表:
以下是我用于x轴格式化的代码片段。
chart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;
chart.ChartAreas[0].AxisX.Interval = timeDiff.TotalSeconds / numXTicks;
chart.ChartAreas[0].AxisX.Minimum = timeMin.ToOADate();
chart.ChartAreas[0].AxisX.Maximum = timeMax.ToOADate();
chart.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd" + Environment.NewLine + "HH:mm:ss";
chart.ChartAreas[0].AxisX.LabelStyle.IsEndLabelVisible = true;
chart.ChartAreas[0].AxisX.IsMarginVisible = true;
感谢您的帮助。长时间潜伏和第一次海报。
答案 0 :(得分:0)
对于任何可能感到好奇的人,我通过将IntervalType设置为MilliSeconds找到了合理的解决方法。
chart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Milliseconds;
chart.ChartAreas[0].AxisX.Interval = unixDiff.TotalMilliseconds / numXTicks;
虽然这并不一定能够固定x轴标签,但是通过使Interval在图表中均匀地相乘并且不会产生一小部分间隔,标签将在整个图表中整齐地标记。