Подсказка Highcharts/HighcharteR: доступ ко всем значениям y в серии, вывод разницы

[EDIT] В итоге я решил это, когда писал этот вопрос, поэтому ответ смотрите ниже.


У меня есть график, который имеет периоды времени по оси 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, но я не знаю, как это сделать.


person rvrvrv    schedule 10.04.2020    source источник


Ответы (1)


Благодаря этому связанному ответу мне удалось получить доступ ко всем значениям y, после чего я понял, что использование this.point.x позволяет нам оттачивать in по конкретным значениям 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()

person rvrvrv    schedule 10.04.2020