Shiny Rhandsontable - Renderer - Используйте цвет из фактора (Pallete) - PullRequest
0 голосов
/ 24 октября 2018

У меня есть набор данных, в котором я создал столбец с цветовыми кодами на основе другого столбца.

 colourCount = length(unique(Desc.File$VARIABLECODE))
getPalette = colorRampPalette(brewer.pal(9, "Set1"))
Colors <- getPalette(colourCount) 

Desc.File$ColorCode <- factor(Desc.File$VARIABLECODE, labels = Colors)

Созданный объект является списком цветовых кодов HEX

"# E41A1C" "# D42229" "# C52B37" "# B63445" "# A73D52" "# 974560" "# 884E6E" "# 79577C" "# 6A6089" "# 5B6997" "# 4B71A5" "# 3C7AB2" "#3880B1 "" # 3A85A8 "" # 3C899E "" # 3E8D94 "" # 3F918B "" # 419681 "" # 439A77 "" # 459E6E "" # 47A364 "" # 49A75A "

С этим столбцомЯ использую цвета для сюжета, и я также хотел бы использовать те же цвета на цвете фона / текста в Rhandsontable.

color_renderer = "function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);

clr   = instance.params.ColorCode

td.style.background=  hex(clr[row])
}
"

colnames(Summary.tab) <- c("Code", "Brand", "Type", "Description", "Metric", "ColorCode", "Execution", "Cost")
Summary.tab <- data.frame(Check=rep(TRUE, n),Summary.tab)
DT = rhandsontable(Summary.tab, readOnly = FALSE, rowHeaders= NULL, useTypes= TRUE, selectCallback = TRUE) %>% hot_col("Code", renderer=color_renderer)

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

Пожалуйста, помогите:)

1 Ответ

0 голосов
/ 30 января 2019

Вам нужно передать параметр ColorCode в rhansontable, только тогда вы можете выбрать его в функции рендерера.Вот пример:

library(shiny)
library(rhandsontable)

color_renderer = "
    function(instance, td, row, col, prop, value, cellProperties) {
        Handsontable.renderers.TextRenderer.apply(this, arguments);
        if (instance.params) {
            clr = instance.params.ColorCode
            clr = clr instanceof Array ? clr : [clr]
            td.style.background =  clr[row]
        }

    }"

set.seed(12345)
Desc.File <- data.frame(VARIABLECODE = sample(letters, 10, replace = TRUE))

colourCount <- length(unique(Desc.File$VARIABLECODE))
getPalette <- colorRampPalette(RColorBrewer::brewer.pal(9, "Set1"))
colors <- getPalette(colourCount) 

Desc.File$ColorCode <- factor(Desc.File$VARIABLECODE, labels = colors)


ui <- fluidPage(
    rHandsontableOutput("table")
)

server <- function(input, output) {

    output$table <- renderRHandsontable({
        rhandsontable(Desc.File, ColorCode = Desc.File$ColorCode) %>% 
            hot_cols(renderer = color_renderer)
    })

}

shinyApp(ui = ui, server = server)
...