Highcharts/HighcharteR 工具提示:访问系列中的所有 y 值,打印差异
Highcharts/HighcharteR Tooltip: access all y-values within a series, print the difference
[编辑] 我在写这个问题的时候解决了这个问题,所以请看下面的答案。
我有一个图表,x 轴是时间段,y 轴是分数,我希望工具提示在每个点上给出当前点和当前点之间的 y 值差异上一个(同一系列)。
可重现的例子:
library(highcharter)
hchart(df,
type="line",
hcaes(x = period, y = value, group = group)
) %>%
hc_tooltip(pointFormat = "Score: {point.y} ({previous.point.y})")
理想情况下,例如,将鼠标悬停在系列 B 的第二点上时,我希望它显示 Score: 5 (+1)
。这可能需要一些 formatter=JS()
JavaScript 而不是 pointFormat
,但不确定如何做到这一点。
感谢 ,我设法访问了所有 y 值,之后我发现使用 this.point.x
允许我们磨练特定的 y 值。这是 JS:
function () {
if (this.point.x == 0) { // there's no previous point, so set to '0'
var thisDiff = 0;
} else { // use 'this.point.x' to get current position, and do '-1' to get previous position
var thisDiff = ( this.series.points[this.point.x].y - this.series.points[this.point.x - 1].y );
if (thisDiff > 0) {
thisDiff = '+' + thisDiff; // pretty print a '+' sign if difference is positive
}
}
var s = '<b>Series ' + this.series.name + ', period ' + this.point.name + ': </b>';
s += 'mean score ' + this.point.y + ' (' + thisDiff + ')';
return(s);
}
为了让它在 highcharteR
中工作,我们只需要将其用引号引起来并传递给 hc_tooltip(formatter = JS()
[编辑] 我在写这个问题的时候解决了这个问题,所以请看下面的答案。
我有一个图表,x 轴是时间段,y 轴是分数,我希望工具提示在每个点上给出当前点和当前点之间的 y 值差异上一个(同一系列)。
可重现的例子:
library(highcharter)
hchart(df,
type="line",
hcaes(x = period, y = value, group = group)
) %>%
hc_tooltip(pointFormat = "Score: {point.y} ({previous.point.y})")
理想情况下,例如,将鼠标悬停在系列 B 的第二点上时,我希望它显示 Score: 5 (+1)
。这可能需要一些 formatter=JS()
JavaScript 而不是 pointFormat
,但不确定如何做到这一点。
感谢 this.point.x
允许我们磨练特定的 y 值。这是 JS:
function () {
if (this.point.x == 0) { // there's no previous point, so set to '0'
var thisDiff = 0;
} else { // use 'this.point.x' to get current position, and do '-1' to get previous position
var thisDiff = ( this.series.points[this.point.x].y - this.series.points[this.point.x - 1].y );
if (thisDiff > 0) {
thisDiff = '+' + thisDiff; // pretty print a '+' sign if difference is positive
}
}
var s = '<b>Series ' + this.series.name + ', period ' + this.point.name + ': </b>';
s += 'mean score ' + this.point.y + ' (' + thisDiff + ')';
return(s);
}
为了让它在 highcharteR
中工作,我们只需要将其用引号引起来并传递给 hc_tooltip(formatter = JS()