【问题标题】:MS Chart not showing all the series values at same time ( for the same X value)MS 图表未同时显示所有系列值(对于相同的 X 值)
【发布时间】:2014-02-10 04:24:18
【问题描述】:

抱歉,无法在此处找到更适合我的问题的标题。我在我的项目中使用 MS Chart 控件从每秒生成 4 个值的源绘制实时值。 X 轴是生成值的时间,Y 轴是值本身。我正在为每个变量动态添加一个新系列。所有变量都是由用户一个一个手动添加的,然后会为它创建一个系列。

基本部分似乎正在工作,除了图表在不同时间绘制来自不同系列的值,即使这些值是同时生成的。下图显示了确切的问题:

如您所见,底部的列表是我正在绘制的值列表。它显示值及其在 (hh:mm:ss.ms) 处生成的时间

当我绘制图表区域中显示的这些值时,这就是我得到的。查看所有系列的最新值的位置(用红色箭头标记)。最新的值是在不同的时间,即使它们都是同时生成的。每个系列似乎都有一个单独的 X 轴。我预计最新的 Y 值应该绘制在相同的 X 值上,并且应该显示在图表的最右侧。更像是最底部的系列正在显示。这是创建的第一个系列。每次只有第一个创建的系列可以正常工作,而后面的系列由于某种原因会滞后。

Chart, share X axis between different series 看起来与我的问题类似,但没有得到答复。

Chart Multiple series different length generate duplicate x axis 似乎是我遇到的确切问题,但不同之处在于 - 我正在绘制实时图表。添加新数据点以标记点是否为空后,我无法遍历每个系列。这将是很多开销。一些谷歌搜索建议对每个系列使用 InsertEmptyPoints() 以匹配所有 X 轴。 MS Chart 示例代码也解释了使用此方法,但我不确定何时/何时使用此方法。如果我在创建系列之后但在添加数据点之前使用它 - 代码会崩溃。我尝试过这样的事情:

_chart.Series.Add(series);
_chart.DataManipulator.InsertEmptyPoints(250, IntervalType.Milliseconds, name);

我在这里做错了吗?感谢您提供的任何帮助。

【问题讨论】:

    标签: c# mschart


    【解决方案1】:

    我通过添加空点来完成这项工作。我开始用最大可能的数据点填充每个系列。假设我想在开始删除最旧的 (Points[0]) 数据点之前在每个系列中显示 100 个数据点,这样我的图表就会看起来像是从右向左移动。在这种情况下,我将在创建每个系列时添加 100 个空点:

                for (int i = 0; i < 100; i++)
                {
                    series.Points.AddXY(i.ToString(), double.NaN);
                    series.Points[i].AxisLabel = " ";
                }
    

    然后,在添加真实数据的同时,以正常方式进行:

                _chart.Series[index].Points.AddXY(time, YValue);                        
    
               // delete more than max. points. 
               if (_chart.Series[index].Points.Count > MaxTrendPoints - 10) // -10 is adjustment. Got it by trial and error.
                     _chart.Series[index].Points.RemoveAt(0);
    

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2014-05-12
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多