如何从单个系列HighCharts列图中动态删除整个列?

时间:2017-04-27 13:07:49

标签: javascript jquery highcharts

这是简单柱形图的示例

$("#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'
        ],
        crosshair: true
    },
    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]

    }]
});

我动态添加像这样的列(点)

var chart = $("#container").highcharts();
chart.series[0].addPoint(["abc", 100]]);

所以现在我必须从图表中删除一列。我通过他们的名字动态添加了点数。因此,当我删除任何特定的添加系列名称时,我需要从图表中删除该列。

当我添加一个新列(点)时,我创建一个名称为&#39; x&#39;的按钮。标记所以点击&#39; x&#39; mark应该从图表中删除该特定列。所以我只有它的类别名称,我需要将其删除。

所以我需要从图表中动态删除列。因为它只是一个系列。我希望使用各自的数据值删除类别。我不知道怎么做!

例如,在上面的图表中,我想特别删除&#39; Oct&#39;来自类别及其各自的数据来自数据&#194;&#39;我只有它的类别值(&#39; 10月&#39;)。那可能吗 ?

我不能使用它 - chart.series [0] .data [9] .remove()因为我不知道我必须删除哪个索引,因为我只有它的类别价值&#39; 10月&#39;此外,它只是从图表中删除点而不是整个列(包括其各自的类别值和重新移动图表)。

有谁知道我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以创建一个过滤数据和类别的功能,并更新图表。

示例:

function removeCategoryAndData (chart, categoryName) {
  const { categories } = chart.xAxis[0]
  const categoryIndex = categories.indexOf(categoryName)
  const { data } = chart.series[0]

  // Filter data and categories
  const filteredData = data.map((p) => p.y).filter((v, i) => i !== categoryIndex)
  const filterdCategories = categories.filter((v, i) => i !== categoryIndex)

  // Update chart with filtered data and categories
  chart.update({ xAxis: { categories: filterdCategories }, series: { data: filteredData } })
}

实例: https://jsfiddle.net/yy9bhvq2/