Reload chart data via JSON with Highcharts

前端 未结 8 2233
借酒劲吻你
借酒劲吻你 2020-11-28 02:11

I am trying to reload the data for a Highcharts chart via JSON based on a button click elsewhere in the page. Initially I would like to display a default set of data (spendi

相关标签:
8条回答
  • 2020-11-28 02:51

    data = [150,300]; // data from ajax or any other way chart.series[0].setData(data, true);

    The setData will call redraw method.

    Reference: http://api.highcharts.com/highcharts/Series.setData

    0 讨论(0)
  • 2020-11-28 02:52

    Actually maybe you should choose the function update is better.
    Here's the document of function update http://api.highcharts.com/highcharts#Series.update

    You can just type code like below:

    chart.series[0].update({data: [1,2,3,4,5]})

    These code will merge the origin option, and update the changed data.

    0 讨论(0)
  • 2020-11-28 02:56

    EDIT: The response down below is more correct!

    https://stackoverflow.com/a/8408466/387285

    http://www.highcharts.com/ref/#series-object

    HTML:

    <SELECT id="list">
    <OPTION VALUE="A">Data Set A
    <OPTION VALUE="B">Data Set B
    </SELECT>
    <button id="change">Refresh Table</button>
    
    <div id="container" style="height: 400px"></div>
    

    Javascript:

    var options = {
        chart: {
            renderTo: 'container',
            defaultSeriesType: 'spline'
        },
        series: []
    };
    
    $("#change").click(function() {
        if ($("#list").val() == "A") {
            options.series = [{name: 'A', data: [1,2,3,2,1]}]
            // $.get('/dough/includes/live-chart.php?mode=month'
        } else {
            options.series = [{name: 'B', data: [3,2,1,2,3]}]
            // $.get('/dough/includes/live-chart.php?mode=newmode'
        } 
    
        var chart = new Highcharts.Chart(options);    
    });
    

    This is a very simple example since I don't have my files here with me but the basic idea is that every time the user selects new options for the stuff they want to see, you're going to have replace the .series data object with the new information from your server and then recreate the chart using the new Highcharts.Chart();.

    Hope this helps! John

    EDIT:

    Check this out, its from something I've worked on in the past:

    $("table#tblGeneralInfo2 > tbody > tr").each(function (index) {
        if (index != 0) {
            var chartnumbervalue = parseInt($(this).find("td:last").text());
            var charttextvalue = $(this).find("td:first").text();
            chartoptions.series[0].data.push([charttextvalue, chartnumbervalue]);
        }
    });
    

    I had a table with information in the first and last tds that I needed to add to the pie chart. I loop through each of the rows and push in the values. Note: I use chartoptions.series[0].data since pie charts only have 1 series.

    0 讨论(0)
  • 2020-11-28 03:02

    You can always load a json data

    here i defined Chart as namespace

     $.getJSON('data.json', function(data){
                    Chart.options.series[0].data = data[0].data;
                    Chart.options.series[1].data = data[1].data;
                    Chart.options.series[2].data = data[2].data;
    
                    var chart = new Highcharts.Chart(Chart.options);
    
                });
    
    0 讨论(0)
  • 2020-11-28 03:04

    The other answers didn't work for me. I found the answer in their documentation:

    http://api.highcharts.com/highcharts#Series

    Using this method (see JSFiddle example):

    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container'
        },
    
        series: [{
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]        
        }]
    });
    
    // the button action
    $('#button').click(function() {
        chart.series[0].setData([129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4] );
    });
    
    0 讨论(0)
  • 2020-11-28 03:04

    If you are using push to push the data to the option.series dynamically .. just use

    options.series = [];  
    

    to clear it.

    options.series = [];
    $("#change").click(function(){
    }
    
    0 讨论(0)
提交回复
热议问题