1

我正在尝试在 highcharts 图中显示/隐藏一列(包含所有相关点)。

例如,考虑下图:jsfiddle

我希望用户能够单击“Sep”列,隐藏它,相应地重新调整轴(x 和 y 轴)。

不幸的是,我不是 javascript/jquery 方面的专家。所以我想知道是否有可能做到这一点,以及如何做到这一点。

谢谢你的帮助!

这是小提琴的代码:

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'column'
        },
        title: {
            text: 'Monthly Average Rainfall'
        },
        subtitle: {
            text: 'Source: WorldClimate.com'
        },
        xAxis: {
            categories: [
                'Jan',
                'Feb',
                'Mar',
                'Apr',
                'May',
                'Jun',
                'Jul',
                'Aug',
                'Sep',
                'Oct',
                'Nov',
                'Dec'
            ]
        },
        yAxis: {
            min: 0,
            title: {
                text: 'Rainfall (mm)'
            }
        },
        tooltip: {
            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
            footerFormat: '</table>',
            shared: true,
            useHTML: true
        },
        plotOptions: {
            column: {
                pointPadding: 0.2,
                borderWidth: 0
            }
        },
        series: [{
            name: 'Tokyo',
            data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]

        }, {
            name: 'New York',
            data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]

        }, {
            name: 'London',
            data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]

        }, {
            name: 'Berlin',
            data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]

        }]
    });
});
4

2 回答 2

1

这是来自 Daker 的解决方案,带有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);
});
于 2013-11-27T23:26:44.950 回答
0

要使用分组条形图执行此操作,您需要创建一个自定义函数,该函数将

1)从图表中删除数据系列

2) 重建数据系列,删除点击的数据点

3) 将系列重新添加到图表中

和,

4)您将需要构建某种形式的外部控件来模仿图例,以便用户仍然可以单击某些内容以重新显示已删除的数据。否则,当您重新缩放轴时,您会删除标签,并且用户无法取回数据。

不幸的是,这不是一个简单的练习。

setData() 函数将处理 1 和 3: http ://api.highcharts.com/highcharts#Series.setData%28%29

OTOH,如果您想使用标准(非分组、非堆叠)条形图执行此操作,您只需将每个条形图设为单独的数据系列,内置的 Legend 功能将为您处理一切。

于 2013-11-13T15:35:41.833 回答