Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 要在Highchart基本柱状图中隐藏值为0的列吗_Javascript_Angular_Highcharts - Fatal编程技术网

Javascript 要在Highchart基本柱状图中隐藏值为0的列吗

Javascript 要在Highchart基本柱状图中隐藏值为0的列吗,javascript,angular,highcharts,Javascript,Angular,Highcharts,我试图隐藏具有零值和多个序列的列。给空值对我不起作用,因为它给了我不想要的空间。作为我的数据示例,请参考链接。我有类似的数据 数据示例: Highcharts.chart('container'{ 图表:{ 类型:“列” }, 标题:{ 文字:“月平均降雨量” }, 副标题:{ 文本:'来源:WorldClimate.com' }, xAxis:{ 类别:[ “一月”, 二月,, “三月”, “四月”, “五月”, "六月",, 七月,, "八月",, "九月",, “十月”, 十一月,, “十

我试图隐藏具有零值和多个序列的列。给空值对我不起作用,因为它给了我不想要的空间。作为我的数据示例,请参考链接。我有类似的数据

数据示例:

Highcharts.chart('container'{
图表:{
类型:“列”
},
标题:{
文字:“月平均降雨量”
},
副标题:{
文本:'来源:WorldClimate.com'
},
xAxis:{
类别:[
“一月”,
二月,,
“三月”,
“四月”,
“五月”,
"六月",,
七月,,
"八月",,
"九月",,
“十月”,
十一月,,
“十二月”
],
十字准星:对
},
亚克斯:{
分:0,,
标题:{
文字:“降雨量(毫米)”
}
},
工具提示:{
headerFormat:“{point.key}”,
pointFormat:“{series.name}:”+
“{point.y:.1f}mm”,
页脚格式:“”,
分享:是的,
useHTML:true
},
打印选项:{
专栏:{
点填充:0.2,
边框宽度:0
}
},
系列:[{
名称:"东京",,
数据:[49.9,0,106.4129.2,144.0,176.0,135.6148.51216.4194.1,95.6,54.4]
},{
名称:'纽约',
数据:[83.6,78.8,98.5,0,106.0,84.5,105.0,104.3,91.2,83.5,106.6,92.3]
},{     
名称:“伦敦”,
数据:[48.9,38.8,39.3,41.4,47.0,48.3,59.0,59.6,52.4,65.2,0,51.2]
}, {   
名称:“柏林”,
数据:[42.4,0,34.5,39.7,52.6,75.5,57.4,60.4,47.6,0,46.8,51.1]
}]
});

通过禁用
分组
,为每个点创建一个单独的序列并对其应用
点放置
,可以实现此外观和行为<代码>点放置只能用于系列对象-这就是分解的原因

下面是一段自动执行此操作的代码:

  load: function() {
    var newSeriesArr = [],
      chart = this,
      groupedSeries = {},
      pointOffset;


    // create a new series for each point
    for (var i = chart.series.length - 1; i >= 0; i--) {
      var series = chart.series[i];

      var pointsInSeries = series.points.length;
      for (var j = pointsInSeries - 1; j >= 0; j--) {
        var point = series.points[j];

        // omit the point if its y value equals to 0 
        if (!point.y) {
          continue;
        }

        // make sure that x property of each point is initialized
        point.options.x = point.x;

        var newSeriesOptions = {
          data: [point.options],
          // move relevant options from the original series
          color: series.color,
          name: series.name,
          // linking series items in legend
          linkedTo: series.options.id
        };

        if (!groupedSeries[point.x]) {
          // create group
          groupedSeries[point.x] = [];
        }

        // create series and assign it to group
        groupedSeries[point.x].push(chart.addSeries(newSeriesOptions, false));

        if (groupedSeries[point.x].length > maxGroupedColumns) {
          // update max grouped columns number
          maxGroupedColumns = groupedSeries[point.x].length;
        }

        point.remove(false);
      }

      //series.remove(false);
      series.setData([]);
    }

    // handle pointPlacement for each series
    pointOffset = 1 / maxGroupedColumns;
    for (var x in groupedSeries) {
      var group = groupedSeries[x];

      group.forEach(function(series, index) {
        series.update({
          pointPlacement: pointOffset * index - ((group.length - 1) * pointOffset) / 2,
        }, false);
      });
    }

    chart.redraw();
  }

现场演示:

这是期望的结果吗?:非常感谢……)这对我有很大帮助@KamilKulig@KamilKulig我应用了这个逻辑,注意到如果系列数据的最后一个值为0,它不会在轴的底部显示该名称。请参阅:(东京不在那里)我们能做些什么吗?我发布了一个固定的示例作为答案。它按照我的要求工作。谢谢你的帮助@kamilkulig
  load: function() {
    var newSeriesArr = [],
      chart = this,
      groupedSeries = {},
      pointOffset;


    // create a new series for each point
    for (var i = chart.series.length - 1; i >= 0; i--) {
      var series = chart.series[i];

      var pointsInSeries = series.points.length;
      for (var j = pointsInSeries - 1; j >= 0; j--) {
        var point = series.points[j];

        // omit the point if its y value equals to 0 
        if (!point.y) {
          continue;
        }

        // make sure that x property of each point is initialized
        point.options.x = point.x;

        var newSeriesOptions = {
          data: [point.options],
          // move relevant options from the original series
          color: series.color,
          name: series.name,
          // linking series items in legend
          linkedTo: series.options.id
        };

        if (!groupedSeries[point.x]) {
          // create group
          groupedSeries[point.x] = [];
        }

        // create series and assign it to group
        groupedSeries[point.x].push(chart.addSeries(newSeriesOptions, false));

        if (groupedSeries[point.x].length > maxGroupedColumns) {
          // update max grouped columns number
          maxGroupedColumns = groupedSeries[point.x].length;
        }

        point.remove(false);
      }

      //series.remove(false);
      series.setData([]);
    }

    // handle pointPlacement for each series
    pointOffset = 1 / maxGroupedColumns;
    for (var x in groupedSeries) {
      var group = groupedSeries[x];

      group.forEach(function(series, index) {
        series.update({
          pointPlacement: pointOffset * index - ((group.length - 1) * pointOffset) / 2,
        }, false);
      });
    }

    chart.redraw();
  }