R Highcharter Drilldown Set Ymin & Ymax + Название для каждого слоя - PullRequest
0 голосов
/ 10 сентября 2018

В настоящее время я работаю с highcharter java script wrapper в R. Я хотел бы вручную установить ось Y для каждого слоя, а также заголовок для каждого слоя, но не смог найти способ сделатьтак.

Например, заголовок для всех слоев в настоящее время "Базовое развертывание", и я хотел бы обновить это для каждого из развертываний.Как и я хотел бы вручную установить ось Y.

Заранее спасибо.

Текущий код ниже.

df <- data_frame(
  name = c("Animals", "Fruits", "Cars"),
  y = c(5, 2, 4),
  drilldown = tolower(name)
)

df

hc <- highchart() %>%
  hc_chart(type = "column") %>%
  hc_title(text = "Basic drilldown") %>%
  hc_xAxis(type = "category") %>%
  hc_legend(enabled = FALSE) %>%
  hc_plotOptions(
    series = list(
      boderWidth = 0,
      dataLabels = list(enabled = TRUE)
    )
  ) %>%
  hc_add_series(
    data = df,
    name = "Things",
    colorByPoint = TRUE
  )


dfan <- data_frame(
  name = c("Cats", "Dogs", "Cows", "Sheep", "Pigs"),
  value = c(4, 3, 1, 2, 1)
)

dffru <- data_frame(
  name = c("Apple", "Organes"),
  value = c(4, 2)
)

dfcar <- data_frame(
  name = c("Toyota", "Opel", "Volkswagen"),
  value = c(4, 2, 2)
)

hc <- hc %>%
  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "animals",
        data = list_parse2(dfan)
      ),
      list(
        id = "fruits",
        data = list_parse2(dffru)
      ),
      list(
        id = "cars",
        data = list_parse2(dfcar)
      )
    )
  )

hc

EDIT * обновлен с ответом на динамически установленный Yaxis для R старших чартах.

      drilldown =  JS('function(e) {
 console.log(e.seriesOptions);
          this.setTitle({text: e.seriesOptions.name || e.seriesOptions.id });
          this.yAxis[0].update({ min: this.yAxis[0].getExtremes().max * 0.5 })}')

1 Ответ

0 голосов
/ 10 сентября 2018

Прежде всего, вам нужно немного реорганизовать свой код, потому что это не правильно. Например, попробуйте создать новую переменную со всеми именами серий и назначить этот список имен полю drilldown в вашем data.frame:

names <- c("Animals", "Fruits", "Cars")

df <- data.frame(
  name = names,
  y = c(5, 2, 4),
  drilldown = names
)

Затем измените детализацию id в определении объекта детализации, поскольку нет необходимости заставлять их начинаться с нижнего регистра:

hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "Animals",
        data = list_parse2(dfan)
      ),
      list(
        id = "Fruits",
        data = list_parse2(dffru)
      ),
      list(
        id = "Cars",
        data = list_parse2(dfcar)
      )
    )
  )

Последний шаг - определение обработчиков функций chart.events.drilldown и chart.events.drillup, внутри которых вы будете устанавливать chart.title.text с помощью функции Chart.update(). Чтобы определить его, вы должны использовать встроенную функцию JS() R, как показано ниже:

hc_chart(type = "column", events = list(
    load = JS("function() {console.log(this)}"),
    drilldown = JS("function(e) {this.update({title: {text: e.seriesOptions.id}})}"),
    drillup = JS("function() {this.update({title: {text: 'Basic drilldown' }})}")
  )) %>%

На самом деле, я не совсем понимаю эту часть вопроса:

Так же, как я хотел бы вручную установить ось Y.

Если вы опишите это более точно, я расширю ответ.

...