Программные цветовые форматы числовых столбцов по каждому диапазону столбцов в Datatable - PullRequest
0 голосов
/ 01 марта 2019

Я открыл поток о том, как добавить диапазоны в таблицу данных: Программно отформатируйте числовые столбцы в таблице данных .

Однако вместо подгонки диапазонов на основе целых данныхкадр, я хотел бы отформатировать на основе диапазона каждого отдельного столбца.Я разобрался с кодом, который работает, однако он определенно устрашающий и не программный.

library(magrittr)
library(DT)

# Specify numeric columns
foo <- sapply(iris, is.numeric)

datatable(iris, filter = 'top', options = list(pageLength = 5, autoWidth = TRUE)) %>%
  formatStyle(names(iris)[foo][1],
              background = styleColorBar(range(iris[, 1]), 'lightblue'),
              backgroundSize = '98% 88%',
              backgroundRepeat = 'no-repeat',
              backgroundPosition = 'center') %>%
  formatStyle(names(iris)[foo][2],
              background = styleColorBar(range(iris[, 2]), 'green'),
              backgroundSize = '98% 88%',
              backgroundRepeat = 'no-repeat',
              backgroundPosition = 'center')

enter image description here

1 Ответ

0 голосов
/ 01 марта 2019

Вот начало, которое строит его для каждого числового столбца в наборе данных.Вы можете изменить это, чтобы соответствовать конкретному случаю использования.

library(tidyverse)
library(DT)
library(RColorBrewer)

colorbarTable = function(table,colorscale){
  num = sapply(table,is.numeric) #Find which columns are numeric
  colors = brewer.pal(sum(num),colorscale) #Define the number of colors

  DT = datatable(table,filter = 'top',options = list(pageLength = 5, autoWidth = TRUE)) #Define the base data table

  for(i in seq_along(num)){
    if(num[i]){
      #If numeric add to the datatabls
      DT = DT%>%
        formatStyle(names(table)[i],
                    background = styleColorBar(range(table[,i]), colors[i]),
                    backgroundSize = '98% 88%',
                    backgroundRepeat = 'no-repeat',
                    backgroundPosition = 'center')
    }
  }

  return(DT)
}


colorbarTable(mtcars,"Pastel1")

Протестировано с набором данных iris и mtcars.

...