动态数据显示折线图未更新

Posted

技术标签:

【中文标题】动态数据显示折线图未更新【英文标题】:Dynamic Data Display LineGraph not updating 【发布时间】:2015-06-28 00:03:17 【问题描述】:

我正在尝试将动态数据显示用于我的高级设计项目,但我遇到了困难。

我可以很好地创建图表,但我根本无法更新线条,除非我放大和缩小。

在大多数示例中,他们所要做的就是创建图表,然后当他们操作数据时,图表会自行更新。

以下是我在图表方面使用的主要功能:

    private List<WindDAQ.WindDataPoint> Chart1Data;
    private EnumerableDataSource<WindDAQ.WindDataPoint> Chart1DataSource;

    private void InitializeCharts()
    
        Chart1Data = new List<WindDAQ.WindDataPoint>();
        Chart1DataSource = new EnumerableDataSource<WindDAQ.WindDataPoint>(Chart1Data);
        Chart1DataSource.SetXMapping(x => Chart1XAxis.ConvertToDouble(x.Time));
        Chart1DataSource.SetYMapping(y => Chart1XAxis.ConvertToDouble(y.Lift));
        Chart1.AddLineGraph(Chart1DataSource, Colors.Blue, 2, "Lift");
        Chart1.Viewport.AutoFitToView = true;
    




    private void UpdateChart()
    
        for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
        
            Chart1Data.Add(itsDAQ.getValue());
            if(Chart1Data.Count >= 300)
             Chart1Data.RemoveAt(0); 
        
    

InitializeCharts() 在创建窗口时被调用一次。

UpdateChart() 在定时器事件上被调用。

WindDAQ.WindDataPoint 包含升力、阻力、速度和时间数据。电梯和时间显示为选中状态。

【问题讨论】:

【参考方案1】:

您应该使用 observableCollection 的 AppendAsync 方法。 您只更新用于创建可观察列表的列表,而不是图表的来源。

private void UpdateChart()

    for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
    
        Chart1DataSource.AppendAsync(itsDAQ.getValue());

        if (Chart1DataSource.Collection.Count >= 300) // this part should work in a thread-safe
         
           Chart1DataSource.Collection.RemoveAt(0); // context and with some precaution 
        
    

【讨论】:

以上是关于动态数据显示折线图未更新的主要内容,如果未能解决你的问题,请参考以下文章

Echarts折线图数据动态获得

如何使用websocket在网页上动态示实时数据的折线图

java生成饼状图,条形图,折线图的技术可以动态的显示

WPS如何制作动态折线图?随在WPS里面如何做到折线图自动随数据增加而变化??要写出具体步骤

Extjs 4 动态显示折线图 按秒显示

echarts怎么做实时动态的折线图