首页 > 解决方案 > 数据表 R 中的调色板

问题描述

好奇为什么我们不能在datatables.

在下面的代码中,iris没有 NA,为了简单起见,我想对 150 个条目应用发散方案。所有列都会将颜色应用于 Sepal.Length 等级,但按列执行它很简单......

library(DT);library(colorspace);library(dplyr)
data(iris)
dt=datatable(iris) 

for (x in colnames(iris)) {
  if(x=='Species')next
  dt=dt %>% 
    formatStyle(x, color = tolower(diverging_hsv(150)[rank(iris$Sepal.Length)]))
}

没有报告错误,但这不起作用

注意带有 NA 的不同数据集会弄乱颜色:

dt <- datatable(airquality) 

these=c('Wind','Ozone')
for (x in these) {
  #v <- full_seq(unique(airquality[[x]]), .1)
  v = airquality[[x]]
  cs <- diverging_hsv(length(v))
  dt <- dt %>% 
    formatStyle(x, backgroundColor = styleEqual(v, cs))
}

标签: rdt

解决方案


您似乎无法将值向量直接传递给颜色参数,formatStyle()而是可以使用辅助函数styleEqual()将值映射到颜色 1 到 1:

library(DT)
library(colorspace)
library(dplyr)
library(tidyr)

dt <- datatable(iris) 

for (x in colnames(iris)) {
  if (x == 'Species') next 
  v <- full_seq(unique(iris[[x]]), .1)
  cs <- diverging_hsv(length(v))
  dt <- dt %>% 
    formatStyle(x, color = styleEqual(v, cs))
}

推荐阅读