You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highstock中为Value与EMA系列添加value2数据标签的技术求助

Highstock 显示数据系列差值(value2)的解决方案

问题核心

你的数据格式为[time, value, value2],其中value2是差值,但当前代码里用this.series.userOptions.data[this.point.index][1]取的是第二个元素(即value),而非第三个元素的差值。另外直接通过userOptions.data按索引取值存在风险——如果Highstock对数据做了排序、过滤等处理,point.index和原始数据的索引可能不匹配。

两种可行修改方案

方案1:直接从点的原始配置中获取差值

每个点的options属性会保留原始数据数组,直接访问第三个元素即可:

pointFormatter: function() {
    var series = this.series.chart.series,
        percentage = Highcharts.numberFormat(
            this.y / series[1].points[this.index].y * 100, 2
        ),
        // 获取当前点的差值(第三个元素,索引为2)
        diff = this.point.options[2];

    return '<span style="color:' +
        this.color + '">●</span> ' +
        this.series.name + ': <b>' +
        Highcharts.numberFormat(this.y, 2) +
        '</b> Percentage: ' + percentage + '%<br/>' + 
        '差值: ' + Highcharts.numberFormat(diff, 2);
}

方案2:用对象格式定义数据(更清晰推荐)

后端生成数据时改用对象结构,把差值作为自定义属性,前端直接调用更直观:

  • 后端PHP修改:
$dadesborsa[] = "{x: $databorsa, y: $valorborsa, diff: $diferencia}";
$dadesema[] = "{x: $databorsa, y: $matriuema[0], diff: $diferencia}";
  • 前端tooltip修改:
pointFormatter: function() {
    var series = this.series.chart.series,
        percentage = Highcharts.numberFormat(
            this.y / series[1].points[this.index].y * 100, 2
        ),
        // 直接通过自定义属性获取差值
        diff = this.point.diff;

    return '<span style="color:' +
        this.color + '">●</span> ' +
        this.series.name + ': <b>' +
        Highcharts.numberFormat(this.y, 2) +
        '</b> Percentage: ' + percentage + '%<br/>' + 
        '差值: ' + Highcharts.numberFormat(diff, 2);
}

额外说明

  • 如果两个系列的差值逻辑不同,可通过this.series.id判断当前是哪个系列,再做对应处理;
  • 用Highcharts.numberFormat格式化差值,保证显示格式统一。

内容的提问来源于stack exchange,提问作者Dabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:02:03