R, как добавить процент изменения во всплывающую подсказку на линейном графике?

Я хочу отобразить во всплывающей подсказке% изменения значений y. Однако я не хочу менять ось Y на проценты, как в https://www.highcharts.com/stock/demo/compare.

Вы можете сделать все расчеты в tooltip.formatter, проверьте API: api.highcharts.com/highcharts/tooltip.formatter

magdalena 27.12.2022 18:38

@magdalena, можно поконкретнее? Я безуспешно пытался в течение последних нескольких дней

Caetano Almeida e Brito 28.12.2022 11:18

Похоже, вы новичок в SO; Добро пожаловать в сообщество! Если вы хотите быстро получить отличные ответы, лучше сделать ваш вопрос воспроизводимым. Сюда входят образцы данных, такие как вывод из dput() или reprex::reprex(), а также любые библиотеки, которые вы используете. Проверьте это: создание воспроизводимых вопросов R. Когда вы задаете вопрос без кода, довольно сложно дать вам подробный ответ (например, как форматировать всплывающие подсказки). Это форматирование зависит от элементов вашего кода и ваших данных и структуры данных. Если вы не можете поделиться своими данными, используйте фиктивные данные.

Kat 29.12.2022 16:27

@Kat, ты видишь мой новый вопрос: «Как изменить формат оси Y, если есть опция процентного изменения?» ? Это не воспроизводимо

Caetano Almeida e Brito 02.01.2023 11:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлять

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

Я построил 2 акции на этом графике. Для каждой акции есть две серии, одна не для сравнения, а другая для сравнения. Две серии связаны. Серия сравнения установлена ​​​​на visible = F.

Значение для сравнения собирается из невидимого связанного ряда в настраиваемой подсказке и добавляется к не сравниваемому ряду.

library(highcharter)
library(quantmod)

# get data
goo <- getSymbols("GOOG", auto.assign = F)
app <- getSymbols("AAPL", auto.assign = F)
goog <- goo$GOOG.Open
appl <- app$AAPL.Open

highchart() %>% 
  hc_chart(zoomType = "x", marginTop = 20) %>% 
  hc_rangeSelector(enabled = T) %>% 
  hc_navigator(enabled = F) %>% 
  hc_scrollbar(enabled = F) %>% 
  hc_tooltip(
    formatter = htmlwidgets::JS(
      "function() {
          /* collect name, x (and format it), y, color, compare value, & % diff */
      nm = this.series.name;
      xform = Highcharts.dateFormat('%B %e, %Y', this.x);        /* collect/format date */
      compVal = this.series.linkedSeries[0].dataModify.compareValue; /* 1st val in view */
      col = this.color; y = this.y;                          /* set color and y to vars */
      delta = (y - compVal)/compVal * 100;   /* compute the comparison value as HC does */   
      tooltip = `<span>${xform}<br><hr><b><span style='color:${col};'>`; /* create tooltip */
      tooltip += `● ${nm}:</span></b> ${y.toFixed(2)} (${delta.toFixed(2)}%)</span>`;
      return tooltip; /* send back new tooltip */
      }")) %>% 
  hc_add_series(goog, name = "Google", id = 'g', compare = F) %>% 
  hc_add_series(appl, name = "Apple", id = 'a', compare = F) %>% 
  hc_add_series(goog, visible = F, linkedTo = 'g', compare = "percent") %>% 
  hc_add_series(appl, visible = F, linkedTo = 'a', compare = "percent") %>% 
  hc_xAxis(type = "datetime") %>%    # since it's a line, not stock, format x-axis
  hc_yAxis(opposite = F, tickAmount = 5) # add values to y


Первоначально написал

Ваш вопрос нельзя воспроизвести, но если вам нужен перевод JS на R специально для Highcharter, я могу это сделать.

Атрибут compare = "percent" создаст для вас дельта-значения.

library(highcharter)
library(quantmod)

goo <- getSymbols("GOOG", auto.assign = F) # get Google stock data
app <- getSymbols("AAPL", auto.assign = F) # get Apple stock data
goo <- goo$GOOG.Adjusted # only plotting one feature
app <- app$AAPL.Adjusted


highchart(type = "stock") %>% 
  hc_add_series(goo, name = "Google", 
                compare = "percent") %>%  # compare the stock data creates % data
  hc_add_series(app, name = "Apple", 
                compare = "percent") %>% 
  hc_rangeSelector(selected  = 4) %>% 
  hc_tooltip(pointFormat = '<span style = "color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
             valueDecimals = 2,
             split = T)

Спасибо, но это не совсем решает мою проблему. Вы видите мой вопрос: «Как изменить формат оси y, если есть возможность процентного изменения?» . Я думаю, вы лучше поймете мою проблему, и она воспроизводима. спасибо за помощь

Caetano Almeida e Brito 03.01.2023 09:33

Проблема в том, что когда вы используете атрибут «сравнить», ось Y меняется на значения в %. Я хочу остаться со значениями y

Caetano Almeida e Brito 03.01.2023 09:37

Я обновил свой ответ. Дайте мне знать, если у вас есть вопросы или возникнут какие-либо проблемы.

Kat 04.01.2023 18:38

Другие вопросы по теме