【问题标题】:Highcharts: display peak valuesHighcharts:显示峰值
【发布时间】:2015-03-17 08:13:42
【问题描述】:

我想在我的 Highcharts 图表上显示 2 个点之间的差异。只有当它是一个主要的“峰值”差异时。

这是一个“静态”示例:

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'areaspline'
        },
        series: [{
            data:   [560,500,476,453,356,{
                        y: 590,
                        dataLabels: {
                            enabled: true,
                            formatter: function () {return '+243';}
                        } 
                    },497,478,465,465,465,410,398]
        }]
    });
});  

http://jsfiddle.net/vr1a61wy/

如何将所有点值与之前的值进行比较?

例如,类似的东西(不是“真正的代码”)

if(prevValue > 200) {
  displayDataLabel();
}
function displayDataLabel() {
   peak = this.datalabel - prev.datalabel;
   return peak;
}

我们的目标是拥有一个干净的 json 文件,其中仅包含由 javascript 计算的值和峰值。

有可能吗?

【问题讨论】:

    标签: javascript json highcharts


    【解决方案1】:

    您可以使用plotOptions.series.dataLabels.formatter 进行此比较。要进行比较,您将使用this.xthis.ythis.series 来查找上一点。

    formatter 函数的示例是 (JSFiddle):

    formatter: function() {
        if(this.x > 0 && this.y - this.series.data[this.x-1].y >= PEAKDIFF) {
            return "+" + (this.y - this.series.data[this.x-1].y);
        }
        return null;
    }
    

    PEAKDIFF 是您希望在显示标签之前的差异值。如果您还希望显示较大的负下降,您可以对 Math.abs 执行相同的操作。

    【讨论】:

    • 谢谢 Ondkloss,我会尝试并发布结果
    • 此答案假定之前的 x 值为 x-1,但不一定如此。查找索引更安全,例如this.series.data.indexOf( this.point ) - 1。对于非常大的系列,连续查找点将成为性能杀手,因此最好缓存索引,也许在点对象本身中。
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多