R Sankey Highchart: настройка всплывающей подсказки узла с использованием данных из другой переменной

Я пытаюсь сделать диаграмму Санки с highcharter, и мне нужно показать в подсказке узла сумму переменной, скажем, y. Например, для узла «А» сумма y будет равна 62 (34+28).

Я пробовал это, но это не сработает

test <- data.frame(a = c("A", "B", "A", "B"), 
                   b = c("C", "C", "D", "D"), 
                   x = c(4, 9, 2, 2), 
                   y = c(34, 29, 28, 26)) 

hchart(test, "sankey", nodeWidth = 10, hcaes(from = a, to = b, weight = x)) %>% 
 hc_tooltip(nodeFormat = "{y.sum}")

Спасибо


person Roke Alvarez Masso    schedule 20.09.2019    source источник


Ответы (1)


Код ниже вычисляет сумму y и показывает ее во всплывающей подсказке.

library(highcharter)    
test <- data.frame(a = c("A", "B", "A", "B"), 
                   b = c("C", "C", "D", "D"), 
                   x = c(4, 9, 2, 2), 
                   y = c(34, 29, 28, 26))   

hchart(test, "sankey", nodeWidth = 10, hcaes(from = a, to = b, weight = x)) %>% 
  hc_tooltip(nodeFormatter = JS("
    function() {
      // Function for y sum calculation
      function getSum(arr, val) {
        var idx = [], i, sumy=0;
        for (i = 0; i < arr.length; i++) {
          if (arr[i].from==val | arr[i].to==val) {
            sumy = sumy + arr[i].y
          }
        }
        return(sumy)
      }
      // Get y sum and show it in the tooltip       
      sumy = getSum(this.series.options.data, this.name);
      var result = 'Node: ' + this.name + 
                   '<br>Sum y: <b>' + sumy + '</b>';
      return result;
    }")) %>%
  hc_tooltip(pointFormatter = JS("
    function() {
      // Function for y sum calculation
      function getSum(arr, val) {
        var idx = [], i, sumy=0;
        for (i = 0; i < arr.length; i++) {
          if (arr[i].a==val) {
            sumy = sumy + arr[i].y
          }
        }
        return(sumy)
      }
      // Get y sum and show it in the tooltip       
      sumy = getSum(this.series.options.data, this.from);
      var result = this.from + ' -> ' + this.to + 
                   '<br>Sum y: <b>' + sumy + '</b>';
      return result;
    }")
  ) 

введите здесь описание изображения

person Marco Sandri    schedule 20.09.2019
comment
Привет Марко, спасибо за ваш ответ. Извините, я не ясно выразился, я имел в виду сумму y для каждого узла в подсказке узла, а не общую сумму этой переменной. Например, для A это будет 62 (34+28). Вы думаете, что это возможно? - person Roke Alvarez Masso; 22.09.2019
comment
Привет @MarcoSandri. Думаю, мы почти у цели. Подсказка, которая мне нужна, чтобы показать эту сумму, — это подсказка узла (теперь она говорит, undefined -> undefined Sum y:0), которую вы увидите, когда наведете указатель мыши на узлы (A, B, C или D). буквы в данном случае). Я попытался добавить функцию, которую вы написали, в nodeFormat, но она не сработала, как и некоторые варианты, которые я пробовал. Спасибо - person Roke Alvarez Masso; 25.09.2019