【问题标题】:All series data are equal highcharts所有系列数据都是相等的highcharts
【发布时间】:2014-03-28 08:01:46
【问题描述】:

我有更新传感器的功能。想法很简单,我从传感器(1 个传感器 = 1 条线)添加新点,并在附加后更新图表。但是出了点问题,所有系列都等于自己

seriesArr - 只是传感器数组,例如 {"sensorId1", sensorId2 等}

chartObj - 图表对象,如图表 1:{ chart: highcharts, seriesArr: seriesArr }

简单解释:

chartObject.chart.series[0].points = chartObject.chart.series[1].points = chartObject.chart.series[2].points = etc

我的代码:

 updateAllCharts: function() {
        var allCharts = this.charts;
        console.log('charts');
        for (var chart in allCharts) {
            var chartObject = allCharts[chart];
            for (var i = 0; i < chartObject.seriesArr.length; i++) {
                var elemId = chartObject.seriesArr[i][0];
                var val = this.sensors[elemId].get('value');
                console.log(val);
                if (val === undefined) { // if sensor cant get data
                    continue;
                }
                var now = new Date;
                var x = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),
                    now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
                var y = parseFloat(val);
                chartObject.chart.series[i].addPoint([x, y], false, false);
                console.log(x, y);
                console.log(chartObject.chart.series[i].data);
            }

        }
        for (var chart in allCharts) {
            var chartObject = allCharts[chart];
            chartObject.chart.redraw();
        }

    }

屏幕:

更新:

ProcessedDataX 和 Y 数组正在改变,但是点数组有问题,我总是得到一些奇怪的(可能是缓存的)点。见鬼。

游乐场

如果你想玩,我在这里设置了 jsfiddle,但实际上它可能不起作用。无法使用 setInterval 向 highchart 对象添加点。

JSFIDDLE

更新2:

实际上它在 jsfiddle 中运行良好,但我不知道 wtf 在我的项目中正在进行。

更新3:

发现,相同的最后一点添加到每个系列。例如, series[i].lastPoints = series[n] ,其中 n = 上次迭代。

【问题讨论】:

  • 顺便说一句。系列的 DataMax 和 DataMin 属性不同。点数组完全相等

标签: javascript jquery highcharts


【解决方案1】:

只有在我每次添加每个点后都重新绘制时才有效。太糟糕的解决方案,太糟糕了。

只需在Point对象后面的参数中输入true

chartObject.chart.series[z].addPoint(Point, true, false);

【讨论】:

    【解决方案2】:

    对所有chart.redraw()你需要设置isDirty标志

    所以尝试使用这段代码:

    for (var chart in allCharts) {
            var chartObject = allCharts[chart];
            chartObject.yAxis[0].isDirty = true;
            chartObject.chart.redraw();
    }
    

    【讨论】:

    • 对不起,它不起作用。 ;( 仅当我在添加每个点后将 true 设置为重绘时才有效
    • 正如我在 jsfiddle 上看到的那样,它工作正常,那么如何将您的示例复制为现场演示?
    • 我明白 :) 但我需要时间来构建另一个小提琴,因为我使用骨干、下划线、要求等框架,并且可能存在更新每个点的逻辑问题。
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2023-04-09
    • 2013-06-06
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多