我有一个数据集,该数据集创建了一个具有基于另一列的颜色代码的列。
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上编码过,所以我不知道我在做什么)
请帮助:)
答案 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)