首页 文章

从React中的JSON文件中删除Highcharts列图表中的空值

提问于
浏览
1

我想在Highcharts柱形图上按类别对齐,因此它会更正空值 . 下面的函数是由Grzegorz写的 . 但是当我尝试在React官方包装器中添加该函数时,它返回"element" undefined . 我如何将其改编为React官方包装器 . 记住我只想忽略空值的间隙,而不是零 . 这是我的代码的代码框,逻辑应该在Chart.js组件中 . Chart is in ./components/Chart.js

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++;
                    }
                });
            }
        });
    }
};

1 回答

  • 0

    您提供的函数不适用于 null 值,您可以在没有反应包装器的情况下注意到这些值:http://jsfiddle.net/BlackLabel/2q18zkcj/

    您需要更改函数的工作方式:

    function justifyColumns(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] && ob.y !== null) {
                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.y !== null) {
                ob.graphic.element.x.baseVal.value = i * categoriesWidth + distanceBetweenColumns * number - ob.pointWidth / 2;
                number++;
              }
            });
          }
        });
      }
    };
    

    现场演示:https://codesandbox.io/s/p5j09zrz8q

相关问题