HighcharteR несколько всплывающих подсказок открываются с помощью HideDelay - PullRequest
0 голосов
/ 04 декабря 2018

В основном я пытаюсь заставить всплывающие подсказки оставаться на несколько секунд, а не закрываться при наведении на другой регион, например, , чтобы оставить след старых открытых подсказок , как в этом примере

Тестовые данные:

require(dplyr)
require(highcharter)

mapdata <- get_data_from_map(download_map_data("countries/us/us-all"))
set.seed(1234)

data_fake <- mapdata %>% 
  select(code = `hc-a2`) %>% 
  mutate(value = 1e5 * abs(rt(nrow(.), df = 10)))

hcmap("countries/us/us-all", data = data_fake, value = "value",
      joinBy = c("hc-a2", "code"), name = "Fake data",
      dataLabels = list(enabled = TRUE, format = "{point.name}"),
      borderColor = "#FAFAFA", borderWidth = 0.1,
      tooltip = list(valueDecimals = 2, valuePrefix = "$", valueSuffix = "USD", 
hideDelay = 3, followPointer = F)) 

Я нашел опцию для hideDelay, но есть ли опция, чтобы всплывающая подсказка оставалась в живых (без закрытия) при наведении курсора на другой регион?Есть ли опция для этого, или, может быть, существует настраиваемая функция всплывающей подсказки?

В качестве альтернативы, решение с подсказкой по нажатию может также помочь, если есть опция, указывающая, что старые подсказки не будут закрываться при другойнажмите.

1 Ответ

0 голосов
/ 06 декабря 2018

Как предложил @ewolden, вы можете обернуть функцию Highcharts.Tooltip.prototype.updatePosition.Чтобы заставить его работать в R, вы можете заключить эту функцию в событие chart.load, как в этом примере:

require(dplyr)
require(highcharter)

mapdata <- get_data_from_map(download_map_data("countries/us/us-all"))
set.seed(1234)

data_fake <- mapdata %>% 
  select(code = `hc-a2`) %>% 
  mutate(value = 1e5 * abs(rt(nrow(.), df = 10)))

hcmap("countries/us/us-all", data = data_fake, value = "value",
      joinBy = c("hc-a2", "code"), name = "Fake data",
      tooltip = list(followPointer = F), chart = list(
        events = list(
          load = JS("Highcharts.Tooltip.prototype.updatePosition = function(point) {
                var chart = this.chart,
                label = this.getLabel(),
                pos = (this.options.positioner || this.getPosition).call(
                this,
                label.width,
                label.height,
                point
                ),
                anchorX = point.plotX + chart.plotLeft,
                anchorY = point.plotY + chart.plotTop,
                pad,
                cloneToolTip;



                // Set the renderer size dynamically to prevent document size to change
                if (this.outside) {
                pad = (this.options.borderWidth || 0) + 2 * this.distance;
                this.renderer.setSize(
                label.width + pad,
                label.height + pad,
                false
                );
                anchorX += chart.pointer.chartPosition.left - pos.x;
                anchorY += chart.pointer.chartPosition.top - pos.y;
                }

                // do the move
                this.move(
                Math.round(pos.x),
                Math.round(pos.y || 0), // can be undefined (#3977)
                anchorX,
                anchorY
                );
                cloneToolTip = chart.tooltip.label.element.cloneNode(true);
                cloneToolTip = chart.container.firstChild.appendChild(cloneToolTip);
                setTimeout(function() {
                cloneToolTip.remove();
                }, 500)
                }")
                )
              ))
...