Curieux de savoir pourquoi nous ne pouvons pas appliquer un style de type divergent sur datatables.

Dans le code ci-dessous, iris n'a pas de NA et pour des raisons de simplicité, je souhaite appliquer un schéma divergent aux 150 entrées. Toutes les colonnes obtiendraient la couleur appliquée au rang Sepal.Length, mais il est trivial de le faire par colonne ...

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)]))
}

Il n'y a pas d'erreur signalée, mais cela ne fonctionne pas

Notez que différents ensembles de données avec des NA gâchent la coloration :

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))
}
r dt
3
K.J.J.K 16 nov. 2020 à 04:34

1 réponse

Meilleure réponse

Vous ne semblez pas pouvoir passer un vecteur de valeurs directement à l'argument color de formatStyle() à la place, vous pouvez utiliser la fonction d'assistance styleEqual() pour mapper les valeurs aux couleurs 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))
}
1
27 ϕ 9 16 nov. 2020 à 02:38