R Highcharter: Пользовательская цветовая палитра для уровня детализации - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над drilldowns в Highcharter и хотел бы создать собственный цветовой профиль на основе имен столбцов. Я могу сделать это для начального графика, но не могу сделать это для второго уровня (и последующего третьего уровня при необходимости). В настоящее время детализация просто берет цвет исходного столбца, я бы хотел предоставить детализацию собственную цветовую схему.

Проблема в том, куда мне поставить Colors2 в list().

Ниже приведен код:

library (shinyjs)
library (tidyr)
library (data.table)
library (highcharter)
library (dplyr)
library (shinydashboard)
library (shiny)

x <- c("Farm","Farm","Farm","City","City","City","Ocean","Ocean")
y <- c("Sheep","Sheep","Cow","Car","Bus","Bus","Boat","Boat")
z <- c("Bill","Tracy","Sandy","Bob","Carl","Newt","Fig","Tony")
a <- c(1,1,1,1,1,1,1,1)

dat <- data.frame(x,y,z,a)

header <- dashboardHeader()
body <- dashboardBody(highchartOutput("Working"))
sidebar <- dashboardSidebar()

ui <- dashboardPage(header, sidebar, body)

server <- function(input, output, session) {


  output$Working <- renderHighchart({

    #Custom Color Profile
    Set1 <- dat$x == "Farm"
    Set1[is.na(Set1)] <- FALSE
    Set2 <- dat$x == "City"
    Set2[is.na(Set2)] <- FALSE
    Set3 <- dat$x == "Ocean"
    Set3[is.na(Set3)] <- FALSE
    dat[Set1, "Colors"] <- "#E4551F"
    dat[Set2, "Colors"] <- "#00AB8E"
    dat[Set3, "Colors"] <- "#E4551F"

    Set1 <- dat$y == "Sheep"
    Set1[is.na(Set1)] <- FALSE
    Set2 <- dat$y == "Cow"
    Set2[is.na(Set2)] <- FALSE
    Set3 <- dat$y == "Car"
    Set3[is.na(Set3)] <- FALSE
    Set4 <- dat$y == "Bus"
    Set4[is.na(Set4)] <- FALSE
    Set5 <- dat$y == "Boat"
    Set5[is.na(Set5)] <- FALSE
    dat[Set1, "Colors2"] <- "#009A00"
    dat[Set2, "Colors2"] <- "#F6FC00"
    dat[Set3, "Colors2"] <- "#FF7900"
    dat[Set4, "Colors2"] <- "#D20000"
    WIP[Set5, "Colors2"] <- "#009A00"

    #First Tier
    datSum <- dat %>%
      group_by(x, Colors) %>%
      summarize(Quantity = sum(a)
      )
    Lvl1dfStatus <- tibble(name = datSum$x, y = datSum$Quantity, Colors = datSum$Colors, drilldown = tolower(name))

    #Second Tier
    Level_2_Drilldowns <- lapply(unique(dat$x), function(x_level) {
      datSum2 <- dat[dat$x == x_level,]

      datSum2 <- datSum2 %>%
        group_by(y, Colors2) %>%
        summarize(Quantity = sum(a)
        )
      Lvl2dfStatus <- tibble(name = datSum2$y,y = datSum2$Quantity, Colors = datSum2$Colors2, drilldown = tolower(paste(x_level, name, sep = "_")))

      list(id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus))
    })

    #Third Tier
    Level_3_Drilldowns <- lapply(unique(dat$x), function(x_level) {
      datSum2 <- dat[dat$x == x_level,]

      lapply(unique(datSum2$y), function(y_level) {
        datSum3 <- datSum2[datSum2$y == y_level,]

        datSum3 <- datSum3 %>%
          group_by(z) %>%
          summarize(Quantity = sum(a)
          )
        Lvl3dfStatus <- tibble(name = datSum3$z,y = datSum3$Quantity)

        list(id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus))
      })
    }) %>% unlist(recursive = FALSE)

    #Graph
    highchart() %>%
      hc_xAxis(type = "category") %>%
      hc_add_series(Lvl1dfStatus, "column", hcaes(x = name, y = y, color = Colors)) %>%
      hc_plotOptions(column = list(stacking = "normal")) %>%
      hc_drilldown(
        allowPointDrilldown = TRUE,
        series = c(Level_2_Drilldowns, Level_3_Drilldowns)
      )
  })

}


shinyApp(ui, server)
...