R highcharter - сгруппированные категории - отсутствует метка для группы только с одним значением

Код R:

setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) 
options(stringsAsFactors = FALSE)
rm(list = ls()) 
if (!require("pacman")) install.packages("pacman")
pacman::p_load("dplyr","tidyr","highcharter")

raw_data <- read.csv("results.csv")
DT <- data.table(raw_data)

cols <- c('Person','ABC_Capability','ABC_Sub.capability','Leadership.Facet','Facet.Score')
DT <- DT[, cols, with = FALSE]
names(DT) <- c('Person','Capability','Sub_Capability','SVL','Facet_Score')

DT <- dcast(DT, Capability + Sub_Capability + SVL ~ Person, 
            value.var = c('Facet_Score'))

DT1 <- DT %>% 
  group_by(name = Sub_Capability) %>% 
  do(categories = .$SVL) %>% 
  list_parse()


highchart() %>% 
  hc_chart(type = "bar") %>% 
  hc_title(text = "Some Title") %>%
  hc_add_series(name="A", data = DT$Joan) %>% 
  hc_add_series(name="B", data = DT$Shane) %>%
  hc_add_series(name="C", data = DT$Simon) %>%
  hc_xAxis(categories = DT1)

Выход:

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

Я попытался использовать меньший набор данных и понял, что каждый раз, когда в группе есть одно значение. Метка усекается. Например: Развивает людей> Расширение прав и возможностей.

Любая помощь будет оценена по достоинству.


person Urvah Shabbir    schedule 30.05.2018    source источник
comment
Я мало что знаю о R, но похоже, что это та же проблема, что и в этой демонстрации: jsfiddle. net / BlackLabel / eLf0rn2q Если у вас есть только одна категория на втором уровне, вы должны помнить о представлении ее в виде массива только с одним элементом. Если вы передадите строку, JS интерпретирует ее как массив символов.   -  person Kamil Kulig    schedule 01.06.2018


Ответы (1)


Как упоминал Камил Кулиг, вы можете попробовать сделать категории как массив вместо vector, и у меня это сработало. Используя предоставленный вами образец кода, это будет:

DT1 <- DT %>% 
  group_by(name = Sub_Capability) %>% 
  # store SVL as array
  do(categories = array(.$SVL)) %>% 
  list_parse()

Новое обновление:

Вектор необходимо преобразовать в массив с помощью функции array(), даже если вы не используете сгруппированные категории, а просто хотите переименовать метки галочки, т.е.

highcharter::hchart(mtcars[1, ],
                    "column", name = "MPG",
                    highcharter::hcaes(x = 0, y = mpg),
                    showInLegend = F) %>%
    # x axis format
    highcharter::hc_xAxis(title = list(text ="Car Name"),
                          # relabel x axis tick to the name of the cars
                          categories = array(rownames(mtcars)[1]))

тогда метка оси отобразит название автомобиля.

Когда вектор названия автомобиля преобразуется в массив

Если вы используете просто categories = rownames(mtcars)[1]) вместо преобразования его в массив, метка оси x не будет отображаться должным образом:

Когда вектор названий автомобилей введен как есть

Здесь галочкой стоит просто M вместо Mazada RX4.

person Aaron Situ    schedule 18.03.2019