(R) 编辑Data中多列数据后面单元格的渐变色Table
(R) Edit Gradient Color of Cells Behind Multiple Columns of Data In Data Table
几天前我问了一个类似的问题,通过与一些人交谈取得了一些进展,但我需要更多帮助才能达到我想要的程度。所以这就是我所在的位置:
我想要一个特定大小的数据 table,其中包含数据列(不同比例),并且能够将颜色范围(有点像热图)应用于单元格中的值数据的大小 table 取决于列中值的大小。
这是提供给我的一些代码:
library(DT)
testrun <- round(runif(100), 6)
data <- data.frame(testrun = testrun)
brks <- quantile(data$testrun, probs = seq(.05, .95, .01), na.rm = TRUE)
clrs_df <- colorRamp(c("white","blue"))(c(0,brks)) %>%
as_tibble(.name_repair ="minimal") %>%
setNames(nm=c("r","g","b")) %>%
mutate_all(~as.character(round(.,digits=0))) %>%
mutate(mycolor=paste0("rgb(",paste(r,g,b,sep = ","),")"))
clrs <- pull(clrs_df,mycolor)
DT::datatable(data,rownames=TRUE,options = list(lengthChange = FALSE, dom='t')) %>%
formatStyle(colnames(data), backgroundColor = styleInterval(brks, clrs))
上面的示例适用于一列数据,但我打算拥有多列数据,我希望这些颜色渐变分别应用于每一列。
我已经尝试在代码的赋值部分和 brks 赋值行中用 mtcars 代替 testrun,但结果是 table 没有应用任何颜色。
有人可以帮我指明正确的方向吗?如有任何帮助,我们将不胜感激!
谢谢!
我想你想要:
library(DT)
data <- data.frame(
C1 = rnorm(100),
C2 = rgamma(100, 10, 10)
)
dtable <- datatable(data, rownames=TRUE, options = list(lengthChange = FALSE, dom='t'))
colRamp <- colorRamp(c("white","blue"))
for(column in names(data)){
x <- na.omit(data[[column]])
brks <- quantile(x, probs = seq(.05, .95, .01))
RGB <- colRamp(c(0, (brks-min(x))/(max(x)-min(x))))
clrs <- apply(RGB, 1, function(rgb){
sprintf("rgb(%s)", toString(round(rgb,0)))
})
dtable <- dtable %>%
formatStyle(column, backgroundColor = styleInterval(brks, clrs))
}
dtable
几天前我问了一个类似的问题,通过与一些人交谈取得了一些进展,但我需要更多帮助才能达到我想要的程度。所以这就是我所在的位置:
我想要一个特定大小的数据 table,其中包含数据列(不同比例),并且能够将颜色范围(有点像热图)应用于单元格中的值数据的大小 table 取决于列中值的大小。
这是提供给我的一些代码:
library(DT)
testrun <- round(runif(100), 6)
data <- data.frame(testrun = testrun)
brks <- quantile(data$testrun, probs = seq(.05, .95, .01), na.rm = TRUE)
clrs_df <- colorRamp(c("white","blue"))(c(0,brks)) %>%
as_tibble(.name_repair ="minimal") %>%
setNames(nm=c("r","g","b")) %>%
mutate_all(~as.character(round(.,digits=0))) %>%
mutate(mycolor=paste0("rgb(",paste(r,g,b,sep = ","),")"))
clrs <- pull(clrs_df,mycolor)
DT::datatable(data,rownames=TRUE,options = list(lengthChange = FALSE, dom='t')) %>%
formatStyle(colnames(data), backgroundColor = styleInterval(brks, clrs))
上面的示例适用于一列数据,但我打算拥有多列数据,我希望这些颜色渐变分别应用于每一列。
我已经尝试在代码的赋值部分和 brks 赋值行中用 mtcars 代替 testrun,但结果是 table 没有应用任何颜色。
有人可以帮我指明正确的方向吗?如有任何帮助,我们将不胜感激!
谢谢!
我想你想要:
library(DT)
data <- data.frame(
C1 = rnorm(100),
C2 = rgamma(100, 10, 10)
)
dtable <- datatable(data, rownames=TRUE, options = list(lengthChange = FALSE, dom='t'))
colRamp <- colorRamp(c("white","blue"))
for(column in names(data)){
x <- na.omit(data[[column]])
brks <- quantile(x, probs = seq(.05, .95, .01))
RGB <- colRamp(c(0, (brks-min(x))/(max(x)-min(x))))
clrs <- apply(RGB, 1, function(rgb){
sprintf("rgb(%s)", toString(round(rgb,0)))
})
dtable <- dtable %>%
formatStyle(column, backgroundColor = styleInterval(brks, clrs))
}
dtable