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
相关产品推荐
相关产品推荐

