闪亮的Rhandsontable-渲染器-使用因数中的颜色(调色板)

时间:2018-10-24 10:39:37

标签: javascript r shiny rhandsontable

我有一个数据集,该数据集创建了一个具有基于另一列的颜色代码的列。

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

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

然后创建的对象是十六进制颜色代码的列表

  

“#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)

我正在尝试使用渲染器从我的数据集中的color列中获取颜色,然后将其用作背景颜色,但是它不起作用。 (我以前从未在JS上编码过,所以我不知道我在做什么)

请帮助:)

1 个答案:

答案 0 :(得分:0)

您需要将参数ColorCode传递给rhansontable,然后才能在renderer函数中进行选择。这是示例:

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)