How to hide/show a column in a basic column graph of highcharts?

前端 未结 2 872
梦如初夏
梦如初夏 2020-12-04 03:25

I\'m trying to show/hide a column (with all the associated points) in a graph of highcharts.

For instance, consider following graph: jsfiddle.

I want the use

相关标签:
2条回答
  • 2020-12-04 04:03

    To do this with a grouped bar chart, you will need to create a custom function that will

    1) remove the data series from the chart

    2) rebuild the data series with the clicked data points removed

    3) re-add the series to the chart

    and,

    4) you will need to build some form of external control mimicking a legend, so that the user still has something to click in order to re-show the removed data. Otherwise, when you rescale the axis, you remove the label and the user can't get the data back.

    It is not a trivial exercise, unfortunately.

    the setData() function will handle 1 and 3: http://api.highcharts.com/highcharts#Series.setData%28%29

    OTOH, if you want to do this with a standard (non-grouped, non-stacked) bar chart, you can simply make each bar a separate data series, and the built in Legend functionality will handle everything for you.

    0 讨论(0)
  • 2020-12-04 04:06

    Here is the solution from Daker, with the jsfiddle.

    html

    <div id="container" style="height: 300px"></div>
    <script src="http://code.highcharts.com/highcharts.src.js"></script>
    <button id="b4">Hide third category</button>
    <button id="b5">Show third category</button>
    

    javascript

    var point = {
    x: null,
    y: null
    };
    
    var chart = new Highcharts.Chart({
    
    chart: {
        renderTo: 'container'
    },
    
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    
    series: [{
        type: 'column',
        name: 'third',
        data: [95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1],
    }]
    });
    $('#b4').click(function () {
    var no = 2; //third element
    // removed march, hoping we'd only show 11 months...
    chart.xAxis[0].setCategories(['Jan', 'Feb', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], false);
    var data = [];
    for (i = 0; i < chart.series[0].data.length; i++) {
        if (i < no) {
            data.push([chart.series[0].data[i].x, chart.series[0].data[i].y]);
        } else if (i === no) {
            point.x = chart.series[0].data[i].x;
            point.y = chart.series[0].data[i].y;
        } else if (i > no) {
            data.push([chart.series[0].data[i].x - 1, chart.series[0].data[i].y]);
        }
    }
    chart.series[0].setData(data);
    });
    
    $('#b5').click(function () {
    var no = 2; //third element
    var data = [];
    for (i = 0; i < chart.series[0].data.length; i++) {
        if (i < no) {
            data.push([chart.series[0].data[i].x, chart.series[0].data[i].y]);
        } else if (i === no) {
            data.push([point.x, point.y]);
            data.push([chart.series[0].data[i].x + 1, chart.series[0].data[i].y]);
        } else if (i > no) {
            data.push([chart.series[0].data[i].x + 1, chart.series[0].data[i].y]);
        }
    }
    chart.xAxis[0].setCategories(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
    chart.series[0].setData(data);
    });
    
    0 讨论(0)
提交回复
热议问题