R Highcharter - имена по оси X превращаются в индексы на графике

У меня есть пара колонок в Highcharter, которые позволяют детализировать. Я заметил, что в зависимости от того, насколько велика детализация столбца, highcharter переключается с отображения правильных имен по оси X на индекс. Есть ли способ убедиться, что он всегда будет отображать имя оси x?

Ниже приведен пример кода, который показывает сценарий, где он отображается правильно, а где нет. Единственным изменением является размер набора данных (с 400 до 50).

library (highcharter)

rm(list=ls())

#### CASE 1 - X AXIS NAMES NOT SHOWING IN DRILLDOWN ####

h <- 0
Case1Num <- c()
for(i in 1:400){
  h <- h + .02
  Case1Num[i] <- h
}

Case1Name <- c()
for(i in 1:400){
  Case1Name[i] <- paste0("test",i)
}

Case1Group <- c()
for(i in 1:400){
  Case1Group[i] <- paste0("group1")
}

Case1 <- data.frame(Case1Name,Case1Num,Case1Group)

Lvl1 <- aggregate(Case1$Case1Num, by = list(Case1$Case1Group),FUN=sum)
Lvl1df <- data_frame(name = Lvl1$Group.1, y = Lvl1$x, drilldown = tolower((paste(name))))

dfLvl2 <- arrange(data_frame(name = Case1$Case1Name,value = Case1$Case1Num),desc(value))

hc <- highchart() %>%
  hc_chart(type = "column", zoomType = "x") %>%
  hc_xAxis(type = "category", labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_yAxis(gridLineWidth = 0, labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_add_series(data=Lvl1df, color = "#D20000") %>%
  hc_legend(enabled = TRUE) %>%
  hc_plotOptions(column = list(stacking = "normal")) %>%

  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(id = "group1", data = list_parse2(dfLvl2))
    )
  )

hc

#### CASE 2 - X AXIS NAMES SHOWING CORRECTLY IN DRILLDOWN ####

h <- 0
Case2Num <- c()
for(i in 1:50){
  h <- h + .02
  Case2Num[i] <- h
}

Case2Name <- c()
for(i in 1:50){
  Case2Name[i] <- paste0("test",i)
}

Case2Group <- c()
for(i in 1:50){
  Case2Group[i] <- paste0("group1")
}

Case2 <- data.frame(Case2Name,Case2Num,Case2Group)

Lvl1 <- aggregate(Case2$Case2Num, by = list(Case2$Case2Group),FUN=sum)
Lvl1df <- data_frame(name = Lvl1$Group.1, y = Lvl1$x, drilldown = tolower((paste(name))))

dfLvl2 <- arrange(data_frame(name = Case2$Case2Name,value = Case2$Case2Num),desc(value))

hc2 <- highchart() %>%
  hc_chart(type = "column", zoomType = "x") %>%
  hc_xAxis(type = "category", labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_yAxis(gridLineWidth = 0, labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_add_series(data=Lvl1df, color = "#D20000") %>%
  hc_legend(enabled = TRUE) %>%
  hc_plotOptions(column = list(stacking = "normal")) %>%

  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(id = "group1", data = list_parse2(dfLvl2))
    )
  )

hc2

person Kevin    schedule 04.05.2018    source источник
comment
какую версию пакета R и highcharter вы используете. Я получаю одинаковое поведение для обоих случаев, которые вы предоставили (полоса) с именем group1 и названием Series1 в легенде ниже.   -  person Katia    schedule 04.05.2018
comment
Привет @Katia, График верхнего уровня правильный, но когда вы нажимаете на полосу, чтобы выполнить развертку, один показывает 1,2,3,4,5... по оси x, а правильный показывает test1, test2, test3 и т. д. Вы можете увидеть test# для обоих случаев? Я использую R версии 3.4.2 (2017-09-28) и highcharter_0.5.0   -  person Kevin    schedule 04.05.2018
comment
А, теперь я вижу. Я подозреваю, что это может быть связано с тем, что в случае 50 наблюдений он может вместить целое слово, а когда у вас есть 3 цифры для каждого идентификатора метки, он не помещается в поля. Настройка больших полей может помочь, но сначала мне нужно попробовать.   -  person Katia    schedule 04.05.2018
comment
Похоже, что любое число больше 50 (даже 51) заставляет его переключиться на индекс... поэтому мое предположение о том, что имя слишком длинное, неверно. Похоже, это ошибка в пакете.   -  person Katia    schedule 04.05.2018
comment
Об этой ошибке уже сообщалось. См.: https://stackoverflow.com/questions/42378342/is-there-a-maximum-number-of-x-axis-items-in-highcharts   -  person Katia    schedule 04.05.2018


Ответы (2)


Это открытый вопрос с Highcharts. Не только в R, но и в JavaScript. Об этой проблеме сообщалось здесь:

https://github.com/highcharts/highcharts/issues/5857

person Katia    schedule 04.05.2018

Похоже, проблема была решена в ветке github.

добавление cropThreshold = 1000 к hc_plotOptions решает проблему. Обычно по умолчанию установлено значение 50, поэтому приведенное выше было замечено для чего-то большего.

hc2 <- highchart() %>%
  hc_chart(type = "column", zoomType = "x") %>%
  hc_xAxis(type = "category", labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_yAxis(gridLineWidth = 0, labels = list(style = list(fontSize = "1.1vh"))) %>%
  hc_add_series(data=Lvl1df, color = "#D20000") %>%
  hc_legend(enabled = TRUE) %>%
  hc_plotOptions(column = list(
                 cropThreshold = 1000,
                 stacking = "normal")) %>%

  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(id = "group1", data = list_parse2(dfLvl2))
    )
  )
person Kevin    schedule 14.06.2018