如何动态设置minPointLength除0

时间:2016-06-16 12:09:22

标签: javascript charts highcharts lazy-high-charts

我喜欢为高图表动态设置minPointLengh的值。但是下面提到的代码不起作用。能帮我完成它吗?

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'column'
        },
        xAxis: {
            categories: ['Sep', 'Oct', 'Nov', 'Dec']
        },

        plotOptions: {
        var minPointLength; 
                if(this.y > 0)  
                  minPointLength = 3,  
             else  
                  minPointLength = 0,
            series: {
                        minPointLength: minPointLength,
            }
        },
        series: [{
            data: [4, 0, 1, 5]
        }]
    });
});

5 个答案:

答案 0 :(得分:2)

我的建议:将所有0值更改为null值。

minPointLength不会影响任何值为y的点。

将代码更新为:

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'column'
        },
        xAxis: {
            categories: ['Sep', 'Oct', 'Nov', 'Dec']
        },

        plotOptions: {
            series: {
              minPointLength: 3
          }
        },
        series: [{
            data: [4, null, 1, 5]
        }]
    });
});

示例:

您的代码无法正常工作的其他原因:您试图直接在minPointLength对象中设置plotOptions属性 - 它需要位于其中一个系列选择器对象中(即' series: {}',' column: {}'等。)

答案 1 :(得分:0)

现有解决方案的问题:

  1. minPointLength对于一系列中的多个条不能相同。所以 因为我希望0 bar值保持不变,所以该方法不起作用。
  2. 我无法将数据从0更改为null,因为我有一个工具提示可以显示悬停数据,所以我不能将null显示为数据。

解决方案:
我们在系列数据中添加额外的条形高度,然后从工具提示数据中删除(减去)。

  1. 创建一个属性,例如extraBarHeight,并将其推送到highchart中的每个数据点 数据(即您在tooltip: formatter(data){}中收到的数据 )。
  2. 现在将这个extraBarHeight添加到要在
    buildGraph(){ series:"" }
  3. 中设置的数据中
  4. 在工具提示中检查formatter(data){的数据,您会发现每个条形的extraBarHeight。从工具提示数据中减去该金额(您可能会从根据系列数据自动更新的points属性中获取)

现在计算extraBarHeight非常棘手。

  1. 遍历系列数据中的所有数据点并找到最高的 一,maxUnit

  2. extraBarHeight = maxUnit的10%(您可以更改百分比)

  3. 比较串联的每个数据点。我们这样做是为了避免小单位变得比大单位大,并保持零柱不变。

    if(dataPoint< extraBarHeight && dataPoint !== 0) dataPoint = dataPoint + extraBarHeight;

这是一个漫长而复杂的解决方案,但这至少是目前唯一可行的方法。

答案 2 :(得分:0)

@jlbriggs 分享的解决方案工作正常,但它也会从工具提示中删除数据。

我采用了类似的方法,但我没有将它们设为 null,而是将 0 值转换为 -1 并将 min 中的 yAxis 设置为 1。并且还在工具提示中显示了值 0<0

答案 3 :(得分:-1)

这是不可能的。属性minPointLength适用于整个系列,无法针对各个点进行更改。

如果您想要正确显示值是正数还是0时,显示数据标签可能会有所帮助,以便明确标记这些列(请参阅此示例:https://jsfiddle.net/brightmatrix/1spxcsmd/)。

此外,您希望在Highcharts代码中动态执行的任何操作都需要位于事件或formatter函数调用的函数中。您不能将变量或代码直接插入图表选项中。原始代码无法正常工作的原因之一是plotOptions中的代码。

答案 4 :(得分:-2)

您无法在对象内使用代码 尝试这样做:

var minPointLength;  

    if(this.y > 0)  
                  minPointLength = 3,  
             else  
                  minPointLength = 0,  
        };

    series: {
                minPointLength : minPointLength
        }