2

我喜欢为高图表动态设置 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]
        }]
    });
});
4

5 回答 5

5

我的建议:将任何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: {}”等)内。

于 2016-06-16T17:10:31.193 回答
0

现有解决方案的问题:

  1. 对于一个系列中的多个条形,minPointLength 不能不同。所以这行不通,因为我希望 0 bar 值保持不变。
  2. 我无法将数据从 0 更改为 null,因为我有一个在悬停时显示数据的工具提示,因此我无法将 null 显示为数据。

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

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

现在计算 extraBarHeight 很棘手。

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

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

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

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

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

于 2019-01-25T12:30:32.720 回答
0

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

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

于 2021-02-25T07:10:11.093 回答
-1

这是不可能的。该属性minPointLength适用于整个系列,并且不能针对单个点进行更改。

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

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

于 2016-06-16T14:38:53.390 回答
-2

您不能在对象内使用代码。
尝试这样做:

var minPointLength;  

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

    series: {
                minPointLength : minPointLength
        }
于 2016-06-16T12:18:20.950 回答