简体   繁体   中英

Why is my addPoint() not recognized as a function in my highcharts code?

I am working with Highcharts and live data. I have my ajax all set up properly it seems and have a setTimeout called to bring in live data. Whenever that data comes in I want to addPoint() to my series and draw the new graph (shifting to the left). Below is my code, line 85 is the .addPoint call but you will see in the console that it is showing as not a function or undefined.

I know from the console as well that I am a calling my data correctly from my chart (chart1.data.series[0] returns and object). Here is the highcharts documentation on series data and addPoint : < http://api.highcharts.com/highcharts#Series.addPoint >

Any idea where I went wrong? I am new to js 1 year <. so I appreciate all your help!

<!doctype html>
<html>

<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script src="http://code.highcharts.com/highcharts.js"></script>
</head>

<body>
    <div id="container" style="width:100%"></div>
</body>
<script>
chart1 = {
    yAxisMin: null,
    yAxisMax: null
};
// empty objects for our data and to create chart
seriesData = [];
BPM = [];
time1 = [];

// console.log(chart1.data.series);

$(function() {
    $(document).ready(function() {
        Highcharts.setOptions({
            global: {
                useUTC: false
            }
        });


        function requestData() {
            var url = 'http://msbandhealth.azurewebsites.net/odata/PulsesAPI/';
            $.ajax({
                url: url,
                dataType: 'json',
                context: seriesData,
                success: function(data) {

                    shift = chart1.data.series[0].data.length > 20;
                    // structure our data 
                    for (var i = 0; i < data.value.length; i++) {
                        bpm = data.value[i].BPM;
                        time = data.value[i].Time;
                        console.log(time);
                        this.push([time, BPM]);
                        BPM.push(bpm);
                        time1.push(time);
                    }

                    // console.log(series[0]);
                    // find the highest pulse  so we can set it to the highest y point
                    chart1.yAxisMax = (function(array) {
                        var pulse_array = [];

                        for (var i = 0; i < array.length; i++) {
                            if (array[i] != null) {
                                pulse_array.push(array[i]);
                            }
                        }
                        return Math.max.apply(Math, pulse_array);
                    })(BPM);

                    // find the lowest pulse rate and set it to lowest y point
                    chart1.yAxisMin = (function(array) {
                        var pulse_array = [];

                        for (var i = 0; i < array.length; i++) {
                            if (array[i] != null) {
                                pulse_array.push(array[i]);
                            }
                        }
                        return Math.min.apply(Math, pulse_array);
                    })(BPM);

                    // set our data series and create new chart
                    chart1.data.series[0].data = BPM;

                    chart = new Highcharts.Chart(chart1.data);
                    $('#container').css({
                        height: '400px'
                    });

                    chart1.data.series[0].addPoint(BPM, true, true);

                    // setTimeout(requestData, 3000);
                    console.log(chart1.data.series);
                }

            });
        }

        // give highcharts something to render to
        container = document.getElementById("container");

        chart1.data = {

            chart: {
                renderTo: container,
                type: 'spline',
                animation: Highcharts.svg, // don't animate in old IE
                marginRight: 10,
                events: {
                    load: requestData()
                }
            },
            title: {
                text: ' Real Time Pulse Analysis'
            },
            xAxis: {
                type: 'datetime',
                tickPixelInterval: 150
            },
            yAxis: {
                min: chart1.yAxisMin,
                max: chart1.yAxisMax,
                title: {
                    text: 'Heart Rate'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                formatter: function() {
                    return '<b>' + this.series.name + '</b><br/>' +
                        Highcharts.dateFormat('%H:%M:%S', this.x) + '<br/>' +
                        Highcharts.numberFormat(this.y, 2);
                }
            },
            legend: {
                enabled: false
            },
            exporting: {
                enabled: false
            },
            series: [{
                name: 'Beats Per Minute',
                data: []
            }]


        };

    });
});
</script>

</html>

You should use reference to chart and then call addPoint, instead of refer to chart configuration object.

Correct form: chart.series[0].addPoint()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM