highcharts删除零值的间隙(列)

时间:2015-08-27 13:33:49

标签: javascript svg charts highcharts

尝试从highcharts中删除零值的列。

plotOptions: {
        column: {
            pointPadding: 0.2,
            borderWidth: 0,
        }
    },
    series: [{
        name: 'Tokyo',
        data: [49.9, 0, 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, null, 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, 0, 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, 0, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]

    }]

这是演示 http://jsfiddle.net/pirelly/oa1g9rvu/

chart with description

谢谢, 维塔利

1 个答案:

答案 0 :(得分:1)

您可以使自定义功能负责定位列:

var justifyColumns = function(chart) {
  var categoriesWidth = chart.plotSizeX / (1 + chart.xAxis[0].max - chart.xAxis[0].min),
    distanceBetweenColumns = 0,
    each = Highcharts.each,
    sum, categories = chart.xAxis[0].categories,
    number;
  for (var i = 0; i < categories.length; i++) {
    sum = 0;
    each(chart.series, function(p, k) {
      if (p.visible) {
        each(p.data, function(ob, j) {
          if (ob.category == categories[i]) {
            sum++;
          }
        });
      }
    });
    distanceBetweenColumns = categoriesWidth / (sum + 1);
    number = 1;
    each(chart.series, function(p, k) {
      if (p.visible) {
        each(p.data, function(ob, j) {
          if (ob.category == categories[i]) {
            ob.graphic.element.x.baseVal.value = i * categoriesWidth + distanceBetweenColumns * number - ob.pointWidth / 2;
            number++;
          }
        });
      }
    });
  }
};

您可以使用图表参数(如chart.plotSizeX)来计算列之间的距离。

在这里你可以找到实例: http://jsfiddle.net/7o0eq05L/8/

您还可以使用getColumnMetrics函数的包装器

在这里您可以找到有关扩展Highcharts的信息: http://www.highcharts.com/docs/extending-highcharts/extending-highcharts

在这里你可以找到图表的实例: http://jsfiddle.net/hgjvpqab/

亲切的问候。