highcharts 3添加点顺序

highcharts 3添加点顺序,highcharts,Highcharts,在Highcharts 2中,使用series.addPoint(p)添加点很容易,其中该点的x值位于两个现有点的x值之间 示例:假设您想要创建一个图表,其中一个系列包含两个点: var p1 = {x: 100, y: 50}; var p2 = {x: 200, y: 40}; var data = []; data.push(p1); data.push(p1); var c = new Highcharts.Chart({ ...//code omitted type: 'l

在Highcharts 2中,使用
series.addPoint(p)
添加点很容易,其中该点的x值位于两个现有点的x值之间

示例:假设您想要创建一个图表,其中一个系列包含两个点:

var p1 = {x: 100, y: 50};
var p2 = {x: 200, y: 40};

var data = [];
data.push(p1);
data.push(p1);

var c = new Highcharts.Chart({
  ...//code omitted
  type: 'line',
  data: data,
  ...//code omitted

});
在第二版中,您可以通过以下方式调用在这两个版本之间添加点:

var p3 = {x: 150, y: 60};

c.series[0].addPoint(p3, true);
对于“折线”图,highcharts 2将自动确定p3的x值介于p1和p2的x值之间,因此该线将按以下顺序通过点绘制:p1、p3、p2

我们发现,在高图3中,这条线通过点按顺序p1、p2、p3绘制,这意味着它“重新开始”

我准备了以下JSFIDLE示例,这些示例使用随机的x和y值为现有系列增加了50个点:

高图2.1.9:

Highcharts 3.0.0:

这是可以解决的问题,还是我们需要尝试回避这个问题

先谢谢你


H

因此,为了结束这个问题:Highcharts已经确认,自2.2.x以来,逻辑发生了变化


在我们的例子中,只需重新渲染整个图表就足够简单了,但我怀疑
series.setData()
也可能是一个选项。

这里有一个解决方法。这将在手动添加点时按其x值对点进行排序。此事件对象位于图表对象选项块中

events: {
    click: function(e) {
        // find the clicked values and the series
        var series = this.series[DIA.currentSeriesIndex],
            x = parseFloat(e.xAxis[0].value),
            y = parseFloat(e.yAxis[0].value);

        // Add it
        series.addPoint([x, y]);

        if ( series.data.length > 1) {
            // grab last point object in array
            var point = series.data[series.data.length-1];
            // sort the point objects on their x values
            series.data.sort(function (a, b)
            {
                //Compare "a" and "b" and return -1, 0, or 1
                return (a.x - b.x);
            });
            // force a redraw
            point.update();
        }
    }
}

由于xAxis的Highcharts 2.2.x数据必须按升序排序。谢谢Pawel。这有点微不足道,因为2.2.x之前的功能对于我们的一个场景特别有用,但我们应该能够解决它。