Highcharts错误#15:www.highcharts.com/errors/15

时间:2015-04-29 04:07:14

标签: javascript highcharts

我试图使用雅虎财务数据来生成像这样http://www.highcharts.com/stock/demo/candlestick-and-volume的Highcharts烛台图表。但我不断收到此错误:http://www.highcharts.com/errors/15 Highcharts错误#15

Highcharts期望对数据进行排序

当您尝试创建数据未按升序X顺序排序的折线图或股票图表时,会发生这种情况。出于性能原因,Highcharts不对数据进行排序,而是要求实施者预先对数据进行排序。

我的代码如下。

$(function () {


    $.getJSON('http://websitescraper.heroku.com/?url=http://ichart.finance.yahoo.com/table.csv?s=000338.sz&callback=?', function (csvdata) {
        //console.log(csvdata);
        var arr = csvdata.split('\n').slice(1);

        var data = [];

        for (var i = arr.length-1; i >= 0; --i) {
            //console.log(arr[i]);
            var line = arr[i].split(',');
            line[0] = Date.parse(line[0]);

            line = $.map(line, function(v) {
                return parseFloat(v);
            });
            line = line.slice(0,6);
            //var j = JSON.stringify(line.slice(0,0+6));
            console.log(line);
            data.push(line);
        }
        data = JSON.stringify(data.slice(1));
        console.log(data);
        run(data);
    });




});

function run(data) {

    // split the data set into ohlc and volume
    var ohlc = [],
            volume = [],
            dataLength = data.length,
    // set the allowed units for data grouping
            /*groupingUnits = [[
                'week',                         // unit name
                [1]                             // allowed multiples
            ], [
                'month',
                [1, 2, 3, 4, 6]
            ]],*/

            i = 0;

    for (i; i < dataLength; i += 1) {
        ohlc.push([
            data[i][0], // the date
            data[i][1], // open
            data[i][2], // high
            data[i][3], // low
            data[i][4] // close
        ]);

        volume.push([
            data[i][0], // the date
            data[i][5] // the volume
        ]);
    }


    // create the chart
    $('#container2').highcharts('StockChart', {

        rangeSelector: {
            selected: 1
        },

        title: {
            text: 'Shanghai Composite Index Historical'
        },

        yAxis: [{
            labels: {
                align: 'right',
                x: -3
            },
            title: {
                text: 'OHLC'
            },
            height: '60%',
            lineWidth: 2
        }, {
            labels: {
                align: 'right',
                x: -3
            },
            title: {
                text: 'Volume'
            },
            top: '65%',
            height: '35%',
            offset: 0,
            lineWidth: 2
        }],

        series: [{
            type: 'candlestick',
            upLineColor: 'red',
            downLineColor: 'green',
            name: 'SSE',
            data: ohlc,
            /*dataGrouping: {
                units: groupingUnits
            }*/
        }, {
            type: 'column',
            name: 'Volume',
            data: volume,
            yAxis: 1
            /*dataGrouping: {
                units: groupingUnits
            }*/
        }]
    });
}

有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

问题在于 data = JSON.stringify(data.slice(1)); 。它将数组转换为字符串,因此 Highstock 无法识别它。删除JSON.stringify,它会正常工作:

data = data.slice(1);

这是DEMO