Почему Datatable ломает последний бар, используя блестящие? - PullRequest
0 голосов
/ 30 мая 2019

У нас есть блестящее приложение, которое инкапсулирует DT, которое в свою очередь содержит зеленую полосу, как показано на рисунке ниже.Кто-нибудь сталкивался с такой же проблемой с самой последней строчкой?Другие приложения, которые у нас есть, работают отлично.

enter image description here

1 Ответ

2 голосов
/ 31 мая 2019

Вы, вероятно, использовали styleColorBar. С помощью этой функции полоса для ячейки, содержащей минимальное значение, имеет длину 0, поэтому вы получите ожидаемый результат. Чтобы иметь стержень с длиной, пропорциональной значению, вы можете использовать мою функцию styleColorBar2, представленную ниже. Эта функция принимает два цвета, один для отрицательных значений, а другой для положительных значений.

library(DT)

modelData <- data.frame(Channel = c("A", "B", "C"),
                        Current = c(2000, 3000, 4000),
                        Modified = c(2500, 3500, 3000),
                        New_Membership = c(500, 500, -1000),
                        stringsAsFactors = FALSE)

styleColorBar2 <- function (data, color1, color2) 
{
  M <- max(abs(data), na.rm = TRUE)
  js <- c(
    "value <= 0 ? ",  
    sprintf("'linear-gradient(90deg, transparent ' + (1+value/%f) * 100 + '%%, %s ' + (1+value/%f) * 100 + '%%)'", 
            M, color1, M),
    " : ",
    sprintf("'linear-gradient(90deg, transparent ' + (1-value/%f) * 100 + '%%, %s ' + (1-value/%f) * 100 + '%%)'", 
            M, color2, M) 
  )
  JS(js)
}

datatable(
  modelData , selection = 'none', editable = TRUE
) %>% formatStyle(
  'New_Membership',
  background = styleColorBar2(modelData$New_Membership, "red", "lightblue"),
  backgroundSize = '100% 50%',
  backgroundRepeat = 'no-repeat',
  backgroundPosition = 'center'
)
...